当前位置: 首页 > 知识库问答 >
问题:

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

宫高义
2023-03-14

我正试图通过Amazon Lambda访问托管在Amazon RDS上的MySQL数据库。我有. js文件,我可以通过windows上的cmd行运行,但是当我传输到Lambda时,我无法连接到数据库。我彻底研究了这个问题,甚至在遵循本指南之后:红钉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收到的错误消息

响应:{“errorMessage”:“RequestId:b5151db1-6db8-11e8-8004-1b9e8072561c进程在完成请求之前已退出”}请求ID:“b5151db1-6db8-11e8-8004-b9e80 72561C”功能日志:START RequestId:b5151db2-6db8-11e8-8004-1b 9e80 72 561c版本:$LATEST 2018-06-11T20:48:01.478Z b51db1-6 db8-11e 8-8004-1e9 e80 72 56 1c错误:握手时握手不活动超时例如。(/var/task/node_modules/mysql/lib/protocol/protocol.js:164:17)在握手时emitNone(events.js:86:13)。握手时发出(events.js:185:7)_onTimeout(timers.js:386:14),tryOnTimeout(timers.js:250:5)。listOnTimeout(timers.js:214:5)---------------------在协议中_在协议处排队(/var/task/node_modules/mysql/lib/protocol/protocol.js:145:48)。PoolConnection的握手(/var/task/node_modules/mysql/lib/protocol/protocol.js:52:23)。连接(/var/task/node_modules/mysql/lib/Connection.js:130:18)。导出时的getConnection(/var/task/node_modules/mysql/lib/Pool.js:48:16)。handler(/var/task/main.js:11:6)END RequestId:b5151db1-6db8-11e8-8004-1b9e8072561c REPORT RequestId:b5151db2-6db8-11e 8-8004-1b 9e8072 561c持续时间:10074.63 ms计费持续时间:10100 ms内存大小:1280 MB最大使用内存:27 MB
RequestId:b5151db1-6db8-11e8-8004-b9e80 72561C进程在完成请求之前退出

本教程评分很高,看起来很有名气,但我无法复制它的成功。这个错误似乎暗示了连接。release位于错误的位置,或者我需要有另一种方法终止连接并将其返回池。

共有2个答案

万俟财
2023-03-14

类似问题:更新:AWS Lambda无法连接到MySQL

通过控制台日志语句了解您是否能够连接到RDS。

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

一定要打电话给游泳池。end(),然后调用回调函数,否则lambda函数的执行将无法正常退出,因此将出现超时错误。

廖夜洛
2023-03-14

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

 类似资料:
  • 我正在尝试使用用户池注册一个用户,并且已经使用并修改了lambda中示例中的代码。 我以正常方式引用AWS: 并尝试引用现有用户池: 但我得到了以下错误: TypeError: AWS. Cognito标识服务提供商。CognitoUserpool不是一个函数 我是否使用了错误的SDK?设置页面解释了aws cognito sdk是如何运行的。js是完整SDK的变体,但只引用Cognito标识服务

  • 问题内容: 嗨,我正在使用elasticsearchSpring数据。我项目的领域结构不断变化,因此我必须删除索引才能每次更改映射。为了克服这个问题,我使用了别名。我使用以下方法创建了别名: 我有一个测试课: TestRepository类: 我的问题是如何从别名而不是索引本身读取?是否对别名也进行写操作。我看过以下链接:https : //www.elastic.co/guide/en/elas

  • 本文向大家介绍python使用flask与js进行前后台交互的例子,包括了python使用flask与js进行前后台交互的例子的使用技巧和注意事项,需要的朋友参考一下 flask与js进行前后台交互代码如下,后台给前端发数据: python部分: js部分: 以上这篇python使用flask与js进行前后台交互的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程

  • 问题内容: 我对swig中的typemap和如何使用数组感到迷茫。我准备了一个使用swig在java和c之间使用数组的工作示例,但是我不知道这是否是正确的方法。 基本上,我想将字节数组从Java 传递给c作为“ signed char *” +它的大小,在c中对其进行修改并查看java中的更改,并在c中创建一个数组并在Java中使用它。 *在C中被修改为Java或其他的缓冲区?](http://c

  • 通过一个实例来说明如何在OpenQuant中进行实盘交易。 在OpenQuant 中打开SMACrossover策略项目,把Realtime工程设置成启动项。 打开场景文件(Scenario.cs),把使用的合约修改成国内上市交易的合约。 public override void Run() { Instrument instrument1=InstrumentManager.Instru

  • 介绍 如果我们为了与合约进行(测试)交互而向每次都向以太坊网络进行原始请求,我们很快就会意识到编写这些请求是笨重而繁琐的。 同样,我们可能会发现管理每个请求的状态是 复杂的。 幸运的是,Truffle为我们处理这种复杂性,使我们与合约的互动变得轻而易举。 数据的读和写 以太坊网络区分将数据写入网络和从网络读取数据,在编写应用程序我们需要关注这个区别。 通常,写入数据称为交易 transaction