Многокомпонентная загрузка S3 - асинхронная полная многочастная загрузка - PullRequest
0 голосов
/ 09 сентября 2018

Я пытаюсь завершить многоэтапную загрузку, используя мою лямбду (aws), написанную на python. Ниже приведен код, который я использую. Есть около 120 частей, а общий размер составляет 30 ГБ. Представленная ниже операция, по-видимому, не завершается в течение 5 минут, поэтому лямбда отключается, и загрузка не завершается. Предлагает ли S3 функцию асинхронной загрузки нескольких частей? Я полагаю, что это обеспечит объединение файла независимо от выключения лямбды.

resp = s3.complete_multipart_upload(Bucket=bucket_name, Key=result_filename, UploadId=upload_id, MultipartUpload={'Parts': parts_mapping})

1 Ответ

0 голосов
/ 10 сентября 2018

AWS Lambda ограничивает максимальное время выполнения одного вызова до 5 минут. Вы можете написать лямбда-функции, которые выполняют долгосрочные задачи, как рекурсивные функции.

context.get_remaining_time_in_millis()

Когда ваша функция вызывается, объект контекста позволяет вам узнать, сколько времени осталось в текущем вызове.

Для минимизации нет. из рекурсий наша функция будет:

  • Ограничьте размер детали, используйте небольшую партию.
  • В конце каждой партии вызовите context.getRemainingTimeInMillis (), чтобы проверить, сколько времени оставленный в этом вызове
  • Если осталось более 1 минуты в вызов затем обрабатывает другую партию; иначе рекурсировать

Примеры ссылок: Рекурсивная лямбда-функция Рекурсивная лямбда в правильном направлении

...