我无法使用Lambda函数中的Node连接到MySQL数据库。我收到的错误是Task timed out after 4.00 seconds
。
有没有人有任何解决方案?
以下是我的州的概述:
我的代码:
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'amazon-string.rds.amazonaws.com',
user : 'myusername',
password : 'mypassword'
});
connection.connect();
exports.handler = (event, context, callback) => {
connection.query("SELECT * FROM table", function(err, rows, fields) {
console.log("rows: " + rows);
callback(null);
});
};
答案 0 :(得分:7)
将超时时间增加到一分钟。这可能是由于lambda函数的冷启动。
只有你的第一次通话需要时间,连续的通话应该非常快,因为你正在重复使用相同的连接。
此外,如果超时时间较长,并不意味着您需要支付超时费用,则只会在Lambda运行时收取费用。
另外,为了加快冷启动时间你可以 webpack 你的脚本,
http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/webpack.html
还有一个问题被注意到,
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'amazon-string.rds.amazonaws.com',
user : 'myusername',
password : 'mypassword'
});
connection.connect();
exports.handler = (event, context) => {
connection.query("SELECT * FROM table", function(err, rows, fields) {
console.log("rows: " + rows);
context.succeed('Success');
});
};
希望它有所帮助。
答案 1 :(得分:3)
由于您正在使用RDS,请查看其安全组配置。默认情况下,RDS的安全组将允许来自您自己的IP和默认VPC上的默认安全组的入站连接。但是,默认情况下,Lambda在没有VPC的情况下运行,因此无法与RDS建立连接。
更改RDS实例以允许所有IP地址,或在RDS实例可以访问的VPC下执行Lambda功能,并允许访问安全组。