【发布时间】:2017-10-15 22:15:28
【问题描述】:
我正在尝试将 AWS Lambda 函数连接到 RDS 中的数据库,我关注了一些帖子,这些帖子建议它们都需要位于同一个 VPC 中,但亚马逊支持人员告诉我情况并非如此. 尽管我已经尝试了一个多子网 VPC,它带有 nat 网关和允许访问每个安全组的安全组,但没有占上风。
我可以毫无问题地与 SQL 管理工作室或 MySQL 工作台中的数据库实例交谈。
10:13:00 2017-05-16T10:13:00.509Z 回调 connection.connect() 10:13:00 2017-05-16T10:13:00.547Z 错误 ETIMEDOUT
我现在尝试了几种不同的连接方法,我使用了帖子中的示例,唯一的区别是这个数据库不在 RDS 中。
Querying a MySQL database from a NodeJS AWS Lambda Function
我尝试了 MSSQL 和 MSSQL 数据库实例,都遇到了连接超时。我已将所有相关政策附加到 lambda 函数中。
我在下面包含了一个简单的测试,只是为了尝试建立连接。
在下面添加了测试代码,而不是在 Alexa 调用的底部。
function mysqltest2() {
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'endpoint.rds.amazonaws.com',
user : 'user',
password : 'pass',
database : 'db'
});
var test;
console.log(`Intent Request`);
console.log('Then run MySQL code:');
connection.connect(function(err) {
console.log('Inside connection.connect() callback');
if (!err) {
console.log("Database is connected ... ");
connection.query("SELECT 1 + 1 AS solution",
function(err, result) {
console.log("Inside connection.query() callback")
if (!err) {
console.log(result);
console.log("Query Successful! Ending Connection.");
test = result;
connection.end();
} else {
console.log("Query error!");
}
});
} else {
console.log("Error connecting database ..." + err.message);
}
});
return test;
}
【问题讨论】:
-
他们没有必须在同一个 VPC 中,但这是最直接、最安全和最具成本效益的配置。无论如何,这并不难做到,所以一定有你忽略的东西或你正在做出的错误假设。因此,请告诉我们您想要如何操作,我们可以从那里进行故障排除。您也可以解释一下您与 AWS 支持人员交谈但没有有效解决方案的原因。
-
提供 lambda 函数以便我们为您提供帮助。
-
您的 lambda 的 vpc 子网的路由表是否有路由将 0.0.0.0/0 流量发送到 nat 网关?你能从你的 lambda 访问互联网吗?您可以尝试访问一个简单的网页来确认这一点。
-
@Michael-sqlbot 我确定这很简单,但有些东西我遗漏或不理解。 AWS 支持来自另一个帐户,涉及不同的问题。理想情况下,我需要 RDS 中的 MSSQL 数据库,我可以从 node.js Lambda 函数中查询该数据库,该函数也可以访问互联网。
-
@Binary101010 添加到主要问题中。
标签: mysql node.js amazon-web-services lambda amazon-rds