我是AWS和学习的新手。我在S3文件夹中有一个包含员工详细信息的JSON文件。将JSON文件上传到S3时,使用PYTHON 3.6编写了Lambda函数以加载DynamoDB表XXXXX-YYYY-ZZZZ-Employees。所有设置均已通过策略和角色完成,以访问CloudwatchLog,S3和DynamoDB。日志文件显示以下错误。看来问题在于文件是[[]等字典格式,而put_item需要字符串..不确定。
(empid是主键)
在Google和AWS论坛中查看代码和研究问题
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_client.get_object(Bucket=bucket, Key=json_file_name)
jsonFileReader = json_object['Body'].read()
#print(jsonFileReader)
jsonDict = json.loads(jsonFileReader)
#print(jsonDict)
table = dynamodb.Table('XXXXXX-YYYYY-ZZZZZZ-Employees')
table.put_item(Item=jsonDict)
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
预期结果:DynamoDB表已加载JSON文件数据 实际结果:cloudwatchlog中出现错误:
参数Item的类型无效,值:[{'empid':10004,'email':'test1@email.com','first'':'John5','lastname':'Smith5','location' :'ABCD-B207','移动电话':'123-456-7890','工作':'098-765-4321','站点':'ABCD'},{'empid':10005,'email' :'test1@email.com','名字':'John6',.................'}],键入:,有效类型:
答案 0 :(得分:1)
您的程序正在将整个文件读入jsonDict
。然后,您尝试使用字典插入一项。
相反,您应该一次提取一行,然后使用put_item()
插入一项。对每行重复一次。
可能会发生以下情况:
jsonDict = json.loads(jsonFileReader)
table = dynamodb.Table('XXXXXX-YYYYY-ZZZZZZ-Employees')
for item in jsonDict:
table.put_item(Item=item)