【问题标题】:Node js AWS Lambda using mysql connecting to RDS - Error: Handshake inactivity timeoutNode js AWS Lambda使用mysql连接到RDS - 错误:握手不活动超时
【发布时间】:2021-10-11 17:18:38
【问题描述】:

我有一个使用 mysql 运行节点应用程序的 AWS Lambda 函数,该函数始终无法连接到 RDS 实例并出现以下错误:Error: Handshake inactivity timeout

应该无关紧要的小细节:该应用程序是使用 TypeORM 的 Nest 应用程序。但是,我还在应用程序启动中包含了一个测试函数,它直接使用mysql 包执行原始连接和查询,当在我的本地计算机上运行应用程序时连接到实例时确实成功。我仔细检查了 Lambda 函数中的环境变量是否设置正确。

我多次确保我具有以下安全组规则(包含 RDS 实例的安全组上的入站和包含 Lambda 函数的安全组上的出站)以及正确的源/目标:

  • 正确的源/目标安全组(Lambda 的 sg 中的 RDS sg,RDS sg 中的 Lambda 的 sg)
  • 我的 VPC 的 CIDR(一切都在同一个 VPC 下)
  • RDS 和 Lambda 函数使用的每个子网的 CIDR(每个 CIDR 一个规则)(我什至将 Lambda 函数放在与 RDS 实例相同的子网中)

我已经根据上述规则尝试了所有流量和仅 TPC 的端口 3306。

我已经用尽谷歌来找到上述规则来尝试并对此束手无策。我在几个答案中发现源/目标安全组的规则应该可以解决问题,但我尝试了其他规则只是为了看看它们是否有效。有人有其他建议可以尝试吗?

【问题讨论】:

    标签: mysql amazon-web-services aws-lambda amazon-rds


    【解决方案1】:

    难以置信。原因实际上是有关导致应用程序崩溃的丢失包的 Nest 错误。我刚刚在 CloudWatch 中看到了数据库错误,并假设应用程序正在正确引导,但数据库连接正在崩溃。我猜连接炸弹是因为应用程序炸弹。我觉得奇怪的是,在应用程序崩溃后连接尝试仍在继续......

    无论如何,解决方案是将丢失的包添加到serverless.yml 中的forceInclude 列表中。因此,对于遇到此问题并且您已经检查了环境变量和安全组规则以及所有这些的其他人,请检查日志中是否存在可能导致应用程序崩溃的其他问题。

    【讨论】:

      猜你喜欢
      • 2016-08-18
      • 1970-01-01
      • 2019-03-16
      • 2017-10-05
      • 2020-04-11
      • 1970-01-01
      • 2021-04-19
      • 2017-07-25
      • 1970-01-01
      相关资源
      最近更新 更多