amazon-web-services - aws lambda 和 Rds 中的握手不活动超时错误
问题描述
var mysql = require('mysql');
var config = require('./config.json');
var pool = mysql.createPool({
host : config.dbhost,
user : config.dbuser,
password : config.dbpassword,
database : config.dbname
});
module.exports.handler = (event, context, callback) => {
//prevent timeout from waiting event loop
context.callbackWaitsForEmptyEventLoop = false;
pool.getConnection(function(err, connection) {
// Use the connection
if(err){
return callback(err,null);
}
connection.query("Select * from allBlogs", function (error, results, fields) {
connection.release();
// Handle error after the release.
console.log(results);
var len = results.length;
var i = 0;
for(i ; i < len; i++) {
var tagArray = results[i].tag.split(",");
results[i].tag = tagArray;
tagArray = [];
};
if (error) {callback( {statusCode: 400, headers: { "Access-Control-Allow-Origin": "*" }, body: JSON.stringify(error)} ,null)}
else {
callback(null, { statusCode: 200, headers: { "Access-Control-Allow-Origin": "*" }, body: JSON.stringify(results) });
}
});
});
};
我正在使用 Aws lambda、API 网关和 RDS 数据库,但我面临握手不活动错误。下面是我用 node.js 编写的代码
解决方案
由于 lambda 在 VPC 中,它在尝试连接到 RDS 时超时的一个可能原因是因为 VPC 中的 lambda 函数没有互联网访问权限,也没有公共 ip。来自文档:
将函数连接到公共子网不会为其提供 Internet 访问权限或公共 IP 地址。
由于该问题未提供 VPC 详细信息或 RDS 设置的详细信息,因此应该指出,如果您的 RDS 不在 VPC 中,您的 lambda 将无法连接到没有NAT 网关的公共 RDS 。
另一方面,如果 RDS 在不同的 VPC 中,则 可以在两个 VPC 之间建立对等连接,以启用您的 lambda 函数和 RDS 之间的交互。
推荐阅读
- asp-classic - CDO.Message 收件人和收件人字段更改为“友好名称”和电子邮件地址
- javascript - 如何将来自 DOM 的用户输入存储在 Javascript 变量中?
- python - 如何识别和去除乱码?
- coffeescript - Atom 编辑器中特定关键字的语法高亮显示
- node.js - nodejs mssql 连接 ETIMEDOUT
- google-sheets - Sumif 在可变日期之间具有多个条件
- assembly - 将指向 Rust 数组的指针传递到 x86-64 Asm -- 指针减一
- c - 错误:类型冲突,错误:形式参数 2 的类型不完整
- javascript - Javascript Onclick 滚动和高亮示例
- android - 一起使用 ARCore 和 Vision SDK Android