使用 Lambda/Python 将多个文件上传到 S3
Upload multiple files to S3 using Lambda/Python
所以我正在编写一个由来自 DynamoDB Streams 的事件触发的 Lambda 函数,我想将这些事件写入 S3(以创建数据湖)。但此代码仅上传相同的 json 文件。如何在不覆盖这个文件的情况下将多个文件上传到 s3?
import boto3
import json
s3 = boto3.client('s3')
def lambda_handler(event, context):
bucket ='bto-history'
dynamodb = boto3.resource('dynamodb')
tableUsers = dynamodb.Table('Users')
jsonToUpload = event['Records']
uploadFile = bytes(json.dumps(jsonToUpload).encode('UTF-8'))
jsonToUpload = "userUpdate" + ".json"
s3.put_object(Bucket=bucket, Key=jsonToUpload, Body=uploadFile)
return {
'statusCode': 200,
'body': event
}
event['Records']
是您需要迭代的列表。
参见 https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html
每个条目都包含有关 dynamodb 事件的信息。
您没有说,但我猜您正在编写一个由 DynamoDB Streams 中的事件触发的 Lambda 函数,并且您想将这些事件写入 S3。
如果您想在 S3 中维护多个 files/objects,那么您需要为它们提供唯一的密钥。写入 userUpdate.json 将简单地用该键覆盖任何现有对象(除非您启用了版本控制,我认为您没有启用)。
因此,每次都创建一个唯一的对象键。您可以插入以毫秒(或其他)为单位的时间戳,这可能是唯一的。或者您可以插入一个 UUID。
值得一问:为什么要将 DynamoDB Streams 事件存储在 S3 中?
所以我正在编写一个由来自 DynamoDB Streams 的事件触发的 Lambda 函数,我想将这些事件写入 S3(以创建数据湖)。但此代码仅上传相同的 json 文件。如何在不覆盖这个文件的情况下将多个文件上传到 s3?
import boto3
import json
s3 = boto3.client('s3')
def lambda_handler(event, context):
bucket ='bto-history'
dynamodb = boto3.resource('dynamodb')
tableUsers = dynamodb.Table('Users')
jsonToUpload = event['Records']
uploadFile = bytes(json.dumps(jsonToUpload).encode('UTF-8'))
jsonToUpload = "userUpdate" + ".json"
s3.put_object(Bucket=bucket, Key=jsonToUpload, Body=uploadFile)
return {
'statusCode': 200,
'body': event
}
event['Records']
是您需要迭代的列表。
参见 https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html
每个条目都包含有关 dynamodb 事件的信息。
您没有说,但我猜您正在编写一个由 DynamoDB Streams 中的事件触发的 Lambda 函数,并且您想将这些事件写入 S3。
如果您想在 S3 中维护多个 files/objects,那么您需要为它们提供唯一的密钥。写入 userUpdate.json 将简单地用该键覆盖任何现有对象(除非您启用了版本控制,我认为您没有启用)。
因此,每次都创建一个唯一的对象键。您可以插入以毫秒(或其他)为单位的时间戳,这可能是唯一的。或者您可以插入一个 UUID。
值得一问:为什么要将 DynamoDB Streams 事件存储在 S3 中?