#python #amazon-web-services #amazon-s3 #aws-lambda #amazon-dynamodb
#python #amazon-веб-сервисы #amazon-s3 #aws-lambda #amazon-dynamodb
Вопрос:
итак, я пишу лямбда-функцию, которая запускается событиями из потоков DynamoDB, и я хочу записать эти события в 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
}
Комментарии:
1. К вашему сведению, в DynamoDB нет файлов. В нем есть таблицы, элементы и атрибуты.
2. Не могли бы вы отредактировать свой вопрос, чтобы объяснить, чего вы хотите достичь? Например, что запускает функцию Lambda? Какую информацию вы хотите сохранить в S3? Каким вы хотите, чтобы ключ (имя файла) был при записи в S3?
3. Изменен вопрос. Я хочу, чтобы ключ был файлом json при записи в S3.
Ответ №1:
Вы не сказали, но я предполагаю, что вы пишете лямбда-функцию, которая запускается событиями из потоков DynamoDB, и вы хотите записать эти события в S3.
Если вы хотите сохранить несколько файлов / объектов в S3, вам нужно предоставить им уникальные ключи. Запись в userUpdate.json просто перезапишет любой существующий объект этим ключом (если у вас не включено управление версиями, чего, я полагаю, у вас нет).
Итак, каждый раз создавайте уникальный ключ объекта. Вы можете вставить временную метку в миллисекундах (или другую), которая, вероятно, уникальна. Или вы можете вставить UUID.
Стоит спросить: почему вы хотите сохранить события DynamoDB Streams в S3?
Комментарии:
1. Спасибо за ответ! Я работаю над озером данных, в котором хранятся данные сотрудников, эти данные поступают из формы. Кстати, у меня в корзине включено управление версиями.
2. Хорошо, вы не можете обновлять объекты в S3, поэтому лучше всего регистрировать эти события DynamoDB в уникальных объектах в S3 (это может быть уникальное имя файла уникальной комбинации папки имя файла, оба из которых, конечно, на самом деле являются ключами) или регистрировать их в другом месте (например, журналы CloudWatch или СУБД).
Ответ №2:
event['Records']
это список, который вам нужно перебрать. См. https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html
Каждая запись содержит информацию о событии dynamodb.