AWS Lambda/Nodejs没有执行mysql-conconnection.query



我有一个简单的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。可能的解决方案:

  1. 在您的承诺中添加等待呼叫(即await connection.query(...).promise()(
  2. 将处理程序的签名更改为非异步(即exports.handler = (event,context,callback) => {...}(,然后它将等待回调
  3. (丑陋的解决方法(添加context.callbackWaitsForEmptyEventLoop = true;,它告诉AWS等待一个空的事件循环

披露:我为Lumigo工作,这是一家帮助您调试无服务器应用程序的公司。

最新更新