Управление подключением к БД в функциях AWS Lambda - PullRequest
0 голосов
/ 17 ноября 2018

Я использую AWS Lambda для создания своего API. Я решил использовать монолитную архитектуру, чтобы минимизировать холодные запуски. Я использую express.js для маршрутизации и библиотеку mysqljs для подключения к моей базе данных. API находится в разных папках: маршруты, контроллеры и модели:

my-app
├── index.js
├── controllers
├── models
└── routes

Я использую безсерверный фреймворк и безсерверный автономный режим для локальной разработки.

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

В настоящее время я создаю пул в index.js внутри exports.handler, а затем передаю его маршрутам, который передает его маршрутам, передает его контроллерам, которые передают его моделям. Когда модель возвращает контроллер, я звоню res.json() и pool.end().

Это хорошо работает в автономном режиме без сервера, но когда я вызываю API изнутри функции Lambda, в первый раз он работает нормально, но во второй раз я получаю Cannot enqueue Query after invoking quit. Я думал, что каждый вызов API будет новым «вызовом».

...