Как я могу взаимодействовать с экземпляром RDS MySQL с помощью лямбда-функции Node.js? - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь получить доступ к базе данных MySQL, размещенной на amazon RDS, через amazon Lambda.У меня есть файлы .js, которые я могу запустить через строку cmd в Windows, но когда я перехожу в Lambda, я не могу подключиться к базе данных.Я тщательно исследовал эту проблему, и даже после выполнения этого руководства: Redstapler AWS , я получаю сообщение об ошибке «процесс завершен до завершения запроса».

Мой код, скопированный из приведенного выше руководства

var mysql = require('mysql');

var pool = mysql.createPool({
host: "",
user: "",
password: "",
database: ""
});
exports.handler = (event,context,callback) => {
context.callbackWaitFOrEmptyEventLoop = false;
    pool.getConnection(function(err,connection){
    if (err) throw err;
    connection.query("SELECT * FROM testdata limit 10", 
        function(error,result,fields){
        connection.release();
        if (error) callback(error)
        else callback(null,result)   
        });
    });
};

Сообщение об ошибке, полученное от Amazon Lambda

Ответ: {"errorMessage": "RequestId: b5151db1-6db8-11e8-8004-1b9e8072561c Процесс завершен до завершения запроса"} ЗапросID: "b5151db1-6db8-11e8-8004-1b9e8072561c" Журналы функций: START RequestId: b5151db1-6db8-11e8-8004-1b9e8072561c Версия: $ LATEST 2018-06-11T20: 48: 01.478Z b5151db1-60041b9e8072561c Ошибка: Тайм-аут неактивности рукопожатия при рукопожатии.(/var/task/node_modules/mysql/lib/protocol/Protocol.js:164:17) в emitNone (events.js: 86: 13) в Handshake.emit (events.js: 185: 7) в Handshake._onTimeout(/var/task/node_modules/mysql/lib/protocol/septions/Sequence.js:129:8) в ontimeout (timers.js: 386: 14) в tryOnTimeout (timers.js: 250: 5) в Timer.listOnTimeout(timers.js: 214: 5) -------------------- at Protocol._enqueue (/var/task/node_modules/mysql/lib/protocol/Protocol.js: 145: 48) в Protocol.handshake (/var/task/node_modules/mysql/lib/protocol/Protocol.js:52:23) в PoolConnection.connect (/var/task/node_modules/mysql/lib/Connection.js: 130: 18) в Pool.getConnection (/var/task/node_modules/mysql/lib/Pool.js:48:16) в exports.handler (/var/task/main.js:11:6) END RequestId:b5151db1-6db8-11e8-8004-1b9e8072561c ОТЧЕТ RequestId: b5151db1-6db8-11e8-8004-1b9e8072561c Продолжительность: 10074,63 мсек. Продолжительность счета: 10100 мс. Размер памяти: 1280 МБ Макс. используемая память: 27 МБ
Request1db: b-6: бид.11e8-8004-1b9e8072561c Процесс завершен до завершенияing request

Этот учебник высоко оценен и, кажется, заслуживает уважения, но я не могу повторить его успех.Ошибка, по-видимому, означает, что connection.release расположен не в том месте, или мне нужен другой способ разорвать соединение и вернуть его в пул.

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Аналогичный вопрос: обновлено: AWS Lambda не может подключиться к MySQL

Поместите операторы журнала консоли, чтобы узнать, можете ли вы подключиться к RDS или нет.

...
connection.release();
console.log(result);
if (error) callback(error)
...

Убедитесь, что вы вызываете pool.end () перед вызовом функции обратного вызова, иначе выполнение лямбда-функции не будет завершено должным образом, поэтому вы получите ошибку тайм-аута.

0 голосов
/ 12 июня 2018

Убедитесь, что группы безопасности экземпляра RDS разрешают доступ из диапазона лямбда-IP-адресов (https://docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html)) или помещают лямбда в VPC, из которого доступен экземпляр RDS. По умолчанию лямбда не находится в VPC ...

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