【问题标题】:AWS Lambda postgres connection timing out, but only on first attemptAWS Lambda postgres 连接超时,但仅在第一次尝试时
【发布时间】:2016-07-11 09:27:16
【问题描述】:

我正在使用 Lambda 连接到属于 VPC 的 Postgres RDS 实例。如果有一段时间没有调用 Lambda 函数,执行大约 2 分钟后会报如下错误:

could not connect to postgres { [Error: connect ETIMEDOUT] code: 'ETIMEDOUT', errno: 'ETIMEDOUT', syscall: 'connect' }

当 lambda 函数重试时,它成功连接到数据库并按预期执行。

Lambda 函数是使用 node-postgres 包为 node.js 编写的。连接程序如下所示:

var client = new pg.Client(conString);
client.connect(function(err) {
    console.log("client connected");
    if(err) {
         context.fail('Connection failed');  
    }
    else { //do stuff }
}

日志显示它在超时之前从未到达“客户端已连接”。在这些第一次尝试中出了什么问题?

注意:如果 lambda 函数在 20-30 分钟内再次调用,则不会发生此超时并且函数执行成功。

【问题讨论】:

  • 我猜它正在尝试重用与数据库的旧连接,但连接已超时。在退出 Lambda 函数之前,您是否致电 client.end()
  • 另外,当我使用具有 VPC 访问权限的 Lambda 函数时,我一直在阅读有关 ENI 创建时间的一些问题,这些函数并不经常被调用。如果可以的话,您可能必须增加数据库连接超时时间,以考虑到每当 Amazon 启动您的 Lambda 函数的新实例时获得网络连接所需的额外时间。
  • client.end() 正在被调用,因此没有任何连接处于打开状态。 ENI 创建时间听起来像是一个很好的理论,因为随后的调用或重试没有相同的问题。我将考虑增加数据库超时并将 lambda 函数也设置为最大超时。
  • 我遇到了与 Toast 相同的问题,我尝试了 @MarkB 的建议,增加了数据库的超时时间,但似乎没有帮助。

标签: javascript node.js postgresql amazon-web-services lambda


【解决方案1】:

这个问题也发生在我身上,几分钟后我第一次尝试调用 lambda 函数时没有使用 lambda,我得到了

{"errorMessage":"连接 ETIMEDOUT","errorType":"SequelizeConnectionError","stackTrace":["Handshake._callback (/var/task/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:94:20)","Handshake.Sequence.end (/var/task/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24)","Protocol.handleNetworkError (/var/task/node_modules/mysql/lib/protocol/Protocol.js:364:14)","Connection._handleNetworkError (/var/task/node_modules/mysql/lib/Connection.js:421:18)","Connection._handleConnectTimeout (/var/task/node_modules/mysql/lib/Connection.js:417:8)","Socket.g (events.js:260:16)","emitNone (events.js:67:13)","Socket.emit (events.js:166:7)","Socket._onTimeout (net.js:318:8)","_runOnTimeout (timers.js:524:11)","_makeTimerTimeout (timers.js:515:3)","Timer.unrefTimeout (timers.js:584:5)"]}

重试 2-3 次后,它可以工作

【讨论】:

  • 这并不能真正帮助回答问题。
猜你喜欢
  • 1970-01-01
  • 2020-03-03
  • 2015-02-11
  • 2022-07-08
  • 2017-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
相关资源
最近更新 更多