首页 > 解决方案 > 更新:AWS Lambda 无法连接到 MySQL

问题描述

我无法使用带有 Node.js 的 AWS Lambda 连接到 MySQL。

我曾尝试为 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 

在此处输入图像描述

标签: amazon-web-servicesamazon-rds

解决方案


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

在此处输入图像描述

确保 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


推荐阅读