我正在尝试将AWS Lambda函数连接到RDS中的数据库,我跟踪了一些帖子,这些帖子表明他们都需要在同一个VPC中,但是亚马逊支持已经告诉他们情况并非如此。 虽然我已经尝试了一个带有nat网关和安全组的多子网VPC,允许访问每个,但没有优势。
我可以毫无问题地与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;
}
答案 0 :(得分:0)
有两个问题。
1 VPC设置
VPC设置,阅读@ Michael - sqlbot关于VPC的帖子帮了很多。
在VPC中使用lambda时,需要考虑以下因素。
子网需要有备用地址空间,以允许lambda创建弹性网络接口。
源Amazon Web服务支持
<强> 2。 Node.js回调
第二个基本上是node.js中的回调地狱
当从Alexa意图调用该函数时,它在回调被触发之前执行了content.success。这导致下次执行代码时由于它仍忙于执行上一个命令而导致超时。我通过使所有回调嵌套并在回调中生成SpeechletResponse来解决这个问题。