AWS Lambda 使用 Python,从 S3 Bucket 中获取 .json 文件数据并放入 DynamoDB

无名之主

这是我编写的代码,并且似乎获得了迄今为止最好的结果。我仍然遇到错误,但到目前为止我得到了最好的结果。

我需要从 .json 文件中读取三件事,即使用 Python 的 ID、名称和国家/地区。

import json
import boto3

s3_client = boto3.client('s3')
dynamodb = boto3.resource('dynamodb')

table = dynamodb.Table('valid_cities')



def lambda_handler(event, context):
    bucket = event['Records'][0]['s3']['bucket']['name']
    print(bucket)
    
    json_file_name = event['Records'][0]['s3']['object']['key']
    print(json_file_name)
    
    json_object = s3_client.get_object(Bucket=bucket,Key=json_file_name)
    print(json_object)
    
    file_reader = json_object['Body'].read().decode("utf-8")
    print(file_reader)
    
    jsonDict = json.loads(file_reader)
    print(jsonDict)
    

    table.put_item(Item={'id':{'N':id},'name':{'S':name},'country':{'S':country}})

我已经做到了这一点,它读取 S3 存储桶中的 json 文件,并对其进行处理。现在我遇到了一个错误,指出以下内容:

{
  "errorMessage": "name 'name' is not defined",
  "errorType": "NameError",
  "requestId": "c2f72151-9591-4f35-909b-6b7876b4253a",
  "stackTrace": [
    "  File \"/var/task/lambda_function.py\", line 28, in lambda_handler\n    table.put_item(Item={'id':{'N':id},'name':{'S':name},'country':{'S':country}})\n"
  ]

这是 citylist.json 文件中的一段示例数据:

{
    "city_list":[
        {
            "id": 6951112,
            "name": "Somerset West",
            "state": "",
            "country": "ZA",
            "coord": {
                "lon": 18.821131,
                "lat": -34.084011
            }
        },
        {
            "id": 3358975,
            "name": "Yzerfontein",
            "state": "",
            "country": "ZA",
            "coord": {
                "lon": 18.16157,
                "lat": -33.344379
            }
        }
]
}
格雷戈

就像 Anon Coward 建议的那样,但最后一行可以保持简单:

import json
import boto3

s3_client = boto3.client('s3')
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('valid_cities')

def lambda_handler(event, context):
    bucket = event['Records'][0]['s3']['bucket']['name']
    json_file_name = event['Records'][0]['s3']['object']['key']
    json_object = s3_client.get_object(Bucket=bucket,Key=json_file_name)
    jsonDict = json.load(json_object['Body'])
    
    for city in jsonDict['city_list']:
        table.put_item(Item={'id': city['id'],'name': city['name'],'country':city['country']})

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用AWS Lambda将文件写入s3(python)?

如何使用lambda函数从AWS s3获取文本文件的内容?

使用Java Lambda在AWS S3上读取文件

在AWS Lambda中使用来自S3触发器的事件数据

如何将AWS Lambda与python一起放入aws DynamoDb中

使用API网关,Lambda,Cognito,S3和Dynamodb部署AWS Global基础架构

使用Lambda和NodeJS运行时从S3文件中读取JSON并将记录插入dynamoDB中

AWS Lambda(Python)无法在S3中解压缩和存储文件

如何使用python中的lambda函数在通过S3连接的AWS雅典娜中进行查询

AWS Lambda无法从S3获取文件

如何使用aws_s3_bucket_object数据源获取s3对象的列表?

使用AWS Lambda在S3中更改CSV文件

如何使用Node.js在AWS Lambda函数上从S3 Bucket播放音频文件?

AWS Lambda:使用Python从s3存储桶读取csv文件尺寸,而无需使用Pandas或CSV包

如何在.yaml中编写策略以使用aws sam cli从s3读取python lambda

AWS Lambda python函数可从S3解析json并将其存储在DynamoDB中

使用Python获取AWS S3子目录中每个文件夹的最后修改日期

将文件从AWS Lambda(Python)中的多部分/表单数据上传到S3

使用AWS NodeJS Lambda读取AWS dynamoDB中的过滤数据

如何使用Python中的Boto检查文件是否已完成上传到S3 Bucket?

无法使用python从AWS dynamodb中获取get_item?

将 json 写入镶木地板对象以使用 Lambda Python 放入 S3

使用 aws lambda 节点 js 获取存储在 s3 存储桶中的视频的视频元数据

从 s3 Bucket 获取数据

如何使用 Lambda 和 Python 在 AWS s3 中读取和覆盖文件?

如何 SAM 使用项目目录中的初始文件部署 AWS::S3::Bucket

如何使用 boto3 在 Python 中访问 AWS S3 Bucket

无法使用 python 将数据附加到 AWS S3 中的现有 csv 文件

AWS:使用 lambda 函数读取 Amazon S3 存储桶中的所有文件