AWS Python лямбда истекает навсегда после первого таймаута - PullRequest
2 голосов
/ 06 ноября 2019

Проблема:

У меня есть лямбда-питон, который постоянно получает данные каждую секунду и помещает их в DynamoDB . Я заметил, что после того, как в первый раз DynamoDB потребовалось немного больше времени, и время ожидания функции истекло, все последующие вызовы также перестают работать и время ожидания не восстанавливается. Чтобы вернуть лямбду в нормальное состояние, нужно заново ее развернуть. Когда начинается тайм-аут, он не отображает никаких журналов. Время ожидания истекло без выполнения какого-либо кода.

Ниже приведено изображение нашей консоли, представляющее проблему.

aws lambda console

InЧтобы быстрее воспроизвести проблему с помощью этой функции, я сделал следующее:

  1. Повторно разверните ее и убедитесь, что она работает нормально.
  2. Уменьшите доступную для лямбды память до минимума и тайм-аутадо 1 секунды. Это приведет к первому тайм-ауту
  3. Увеличьте память лямбды до нормального и даже увеличьте тайм-аут. Однако время ожидания сохраняется

Есть ли способ решить эту проблему без повторного развертывания?

Я видел то же описание проблемы, но с nodejs в этом сообщении: https://forums.aws.amazon.com/thread.jspa?threadID=234417.

Я не видел никакого описания, связанного с python lambda env

Больше информации о настройке:

Проверено лямбда-окружений: python3.6 и python3.7

Инструмент для развертывания лямбда-выражений: без сервера 1.57.0

используемые серверные плагины: serverless-python-требования, serverless-wsgi

Я не использую любой VPC для лямбды

Спасибо за помощь,

1 Ответ

0 голосов
/ 07 ноября 2019

Разобрался с триггером для бага. Когда загружаемая zam-функция лямбда-функции слишком велика, после первого тайм-аута она никогда не восстанавливается!

Мое решение заключалось в тщательном удалении ненужных зависимостей, чтобы уменьшить размер пакета.

Я создал хранилище, используя докер-контейнер, чтобы люди могли легче воспроизвести проблему:

https://github.com/pedrohbtp/bug-aws-lambda-infinite-timeout

Спасибо за сообщения в комментариях. Я ценю того, кто тратит время, чтобы попытаться помочь здесь, в SO.

...