mysql - 如何使用 Node.js Lambda 函数与 RDS MySQL 实例交互?

标签 mysql node.js amazon-web-services aws-lambda

我正在尝试通过 amazon Lambda 访问托管在 amazon RDS 上的 MySQL 数据库。我有 .js 文件,可以在 Windows 上通过 cmd 行运行,但是当我传输到 Lambda 时,我无法连接到数据库。我彻底研究了这个问题,甚至在遵循本指南之后:Redstapler AWS ,我收到“进程在完成请求前退出”错误消息。

我的代码,复制自上面的教程

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 收到的错误消息

Response: { "errorMessage": "RequestId: b5151db1-6db8-11e8-8004-1b9e8072561c Process exited before completing request" } Request ID: "b5151db1-6db8-11e8-8004-1b9e8072561c" Function Logs: START RequestId: b5151db1-6db8-11e8-8004-1b9e8072561c Version: $LATEST 2018-06-11T20:48:01.478Z b5151db1-6db8-11e8-8004-1b9e8072561c Error: Handshake inactivity timeout at Handshake. (/var/task/node_modules/mysql/lib/protocol/Protocol.js:164:17) at emitNone (events.js:86:13) at Handshake.emit (events.js:185:7) at Handshake._onTimeout (/var/task/node_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) -------------------- at Protocol._enqueue (/var/task/node_modules/mysql/lib/protocol/Protocol.js:145:48) at Protocol.handshake (/var/task/node_modules/mysql/lib/protocol/Protocol.js:52:23) at PoolConnection.connect (/var/task/node_modules/mysql/lib/Connection.js:130:18) at Pool.getConnection (/var/task/node_modules/mysql/lib/Pool.js:48:16) at exports.handler (/var/task/main.js:11:6) END RequestId: b5151db1-6db8-11e8-8004-1b9e8072561c REPORT RequestId: b5151db1-6db8-11e8-8004-1b9e8072561c Duration: 10074.63 ms Billed Duration: 10100 ms Memory Size: 1280 MB Max Memory Used: 27 MB
RequestId: b5151db1-6db8-11e8-8004-1b9e8072561c Process exited before completing request

本教程评价很高,似乎很有名,但我无法复制它的成功。该错误似乎暗示 connection.release 位于错误的位置,或者我需要有另一种方式来结束连接并将其返回到池中。

最佳答案

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

关于mysql - 如何使用 Node.js Lambda 函数与 RDS MySQL 实例交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50806322/

相关文章:

web-applications - Node.js 是否准备好用于业务关键型应用程序?

mysql - 存储播放列表中视频的顺序

mysql - MySQL 中的行版本控制

android - onListitemClick 从数据库获取列值

javascript - 如何将两个值或参数从两个下拉列表传递给ajax?

node.js - 小猫不会说话

node.js - 关于 Mongoose 填充关系一个字符串字段

amazon-web-services - AWS Cloudformation:Fn::GetAtt 转换为 Fn::ImportValue

amazon-web-services - gocql.createSession : Consistency level ANY is not supported for this operation

git - AWS CodeDeploy : Using multiple git repositories, 或 git 存储库中的子模块?