Как вы подключаетесь к RDS, используя лямбду, и я должен помещать туда запросы? - PullRequest
0 голосов
/ 16 марта 2019

Мой первый вопрос о подходе. это правильный путь?

У меня есть реагирующий интерфейс, я вызываю API-шлюз => это вызывает lambda => lambda делает запрос к БД => возвращает к API-шлюзу => реагирует

во-вторых, мой вопрос, как

У меня есть этот лямбда-код:

var pool = mysql.createPool({
  host     : RDSINSTANCE,
  user     : USER,
  password : PASSWORD,
  database : DBNAME
});

exports.handler = (event, context, callback) => {
    context.callbackWaitsForEmptyEventLoop = false
    pool.getConnection(function(err, connection) {

      connection.query('SELECT * FROM exercises', function (error, results, fields) {

        connection.release();

        if (error) context.fail(error)
        else context.succeed(null, results[0])

      });
    })
}

Я могу подтвердить, что когда я изменил код, чтобы он был локально совместимым с узлом, он правильно вернул мне строку, за которой я был, поэтому RDS настроен правильно, как и код javascript.

однако, моя лямбда истекает

Я добавил эту строку: context.callbackWaitsForEmptyEventLoop = false так как несколько человек сказали, что это проблема. однако время ожидания истекло

Я также пытался использовать callback вместо context., но безрезультатно

что я делаю не так?

1 Ответ

0 голосов
/ 16 марта 2019

Правильный путь от шлюза API к лямбде.

Я советую использовать callback вместо context для передачи информации вызывающей стороне, поскольку это официально документированный способ сделать это. 1

Следует учитывать, что Lambda, возможно, не смогла получить объект подключения из пула и обработать этот сценарий.

exports.handler = (event, context, callback) => {
    context.callbackWaitsForEmptyEventLoop = false;

    pool.getConnection(function(err, connection) {
        if (err)
            callback(err);

        connection.query('SELECT * FROM exercises', function (error, results, fields) {
            connection.release();

            if (error) callback(error);
            else callback(null, results[0]);
        });
    });
}
...