已更新:AWS Lambda无法连接到MySQL

时间:2018-06-11 02:59:25

标签: amazon-web-services amazon-rds

我无法使用AWS Lambda与Node.js连接到MySQL。

我曾尝试为AWS MySQL和Lambda配置安全组。当我使用var dataStream = File.OpenRead(filePathWoFileName + request.fileName); //send out HttpResponseMessage httpResponseMessage = Request.CreateResponse(HttpStatusCode.OK); httpResponseMessage.Content = new StreamContent(dataStream); 时,它会将数据库中的正确响应显示为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(); 
    });
});
};

enter image description here

2 个答案:

答案 0 :(得分:1)

尝试从lambda控制台更改lambda执行超时,如下图所示:

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)=> {

工作完成后,你需要回调告诉lambda工作是否完成:

callback(undefined, result);

示例:https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html#nodejs-prog-model-handler-example

答案 1 :(得分:1)

我按照@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