У нас есть лямбда, которая имеет триггер S3 ObjectCreated
.Когда файл загружается в определенное ведро S3 и каталог в нашей учетной записи, лямбда-файл загружает файл, используя boto3
(Python AWS SDK), разбивает его на части и помещает куски во множество небольших файлов S3 в другом ведре, используя *Функция 1003 * upload_file
через параллельную обработку (стратегия параллельной обработки в лямбда-функции Python изложена здесь ).
Среднее время обработки составляет около 2 минут 30 секунд.Однако время отклика S3 было намного выше, чем ожидалось в целом, и неизбежно один или два лямбда-выхода из-за ошибки тайм-аута.Частота отказов очень низкая, и с настройкой тайм-аута в 5 минут мы не можем понять, почему мы сталкиваемся со спорадическими сбоями тайм-аута, когда большинство лямбда-исполнений занимают только 2:30.
Мы используем максимально возможную память для каждой лямбды, и мы установили параллелизм на 30 для лямбды, чтобы ограничить выполнение, чтобы не превышать предельное значение объекта S3 PUT.
Мы не думаем, что это проблема производительности кода, поскольку большинство исполнений находятся в пределах допустимого времени ожидания, и мы склонны думать, что это связано с AWS.Мы не смогли определить, как мы можем повысить надежность и своевременность запросов большого объема PUT на S3.
Существуют ли дополнительные параметры конфигурации для S3 или Lambda, которые могут помочь?Или есть какой-то лучший способ использования boto3
для сокращения общего времени обработки, а также устранения спорадических сбоев?