如何使用node.js lambda函数与rds mysql示例交互?

b91juud3  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(412)

我试图通过amazonlambda访问amazonrds上的mysql数据库。我有.js文件可以在windows上通过cmd行运行,但是当我传输到lambda时,我无法连接到数据库。我彻底研究了这个问题,甚至在遵循了这个指南:redstapler aws之后,我收到了一条“processexited before completing request”错误消息。
我的代码,复制自上述教程

var mysql = require('mysql');

var pool = mysql.createPool({
host: "",
user: "",
password: "",
database: ""
});
exports.handler = (event,context,callback) => {
context.callbackWaitFOrEmptyEventLoop = false;
    pool.getConnection(function(err,connection){
    if (err) throw err;
    connection.query("SELECT * FROM testdata limit 10", 
        function(error,result,fields){
        connection.release();
        if (error) callback(error)
        else callback(null,result)   
        });
    });
};

收到来自amazon lambda的错误消息
响应:{“errormessage”:“requestid:b511db1-6db8-11e8-8004-1b9e8072561c完成请求前进程已退出”}请求id:“b511db1-6db8-11e8-8004-1b9e8072561c”函数日志:启动requestid:b511db1-6db8-11e8-8004-1b9e8072561c版本:$最新2018-06-11t20:48:01.478z b511db1-6db8-11e8-8004-1b9e8072561c错误:握手不活动握手超时(/var/task/node\u modules/mysql/lib/protocol/protocol.js:164:17)at emitnone(events.js:86:13)at handshake.emit(events.js:185:7)at handshake.\u ontimeout(/var/task/node\u modules/mysql/lib/protocol/sequences/sequence.js:129:8)at ontimeout(timers.js:386:14)at tryontimeout(timers.js:250:5)at timer.listontimeout(timers.js:214:5)

zaqlnxep

zaqlnxep1#

检查rds示例安全组是否允许从lambda ip地址范围进行访问(https://docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html)或者将lambda放在可以访问rds示例的vpc中。默认情况下lambda不在vpc中。。。

13z8s7eq

13z8s7eq2#

类似问题:更新:aws lambda无法连接到mysql
输入控制台日志语句以了解是否能够连接到rds。

...
connection.release();
console.log(result);
if (error) callback(error)
...

请确保在调用回调函数之前调用pool.end(),否则lambda函数执行将无法正确退出,因此会出现超时错误。

csga3l58

csga3l583#

在protocol.handshake(/var/task/node\u modules/mysql/lib/protocol/protocol.js:145:48)在poolconnection.connect(/var/task/node\u modules/mysql/lib/protocol/protocol.js:52:23)在pool.getconnection(/var/task/node\u modules/mysql/lib/pool.js:48:16)在exports.handler(/var/task/main.js:11:6)结束请求ID:B511DB1-6db8-11e8-8004-1b9e8072561c报告请求ID:B511DB1-6db8-11e8-8004-1b9e8072561c持续时间:10074.63毫秒计费持续时间:10100毫秒内存大小:1280 mb最大使用内存:27 mb
requestid:B511DB1-6db8-11e8-8004-1b9e8072561c进程在完成请求之前退出
这本教程的评价很高,似乎声誉良好,但我无法复制它的成功。这个错误似乎暗示connection.release位于错误的位置,或者我需要另一种方法来结束连接并将其返回到池中。

相关问题