Соединения Postgres автоматически уничтожаются контейнером Lambda? - PullRequest
0 голосов
/ 26 декабря 2018

Если существует лямбда-функция Node.js, которая создает соединение с базой данных RDS Postgres, будет ли это соединение автоматически уничтожено (т. Е. Без настройки какого-либо параметра времени ожидания) при уничтожении контейнера Lambda?

(Я видел смешанные ответы по этому поводу.)

1 Ответ

0 голосов
/ 26 декабря 2018

Когда Lambda запускает вашу функцию, она создает контекст выполнения, который будет вашим «контейнером», хотя это больше похоже на микро-ВМ для лучшей изоляции (как мы узнали в re: Invent 2018).

Цитируя документацию (выделено мной).

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

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

[...]

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

Относительно вашего вопроса я бы заключил следующее:

  • Если у Lambda хранится замороженный контекст, он может использовать его, но нет никаких гарантий
  • Lambda может хранить ваш контекст некоторое время после выполнения и, таким образом, поддерживать соединение с базой данных, если оно было установлено / сохранено вне вашей функции-обработчика.
  • Lambda решает, следует ли и когда удалять какие-либозамороженные контексты и не дает никаких гарантий, когда это будет сделано.

Если вам необходимо убедиться, что ваше соединениеЭта операция завершается в конце выполнения, вы должны сделать это сами или оставить ее в функции обработчика, вы не можете полагаться на Lambda, чтобы сделать это за вас.

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