无法从 Lambda 连接到 RDS aurora(超时)
Can't connect to RDS aurora from Lambda (timeout)
这个问题已经被问过好几次了,过去几个小时我一直在阅读答案,所以我要在这里总结一下。
获取RDS和lambda的连接,正常的步骤是:
- 将 lambda 附加到与数据库相同的 VPC
- 为 lambda 创建安全组
- 为RDS修改/添加安全组,允许VPC的安全组作为inbound提供连接端口。
- 将策略
AWSLambdaVPCAccessExecutionRole
添加到 lambda 函数
应该是这样,但它对我不起作用。
我检查了其他可能的错误:
- 找不到数据库的 DNS。通过为 VPC 设置互联网网关解决,检查 DNS 是否正确解析
- lambda 函数的入站和出站规则。通过设置两个方向的所有流量来解决。
- 数据库安全组的出站规则设置为所有流量和目的地
注意:我可以使用另一个安全组通过 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 连接到私有子网
这个问题已经被问过好几次了,过去几个小时我一直在阅读答案,所以我要在这里总结一下。 获取RDS和lambda的连接,正常的步骤是:
- 将 lambda 附加到与数据库相同的 VPC
- 为 lambda 创建安全组
- 为RDS修改/添加安全组,允许VPC的安全组作为inbound提供连接端口。
- 将策略
AWSLambdaVPCAccessExecutionRole
添加到 lambda 函数
应该是这样,但它对我不起作用。 我检查了其他可能的错误:
- 找不到数据库的 DNS。通过为 VPC 设置互联网网关解决,检查 DNS 是否正确解析
- lambda 函数的入站和出站规则。通过设置两个方向的所有流量来解决。
- 数据库安全组的出站规则设置为所有流量和目的地
注意:我可以使用另一个安全组通过 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 连接到私有子网