我有一个简单的Lambda函数来连接到MYSQL,但connection.query
没有执行。Lambda具有AWSLambdaVPCAccessExecutionRole
访问权限,是部署RDS的同一VPC的一部分。
RDS安全组添加到Lambda的配置中。log1是我一直得到的输出。有一次我得到了Log2。我不知道发生了什么事。
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'xxxxxxxx.us-east-1.rds.amazonaws.com',
user : 'admin',
password : 'pass',
database : 'dbname'
});
console.log('CONNECTION ' + connection);
connection.connect();
console.log('2 ');
exports.handler = async (event,context,callback) => {
console.log('3 ');
context.callbackWaitsForEmptyEventLoop = false;
connection.query('SELECT emp_num from tag where emp_id=1', function (error, results, fields) {
console.log('2 ');
if (error) throw error;
else
callback(null, results)
//console.log('The solution is: ', results[0].tag_num);
});
connection.end();
};
Log1
START RequestId:04c2d758-ac40-474f-ac55-045ccea8a9ff版本:$LATEST2020-11-08T02:02:58.976Z 04c2d758-ac40-474f-ac55-045ccea8a9ff信息3结束请求ID:04c2d758-ac40-474f-ac55-045ccea8a9ff报告请求ID:04c2d758-ac40-474f-ac55-045ccea8a9ff持续时间:5.75毫秒计费持续时间:100毫秒内存大小:128 MB最大使用内存:20 MB
Log2
START RequestId:abeb6a6d-780-4acc-91e2-5971e6fe74fe版本:$最新2020-11-08T02:02:43.293Z abeb6a6d-780-4acc-91e2-5971e6fe74fe信息32020-11-08T02:02:43.294Z abeb6a6d-780-4acc-91e2-5971e6fe74fe信息22020-11-08T02:02:43.294Z abeb6a6d-780-4acc-91e2-5971e6fe74fe错误未捕获异常{"errorType":"Error","errorMessage":"无法将查询排入队列"调用之后退出&"代码":"PROTOCOL_ENQUEUE_AFTER_QUIT"致命":false;堆叠":[quot;错误:调用quit后无法将查询排入队列&"在协议_validateEnqueue(/var/task/nod_modules/mysql/lib/protocol/protocol.js:215:16(">
协议_排队(/var/task/nod_modules/mysql/lib/protocol/protocol.js:138:13(">
在Connection.query(/var/task/nod_modules/mysql/lib/Connection.js:198:25("在Runtime.exports.handler(/var/task/index.js:18:16("在Runtime.handleOnce(/var/Runtime/Runtime.js:66:25("]}[错误][1608800963301]LAMBDA_RUNTIME无法发布处理程序成功回答Http响应代码:403。结束请求ID:abeb6a6d-780-4acc-91e2-5971e6fe74fe报告请求Id:abeb6a6d-780-4acc-91e2-5971e6fe74fe持续时间:29.47毫秒计费持续时间:100毫秒内存大小:128 MB使用的最大内存:20 MB
请求ID:abeb6a6d-780-4acc-91e2-5971e6fe74fe错误:运行时已退出带错误:退出状态129运行时间.ExitError
您的句柄被定义为async
,而您没有将await
定义为promise。可能的解决方案:
- 在您的承诺中添加等待呼叫(即
await connection.query(...).promise()
( - 将处理程序的签名更改为非异步(即
exports.handler = (event,context,callback) => {...}
(,然后它将等待回调 - (丑陋的解决方法(添加
context.callbackWaitsForEmptyEventLoop = true;
,它告诉AWS等待一个空的事件循环
披露:我为Lumigo工作,这是一家帮助您调试无服务器应用程序的公司。