我正在尝试学习如何使用AWS中的lambda函数连接MySQL。我在网上遵循了一些说明,基本上得到了以下代码:
var mysql = require('mysql');
var pool = mysql.createPool({
connectionLimit : 1000,
connectTimeout : 60 * 60 * 1000,
acquireTimeout : 60 * 60 * 1000,
timeout : 60 * 60 * 1000,
host: "foo-bar-123.us-east-2.rds.amazonaws.com",
user: "root",
password: "pass123",
database: "sample_db",
});
exports.handler = (event, context, callback) => {
// prevent timeout from waiting event loop
context.callbackWaitsForEmptyEventLoop = false;
pool.getConnection(function(err, connection) {
if (err) throw err;
// Use the connection
connection.query('SELECT id FROM customer limit 10;', function (error, results, fields) {
// And done with the connection.
connection.release();
// Handle error after the release.
if (error) callback(error);
else callback(null,results);
});
});
};
这在我的本地上运行,但当我压缩此代码并将其作为lambda函数上传时,它将返回
Response:
{
"errorMessage": "2018-11-13T02:16:10.339Z 0562b432-e6ea-11e8-81ef-bd64aa1af0a4 Task timed out after 30.03 seconds"
}
无论我把它设置为多少秒,它都会超时。
由于我对所有这些都是新手,所以我几乎将所有内容都设置为默认值,但我已将AmazonRDSFullAccess添加到lambda函数的角色中。
有人知道我的设置中可能有什么错误或遗漏吗?
谢谢。
经过一些尝试和错误,我能够使其正常工作,但我缺少的是我不允许All TCP
进入我的RDS安全组的入站。之后,我将它设置为No VPC
的lambda函数,它就可以正确地进行查询了。
此链接:https://dzone.com/articles/querying-rds-mysql-db-with-nodejs-lambda-function其中发布的堆栈溢出链接(即:AWS Lambda RDS连接超时(帮助我找出了代码/设置的问题。
这是我最终使用的最后一个代码。
const mysql = require('mysql');
const pool = mysql.createPool({
host: "foo-bar-123.us-east-2.rds.amazonaws.com",
user: "root",
password: "pass123",
database: "sample_db"
});
exports.handler = (event, context, callback) => {
//prevent timeout from waiting event loop
context.callbackWaitsForEmptyEventLoop = false;
pool.getConnection((err, connection) => {
if(err) throw err;
// Use the connection
connection.query('SELECT id FROM customer limit 10;', (error, results, fields) => {
// And done with the connection.
connection.release();
// Handle error after the release.
if (error) callback(error);
else callback(null,results);
});
});
};
谢谢!