Aws лямбда-функция слишком много проблем с подключением RDS - PullRequest
0 голосов
/ 13 июня 2019

У меня более 20 лямбда-функций для API моего мобильного приложения, так как при запуске пользовательского интерфейса меньше, поэтому все шло хорошо, но теперь, когда пользователь увеличился (от 3000 до 4000), я сталкиваюсь со слишком многими проблемами подключения в моем Лямбда-функция, из-за которой я начал получать внутреннюю ошибку сервера из моего API, я знаю, что что-то упустил при создании соединения в лямбда-выражении, но после большого количества попыток я не смог обнаружить эту недостающую ссылку, приведенный ниже код используется для создания соединения

      var con;


      exports.handler = async (event, context) => {
          context.callbackWaitsForEmptyEventLoop = false;
       if (!con || con.state == "disconnected" || con === "undefined") {

    con = secret
        .then((result) => {
            var data = JSON.parse(result.SecretString);
            var connection = mysql.createConnection(
                {
                    "host": data.host,
                    "user": data.username,
                    "password": data.password,
                    "database": data.db
                }
            );
            connection.connect();
            return connection;
        }).catch((err) => {
            throw err;
        });
}

Я пытался добавить con.destroy () перед отправкой ответа, но, похоже, это не решает проблему, поэтому, если есть что-то еще, что я могу сделать, пожалуйста, дайте мне знать.

1 Ответ

2 голосов
/ 14 июня 2019

Сложно точно знать, что происходит, мое первое предположение всегда зависит от установки context.callbackWaitsForEmptyEventLoop = false и сохранения соединения вне области действия функции - и то, и другое вы правильно сделали.

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

Джереми Дейли (Jeremy Daly) рассказывает о хороших методах борьбы с этим в следующих постах в своем блоге:

Кроме того, он создал библиотеку, которая управляет этим для вас, она называется serverless-mysql - которая создана для решения этой конкретной проблемы.

Личный опыт : у меня были проблемы с соединениями + лямбдами, и из-за этого я перешел на их DataAPI решение (мне пришлось перенести RDS на Aurora Serverless, что не большая боль) - его выпуск GA был приблизительно 2/3 недели назад. Если вам нужна дополнительная информация о Aurora SLS, проверьте ее здесь .

...