AWS lambda: Выполнение функции по тайм-ауту

#amazon-web-services #aws-lambda

Вопрос:

Я разрабатываю лямбда — функцию, которая переносит журналы с SFTP-сервера в корзину S3.

Из — за размера журналов функция иногда отключается-даже несмотря на то, что я установил максимальный тайм-аут в 15 минут.

 try:  logger.info(f'Migrating {log_name}... ')  transfer_to_s3(log_name, sftp)  logger.info(f'{log_name} was migrated succesfully ')  

Если transfer_to_s3() произойдет сбой из-за тайм-аута logger.info(f'{log_name} was migrated succesfully') , строка не будет выполнена.

Я хочу убедиться, что в этом сценарии я каким-то образом узнаю, что журнал не был перенесен из-за тайм-аута.

Есть ли способ заставить лямбду выполнить действие перед выходом в случае тайм-аута?

Комментарии:

1. «заставить лямбду что-то сделать, прежде чем выбросить время?» что это значит? Вы можете запрограммировать любую логику, какую захотите.

2. @Dimitris вы можете увеличить время ожидания лямбда-функции в Configuration --gt; General Setting

3. @jebasuthan Мой вопрос был сформулирован неправильно. Отредактирую его. Я уже установил время ожидания лямбды на 15 минут, что является максимально допустимым.

4. @Marcin перефразировал вопрос

Ответ №1:

Вероятно, лучшим способом было бы использовать для этого SQS:

 Logo info ---gt; SQS queue ---gt; Lambda function  

Если lambda успешно перемещает файлы, она удаляет данные журнала из очереди SQS. Если это не удается, информация журнала сохраняется в очереди SQS (или отправляется в DLQ для специальной обработки), поэтому следующий вызов лямбда-кода может обработать ее.

Комментарии:

1. Просто чтобы понять, вы рекомендуете что-то вроде: SFTP Server ---gt; Lambda Function ---gt; SQS queue ---gt; Lambda function ? Я не совсем понимаю, если честно

2. @Dimitris в вашем вопросе не указано, как работает ваш сервер. Но если вы не можете напрямую взаимодействовать с sqs, вы можете добавить дополнительную лямбду, как вы описали.