首页 > 解决方案 > 使用 boto3 从 S3 存储桶中的 JSON 文件中提取元素

问题描述

我创建了一个 AWS Python Lambda,它模拟数据并将其作为消息发送到相关的 AWS IoT 主题。

我不想从 lambda 中的 os.environ 读取 Client_ID,而是想从我使用 boto3 存储在 S3 中的 JSON 文件中提取它们

标签: jsonpython-3.xamazon-web-servicesamazon-s3boto3

解决方案


您应该考虑使用“S3 Select”,它允许您直接在 S3 中查询文件,而无需将文件下载到系统。在 boto3 中,它被称为select_object_content。我根据您的信息和 boto3 页面在下面构建了一个示例。

response = client.select_object_content(
    Bucket='mybucketname',
    Key='simulated/config/IoT-sim-config.json',
    Expression="SELECT s.* FROM S3Object s WHERE s.client_id = 'Sim_1'", # You will need to fiddle with the quotes on the SQL here.
    ExpressionType='SQL',
    InputSerialization={
        'JSON': {
            'Type': 'DOCUMENT'
        }
    },
    OutputSerialization={
        'JSON': {
            'RecordDelimiter': ','
        }
    }
)

推荐阅读