Javascript 将aws lambda连接到rds的已断开响应
我正在尝试将lambda函数连接到rds,以便在Amazon Lex上查询它,但我似乎无法连接到rds。vpc和安全组部分已经解决,因为它们只处理一个简单的功能。下面是我的代码示例${connection.status}正在返回断开连接。如果我能得到任何帮助,我将不胜感激。谢谢 为了清楚起见,我实际上在顶部定义了一个分派函数。导出处理程序在下面进行。编辑代码以使其非常清晰Javascript 将aws lambda连接到rds的已断开响应,javascript,amazon-web-services,aws-lambda,amazon-rds,amazon-lex,Javascript,Amazon Web Services,Aws Lambda,Amazon Rds,Amazon Lex,我正在尝试将lambda函数连接到rds,以便在Amazon Lex上查询它,但我似乎无法连接到rds。vpc和安全组部分已经解决,因为它们只处理一个简单的功能。下面是我的代码示例${connection.status}正在返回断开连接。如果我能得到任何帮助,我将不胜感激。谢谢 为了清楚起见,我实际上在顶部定义了一个分派函数。导出处理程序在下面进行。编辑代码以使其非常清晰 function dispatch(intentRequest, callback) { const session
function dispatch(intentRequest, callback) {
const sessionAttributes = intentRequest.sessionAttributes;
const slots = intentRequest.currentIntent.slots;
const mysql = require('mysql');
var connection = mysql.createConnection({
host: 'xxx',
user: 'admin',
password: 'xxx',
database: 'xxx',
port: 3306
});
exports.handler = (event, context) => {
connection.connect(function (err) {
if (err) {
context.fail();
} else {
context.succeed('Success');
}
});
};
callback(close(sessionAttributes, 'Fulfilled', {
'contentType': 'PlainText',
'content': `Thank you ${connection.state}`
}));
}
// Route the incoming request based on intent.
// The JSON body of the request is provided in the event slot.
exports.handler = (event, context, callback) => {
try {
dispatch(event, (response) => {
callback(null, response);
});
} catch (err) {
callback(err);
}
};
由于RDS连接的初始化是异步的,因此需要在
connection.connect的回调中移动逻辑
const mysql = require('mysql');
var connection = mysql.createConnection({
host: 'xxx',
user: 'admin',
password: 'xxx',
database: 'xxx',
port: 3306
});
exports.handler = (event, context, callback) => {
connection.connect(function (err) {
if (err) {
callback(err);
} else {
callback(null, close(sessionAttributes, 'Fulfilled', {
'contentType': 'PlainText',
'content': `Thank you ${connection.state}`
}));
}
});
};
编辑:
请记住回调
中参数的顺序。第一个参数应该是错误,第二个参数是响应。由于RDS连接的初始化是异步的,您需要在连接的回调中移动逻辑。connect
const mysql = require('mysql');
var connection = mysql.createConnection({
host: 'xxx',
user: 'admin',
password: 'xxx',
database: 'xxx',
port: 3306
});
exports.handler = (event, context, callback) => {
connection.connect(function (err) {
if (err) {
callback(err);
} else {
callback(null, close(sessionAttributes, 'Fulfilled', {
'contentType': 'PlainText',
'content': `Thank you ${connection.state}`
}));
}
});
};
编辑:
请记住回调
中参数的顺序。第一个参数应该是错误,第二个参数是响应。我认为在连接中使用回调可能会发生一些异步处理。connect
函数它可能在连接之前命中Lambdas回调
函数。connect
函数触发
此外,将回调保留在exports.handler
中
尝试将您的函数更新到以下位置
const mysql = require("mysql");
var connection = mysql.createConnection({
host : 'xxx',
user : 'admin',
password : 'xxx',
database : 'xxx',
port : 3306
});
exports.handler = async (event, context) => {
await connection.connect(function(err) {
if (err) context.fail();
else context.succeed('Success');
});
callback(close(sessionAttributes, 'Fulfilled',
{'contentType': 'PlainText', 'content': `Thank you ${connection.state}`}));
};
我相信在连接中使用回调可能会发生一些异步处理。connect
函数可能会在连接触发之前命中Lambdas回调
函数。connect
函数
此外,将回调保留在exports.handler
中
尝试将您的函数更新到以下位置
const mysql = require("mysql");
var connection = mysql.createConnection({
host : 'xxx',
user : 'admin',
password : 'xxx',
database : 'xxx',
port : 3306
});
exports.handler = async (event, context) => {
await connection.connect(function(err) {
if (err) context.fail();
else context.succeed('Success');
});
callback(close(sessionAttributes, 'Fulfilled',
{'contentType': 'PlainText', 'content': `Thank you ${connection.state}`}));
};
请将exports.handler
声明为async
,否则将导致错误。您好,感谢您的回复。我尝试将异步函数添加到其中以匹配等待函数,但它从lambda生成了空响应。我的代码如下:exports.handler=async(event,context)=>{await connection.connect(函数(err){if(err)context.fail();else context.Success('Success');});callback(close(sessionAttributes,'impleted',{'contentType':'PlainText','content':'Thank you${connection.state});}代码>有趣,如果你在回调中为你的连接添加了任何注释。connect是否会在CloudWatch日志中打印它们?嘿,Chris,谢谢你的回复。我对上面的原始代码做了一些小的修改。你能看看这是否是个问题吗。非常感谢。请将exports.handler
声明为async
,否则将导致错误。您好,感谢您的回复。我尝试将异步函数添加到其中以匹配等待函数,但它从lambda生成了空响应。我的代码如下:exports.handler=async(event,context)=>{await connection.connect(函数(err){if(err)context.fail();else context.Success('Success');});callback(close(sessionAttributes,'impleted',{'contentType':'PlainText','content':'Thank you${connection.state});}代码>有趣,如果你在回调中为你的连接添加了任何注释。connect是否会在CloudWatch日志中打印它们?嘿,Chris,谢谢你的回复。我对上面的原始代码做了一些小的修改。你能看看这是否是个问题吗。非常感谢。错误消息显示存在未处理的错误响应。感谢您的响应。这表明它收到了来自lambda的空响应。你好@MaiKaY谢谢你的回复。我编辑了上面的代码以使其更清晰。我实际上定义了一个分派函数。你能看看这是否是一个潜在的问题吗?非常感谢。错误消息显示存在未处理的错误响应。感谢您的响应。这表明它收到了来自lambda的空响应。你好@MaiKaY谢谢你的回复。我编辑了上面的代码以使其更清晰。我实际上定义了一个分派函数。你能看看这是否是一个潜在的问题吗?非常感谢。