AWS Lambda: ошибка «конец потока» при взаимодействии с S3 - PullRequest
0 голосов
/ 11 июня 2019

У меня есть функция AWS Lambda , которая считывает файлы из S3 , преобразует их и записывает их в другое S3 ведро.Изначально функция работает отлично.Однако иногда, после повторного использования, я получаю эту ошибку:

{
    "errorMessage": "End of stream",
    "errorType": "lambda_handler",
    "stackTrace": []
}

Почему?

1 Ответ

0 голосов
/ 11 июня 2019

Я не уверен, какую технологию вы используете, но правильно ли вы распределяете потоки и / или пытаетесь найти позицию 0 в потоке, прежде чем пытаться читать снова?

Функция лямбда не гарантирует чистого запуска. Это на самом деле функция повторного использования предыдущего контейнера, который может содержать состояние из предыдущего вызова

После выполнения лямбда-функции AWS Lambda поддерживает контекст выполнения в течение некоторого времени в ожидании другой лямбды вызов функции. По сути, сервис останавливает выполнение контекст после завершения лямбда-функции и оттаивания контекста для повторное использование, если AWS Lambda выбирает повторно использовать контекст, когда Lambda функция вызывается снова. Этот подход повторного использования контекста имеет следующие последствия:

Любые объявления в вашем коде функции Lambda (вне обработчика код, см. Модель программирования) остается инициализированным, обеспечивая дополнительные оптимизация, когда функция вызывается снова. Например, если ваш Лямбда-функция устанавливает соединение с базой данных, а не восстановление соединения, исходное соединение используется в последующие вызовы. Мы рекомендуем добавить логику в ваш код для проверки если соединение существует до его создания.

Каждый контекст выполнения предоставляет 512 МБ дополнительного дискового пространства в Каталог / tmp. Содержимое каталога остается при выполнении контекст заморожен, предоставляя временный кеш, который можно использовать для несколько вызовов. Вы можете добавить дополнительный код, чтобы проверить, имеет ли кеш данные, которые вы сохранили. Для получения информации об ограничениях развертывания см. AWS Lambda Limits.

Фоновые процессы или обратные вызовы, инициированные вашей лямбда-функцией. который не завершился, когда функция закончила возобновление, если AWS Lambda выбирает повторно использовать контекст выполнения. Вы должны убедиться, что любой фоновые процессы или обратные вызовы (в случае Node.js) в вашем коде завершены до выхода кода.

https://docs.aws.amazon.com/lambda/latest/dg/running-lambda-code.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...