Я пытаюсь ускорить передачу записей, содержащихся в файле JSON, хранящемся в корзине AWS S3, в таблицу AWS DynamoDB. Записи в файле JSON хранятся в виде списка словарей в форме [{'id':'123', 'name':'abc'}, {'id':'456','name':'def'}, ...]
. Для передачи записи я использую table.batch_writer()
в Boto3. Этот код содержится в лямбда-скрипте AWS, так что, когда корзина S3 заполняется новым объектом JSON, начинается передача записи. Я обнаружил, что даже при максимальном тайм-ауте, установленном для AWS Lambda (15 минут), операции put_item () не завершаются для всех записей, которые в среднем составляют около 40 КБ. Операции put_item () кажутся невероятно медленными, что заставляет меня думать, что это не оптимальный способ передачи записей из S3 в DynamoDB.
Существует ли более быстрый способ передачи записей JSON из корзины S3 в таблицу DynamoDB?
import json
import boto3
s3_client = boto3.client('s3')
dynamodb = boto3.resource('dynamodb',region_name='us-east-2')
def lambda_handler(event, context, verbose=True):
bucket = event['Records'][0]['s3']['bucket']['name']
json_filename = event['Records'][0]['s3']['object']['key']
json_object = s3_client.get_object(Bucket=bucket, Key=json_filename)
json_file = json_object['Body'].read()
data_dict = json.loads(json_file)
table = dynamodb.Table('the_dynamodb_table_name')
with table.batch_writer() as batch:
for rec in data_dict:
batch.put_item(Item=rec)