在AWS上的Lambda中重用Mysql连接

Lajtovo

我有很多lambda调用,而且我总是在查询数据库,所以我希望我的lambda能够重用connection,所以我要在构造函数中建立连接,如下所示:

let mysqlConnection = mysql.createConnection({
  host: process.env.HOST,
  user: process.env.DB_USER,
  password: process.env.BDB_PWD,
  port: process.env.DB_PORT,
  database: process.env.DB_NAME
});

dbConn.connect(function(err) {
  if (err) {
    throw new Error('Error during connecting to db');
  } else {
    console.log("Database is connected");
  }
});

在处理程序中将callbackWaitsForEmptyEventLoop设置为false:

exports.handler = (event, context) => {
  context.callbackWaitsForEmptyEventLoop = false;
  event.Records.forEach(record => {
   processEvent(JSON.parse(record.body), context);
  });
 };

当mysql连接失败时,我正在销毁mysql连接,我在verifysEvent函数中的查询如下所示:

  mysqlConnection.query(sql, values, function (err, rows) {
    if (err) {
      mysqlConnection.destroy();
      context.fail();
    } 
  }

但是我不时收到一个lambda错误。我猜有时候lambda想要重用不可用的连接。

 "Error: Error during connecting to db",
    "    at Handshake.<anonymous> (/var/task/lambda.js:34:13)",
    "    at Handshake.<anonymous> (/var/task/node_modules/mysql/lib/Connection.js:525:10)",
    "    at Handshake._callback (/var/task/node_modules/mysql/lib/Connection.js:491:16)",
    "    at Handshake.Sequence.end (/var/task/node_modules/mysql/lib/protocol/sequences/Sequence.js:83:24)",
    "    at Protocol.handleNetworkError (/var/task/node_modules/mysql/lib/protocol/Protocol.js:369:14)",
    "    at Connection._handleNetworkError (/var/task/node_modules/mysql/lib/Connection.js:421:18)",
    "    at Connection._handleConnectTimeout (/var/task/node_modules/mysql/lib/Connection.js:417:8)",
    "    at Object.onceWrapper (events.js:286:20)",
    "    at Socket.emit (events.js:198:13)",
    "    at Socket.EventEmitter.emit (domain.js:448:20)"

我有什么办法可以防止这种情况发生?还是应该销毁连接并再次连接?

莱克斯法拉第

我发现这个有用的工具可以为您提供帮助,https://github.com/jeremydaly/serverless-mysql仅需要安装一个npm模块并对其进行配置。还要检查#connection-backoff部分。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

跨多个AWS Lambda调用重用数据库连接

来自分类Dev

AWS Lambda Java,连接到MySQL RDS

来自分类Dev

如何重用AWS Lambda函数?

来自分类Dev

ReactJS - NodeJS - 在 AWS Lambda 上连接到 Graphql 的问题

来自分类Dev

在PHP中卷曲连接重用

来自分类Dev

如何重用ActiveRecord中的连接?

来自分类Dev

不可能从 AWS Lambda 连接到 RDS MySQL

来自分类Dev

如何在AWS Lambda中抽象数据库连接?

来自分类Dev

AWS Lambda - 无法连接到 VPC 中的 SQL Server RDS

来自分类Dev

AWS Lambda 中的 Oracle 数据库连接

来自分类Dev

无法连接到AWS RDS上的mysql(错误2003)

来自分类Dev

无法连接到在AWS上运行的MySQL数据库

来自分类Dev

无法连接到在AWS上运行的MySQL数据库

来自分类Dev

AWS Lambda连接到Internet

来自分类Dev

AWS Lambda 函数无法连接?

来自分类Dev

如何在Promise中重用mongo连接

来自分类Dev

重用C#中的连接文件

来自分类Dev

在Ruby脚本中重用mongodb连接

来自分类Dev

在单个方法中重用连接对象

来自分类Dev

在 Azure Functions 中重用 MongoDB 连接

来自分类Dev

AWS Lambda上NodeJS EventEmitter中的异步功能

来自分类Dev

无法从 AWS Lambda 连接到默认 VPC 中的 AWS RDS 实例

来自分类Dev

AWS Lambda上的节点功能无法使用node-pg连接到数据库

来自分类Dev

AWS Lambda上的Quickbooks API应用:OAuth仅连接一次

来自分类Dev

是否可以在连接到 API 网关的 Lambda 上使用 AWS KPL

来自分类Dev

与在AWS EC2上运行的MySQL的连接时出现连接问题

来自分类Dev

从php中的spefic ip连接AWS RDS(mysql):超时错误

来自分类Dev

AWS Lambda 上的 Python 函数

来自分类Dev

AWS Lambda中的重试