Сбой лямбда-функции при выполнении обработки
Это возможно.
и занимает несколько минут илидаже пару часов (я не знаю, возможно ли это вообще), чтобы вернуться.
Это не совсем возможно.
Лямбда-функция может запускаться только до тех пор, пока она не вернет ответ, не выдаст ошибку или не сработает таймер таймаута, в зависимости от того, что наступит раньше.Это никогда не займет пару часов.
Lambda будет создавать новый контейнер каждый раз, когда вызывается функция, если только у него уже нет одного готового для вас или вы не достигнете предела параллелизма (обычно 1000+).
Однако ... для потоков Kinesis происходит немного иначе из-за необходимости обработки по порядку.
Источники событий на основе опроса (или модели извлечения), которыеоснованы на потоках: они состоят из потоков данных Kinesis или DynamoDB.В случае сбоя вызова лямбда-функции AWS Lambda пытается обработать ошибочный пакет записей до истечения срока действия данных, который может быть до семи дней.
Исключение рассматривается как блокировка, а AWS Lambda не будетчитать любые новые записи из сегмента до тех пор, пока не истечет или не будет успешно обработан неудачный пакет записей.Это гарантирует, что AWS Lambda обрабатывает события потока по порядку.
https://docs.aws.amazon.com/lambda/latest/dg/retries-on-errors.html
Таким образом, ваша функция Lambda, выбрасывающая исключение или выполняющая его время ожидания, просто вызовет уничтожение службы Lambdaнемедленно создать контейнер и сразу же создать новый, а затем еще раз повторить вызов с теми же данными, пока не истечет срок действия данных (в соответствии с настройкой Kinesis).
Задержка обычно не превышает тайм-аут иливремя, необходимое для возникновения исключения, плюс некоторое количество миллисекунд (до нескольких секунд для холодного запуска).Тайм-аут настраивается индивидуально для самой функции Lambda, до 15 минут (но этот максимум, вероятно, слишком длинный).
Потенциально важно запомнить несколько скрытых деталей - есть система, котораячасть службы Lambda, которая читает ваш поток Kinesis, а затем сообщает другой части службы Lambda, чтобы она вызывала вашу функцию с пакетом записей.Служба Lambda (не ваша функция Lambda) проверяет поток, извлекая данные - поток технически не передает данные в Lambda.Потоки DynamoDB и SQS работают аналогично - Lambda извлекает данные и обрабатывает повторные попытки, повторно вызывая функцию.Другая служба не несет ответственности за передачу данных.