обновлено: AWS Lambda не может подключиться к MySQL - PullRequest
0 голосов
/ 11 июня 2018

Мне не удалось подключиться к MySQL с помощью AWS Lambda с Node.js.

Я пытался настроить группы безопасности для AWS MySQL и Lambda.Когда я использовал console.log, он показывает правильный ответ из базы данных как the data from db : rk, но когда я пытался протестировать, он не показывал правильный ответ.

Ниже были журналы и файлы index.js ижурналы.Кто-нибудь может направить меня?

index.js (я обновил свой код, как показано ниже):

var mysql = require('mysql');
var pool  = mysql.createPool({
    host     : 'mydbinstancelamda.connqa9taxeg.us-east-1.rds.amazonaws.com',
    user     : 'admin',
    password : 'password',
    database : 'dbname'
  });

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


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

var queryString = "SELECT emp_name from employee where emp_name='rk'";    
        connection.query(queryString, function(err, rows, fields) {
        if (err) throw err;
        console.log("the data from db : " + rows[0].emp_name);
        callback(null);
        connection.release(); 
    });
});
};

ошибка:

Response:
{
  "errorMessage": "2018-06-11T02:34:19.817Z ef864d3d-6d1f-11e8-b6e3-97ac89a0f544 Task timed out after 3.00 seconds"
}

Request ID:
"ef864d3d-6d1f-11e8-b6e3-97ac89a0f544"
Function Logs:
START RequestId: ef864d3d-6d1f-11e8-b6e3-97ac89a0f544 Version: $LATEST
dadf1a33-6d22-11e8-869d-7d7e31ccaf6e    the data from db : rk
END 

enter image description here

Ответы [ 2 ]

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

Я следовал моим инструкциям, данным @Dilip Kola, если мои ошибки не закрывали пул, аргументы обработчика! ...

мой полный код выглядит так:

var mysql = require('mysql');
var pool  = mysql.createPool({
    host     : 'url for mysql ',
    user     : 'username ',
    password : 'paswrod ',
    database : 'database-name'
  });

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


pool.getConnection(function(err, connection) {
    if (err) throw err;
var queryString = "SELECT emp_name from employee where emp_name='rk'";    
        connection.query(queryString, function(err, rows, fields) {
        if (err) throw err;
        console.log("the data from db : " + rows[0].emp_name); 
        connection.release(); 
        pool.end();
        callback(null,rows[0].emp_name);

    });
});
};

наконец я получил свой вывод как:

enter image description here

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

Попробуйте изменить время ожидания лямбда-вывода с лямбда-консоли, как показано на рисунке ниже:

enter image description here

Убедитесь, что группа безопасности RDS MySQL DB имеетразрешив соединения из группы безопасности Lambda, если они есть, тогда все готово.

ОБНОВЛЕНИЕ: Вам необходимо вызвать обратный вызов после того, как MySQL вернет ответ.

// change following line:
exports.handler =  (event, context, req,res,callback)=> {
// To this line:
exports.handler =  (event, context, callback)=> {

После завершения работы Вам необходимо перезвонить, чтобы сообщить лямбде, что работа завершена:

callback(undefined, result);

Пример: https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html#nodejs-prog-model-handler-example

...