更新:AWS Lambda 无法连接到 MySQL
updated : AWS Lambda is not able to connect to 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
尝试从 lambda 控制台更改 lambda 执行超时,如下图所示:
确保 RDS MySQL DB 的安全组允许来自 Lambda 安全组的连接,如果有相同的安全组,那么您就可以开始了。
更新:
您需要在 MySQL returns 响应后调用回调。
// change following line:
exports.handler = (event, context, req,res,callback)=> {
// To this line:
exports.handler = (event, context, callback)=> {
工作完成后,需要回调告诉lambda工作完成:
callback(undefined, result);
我按照@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);
});
});
};
最后我得到了我的输出:
我无法通过 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
尝试从 lambda 控制台更改 lambda 执行超时,如下图所示:
确保 RDS MySQL DB 的安全组允许来自 Lambda 安全组的连接,如果有相同的安全组,那么您就可以开始了。
更新: 您需要在 MySQL returns 响应后调用回调。
// change following line:
exports.handler = (event, context, req,res,callback)=> {
// To this line:
exports.handler = (event, context, callback)=> {
工作完成后,需要回调告诉lambda工作完成:
callback(undefined, result);
我按照@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);
});
});
};
最后我得到了我的输出: