我在nodejs中编写了一个简单的lambda函数,用于查询来自amazon rds的数据。(注意:我的lambda和rds是默认的vpc,所有端口都打开,并尝试增加lambda中的时间)
我的问题是,当我测试我的lambda函数时,我得到日志输出查询数据,但我也得到了
执行结果:“errorMessage”失败:“2017-07-05T15:05:27.425Z 596fdf39-6193-11e7-9176-f58796899f9b任务在3.00秒后超时” }
@Override
public void updateItem(final Boolean item, final boolean empty) {
super.updateItem(item, empty);
if (item != null) {
setText(item.toString());
} else {
setText("");
}
}
var mysql = require('mysql');
exports.handler = (event, context) => {
var con = mysql.createConnection({
host: "testdb.cxyzu.ap-south-1.rds.amazonaws.com",
user: "root",
password: "mypassword",
database: "test",
port: "3306",
// debug: true
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
// var sql = "INSERT INTO users (id, name) VALUES (4, 'dfdd')";
var sql = "select * from test.users";
con.query(sql, function (err, result) {
if (err) throw err;
// console.log("1 record inserted");
console.log(result);
});
});
//callback("sucess");
}
答案 0 :(得分:6)
您需要通过成功或错误回调退出lambda。否则,引擎会一直运行,直到发生超时。
退出lambda的最简单方法是调用' context.succeed(" done");'代码完成后。
var mysql = require('mysql');
exports.handler = (event, context) => {
var con = mysql.createConnection({
host: "testdb.cxyzu.ap-south-1.rds.amazonaws.com",
user: "root",
password: "mypassword",
database: "test",
port: "3306",
// debug: true
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
// var sql = "INSERT INTO users (id, name) VALUES (4, 'dfdd')";
var sql = "select * from test.users";
con.query(sql, function (err, result) {
if (err) throw err;
// console.log("1 record inserted");
console.log(result);
context.succeed("done");
});
});
//callback("sucess");
}
这里有一些关于这个主题的基本介绍:
答案 1 :(得分:2)
接受的解决方案对我不起作用。我连接到RDS实例,如果我发送“context.succeed(”done“)”,则不会调用回调。
我正在运行nodejs 8.1的lambda中连接到Amazon RDS实例。
<强> SOLUTION:强>
为了退出“Nodejs event Loop”,你必须添加下一个代码来调用回调:
connection.end( function(err) {
if (err) {console.log("Error ending the connection:",err);}
// reconnect in order to prevent the"Cannot enqueue Handshake after invoking quit"
connection = mysql.createConnection({
host : 'rds.host',
port : 3306,
user : 'user',
password : 'password',
database : 'target database'
});
callback(null, {
statusCode: 200,
body: response,
});
});