I have written a simple lambda function in nodejs which queries data from amazon rds.(note : my lambda and rds are in default vpc with all ports open and also tried increasing time out in lambda)
My issue is when I test my lambda function I get log output with the queried data but I am also getting
Execution result: failed with "errorMessage": "2017-07-05T15:05:27.425Z 596fdf39-6193-11e7-9176-f58796899f9b Task timed out after 3.00 seconds" }
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"); }
START RequestId: 596fdf39-6193-11e7-9176-f58796899f9b Version: $LATEST 2017-07-05T15:05:24.680Z 596fdf39-6193-11e7-9176-f58796899f9b Connected! 2017-07-05T15:05:24.684Z 596fdf39-6193-11e7-9176-f58796899f9b [ RowDataPacket { id: 1, name: 'sai' }, RowDataPacket { id: 2, name: 'chandra' }, RowDataPacket { id: 3, name: 'AA' }, RowDataPacket { id: 4, name: 'dfdd' } ] END RequestId: 596fdf39-6193-11e7-9176-f58796899f9b REPORT RequestId: 596fdf39-6193-11e7-9176-f58796899f9b Duration: 3003.80 ms Billed Duration: 3000 ms Memory Size: 1536 MB Max Memory Used: 21 MB 2017-07-05T15:05:27.425Z 596fdf39-6193-11e7-9176-f58796899f9b Task timed out after 3.00 seconds
You need to exit the lambda through a success or error callback. Otherwise, the engine stays on until a timeout occurs.
The easiest way to exit your lambda would be to call 'context.succeed("done");' after you code is 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");
}
Here some basic introduction to the topic:
The accepted solution doesn´t work for me. I´m connecting to a RDS instance and if I send "context.succeed("done")", the callback is not called.
I´m connecting to an Amazon RDS instance inside a lambda running nodejs 8.1.
SOLUTION:
In order to exit of "Nodejs event Loop" you must add the next code to invoke the callback:
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,
});
});
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.