无法从 Lambda 连接到 RDS aurora(超时)

Can't connect to RDS aurora from Lambda (timeout)

这个问题已经被问过好几次了,过去几个小时我一直在阅读答案,所以我要在这里总结一下。 获取RDS和lambda的连接,正常的步骤是:

  1. 将 lambda 附加到与数据库相同的 VPC
  2. 为 lambda 创建安全组
  3. 为RDS修改/添加安全组,允许VPC的安全组作为inbound提供连接端口。
  4. 将策略 AWSLambdaVPCAccessExecutionRole 添加到 lambda 函数

应该是这样,但它对我不起作用。 我检查了其他可能的错误:

  1. 找不到数据库的 DNS。通过为 VPC 设置互联网网关解决,检查 DNS 是否正确解析
  2. lambda 函数的入站和出站规则。通过设置两个方向的所有流量来解决。
  3. 数据库安全组的出站规则设置为所有流量和目的地

注意:我可以使用另一个安全组通过 VPN 连接到数据库,这意味着这不是凭据错误。

我真的不明白我现在还缺少什么

终于找到了答案,错误是由于 RDS 位于具有互联网网关的 public 子网上。针对这种情况,解决方法如下:

  • 创建一个public NAT网关(附加到public子网,具有弹性ip)

  • 在同一 VPC 中创建一个(或多个)私有子网

  • 创建一个路由,“Destination”为“0.0.0.0”,“Target”为Internet Gateway,并保存设置。将此路由与 public 个子网相关联

  • 在此table中创建一条路由,“Destination”为“0.0.0.0”,“Target”为之前创建的NAT Gateway,并保存设置。将此路由与私有子网相关联

最后,仅将 lambda 连接到私有子网