gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:25:52 24 4
gpt4 key购买 nike

我正在尝试编写一个 lambda 函数,只要将 json 文件上传到 s3 存储桶就会触发该函数。该函数应该解析文件并将其立即存储在 DynamoDB 中。我创建了一个名为“数据”的表,主键设置为“日期”。到目前为止,这是我所拥有的功能:

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

def lambda_handler(event, context):
bucket = event['Records'][0]['s3']['bucket']['name']
json_file_name = event['Records'][0]['s3']['object']['key']
json_object = s3.Bucket(bucket).Object(json_file_name)
jsonFileReader = json_object['Body'].read()
jsonDict = json.loads(jsonFileReader)
table = dynamodb.Table('data')
table.put_item(Item = jsonDict)

这是我尝试使用的 json 文件的示例:

{
"date": "2020-06-07 21:00:34.284421",
"ConfirmedCases": 7062067,
"ActiveCases": 3206573,
"RecoveredCases": 3450965,
"Deaths": 404529
}

不幸的是,每当我测试代码时,它都会抛出这个错误:

[[ERROR] TypeError: string indices must be integers
Traceback (most recent call last):
File "/var/task/lambda_function.py", line 7, in lambda_handler
bucket = event'Records'][0]['s3']['bucket']['name']]

有谁知道如何解决这个问题?我已经浪费了很多时间试图解决这个问题,但我仍然无法:/

最佳答案

您的错误来自这两行中的任何一行。

bucket = event['Records'][0]['s3']['bucket']['name']
json_file_name = event['Records'][0]['s3']['object']['key']

但是,它们正确。这是从 S3 通知生成的事件中访问存储桶名称和对象键的有效方式

在我看来,其他东西正在触发您的功能。您在控制台中使用了 Test 选项并提供了不正确的 event 对象,或者有一些其他事件通过非 S3 事件触发了 lambda。

作为快速修复,您可以执行以下操作。如果 event 对象不包含 Records,下面的代码将完成:

def lambda_handler(event, context): 

if 'Records' not in event:
print(event) # good to check what event you get
return

# and the rest of code

关于python - AWS Lambda python 函数从 S3 解析 json 并存储在 DynamoDB 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62254685/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com