我在新创建的VPC中设置了Aurora数据库(已提供),并且没有公共可访问性。因为我想在VPC中运行既可以访问RDS实例又可以访问Internet的Lambda函数,所以我将RDS实例的路由表更改为允许来自放置在公共子网中的NAT网关的流量在同一VPC中。
对于Lambda函数本身,我创建了一个单独的专用子网,也仅允许来自NAT网关的路由表中的流量。我将此子网和VPC分配给了Lambda设置中的Lambda函数。使用此配置,Internet连接可以正常工作,但是我无法访问数据库。这就是为什么我关注这篇文章(https://serverfault.com/questions/941886/connect-an-aws-lambda-function-triggered-by-api-gateway-to-aurora-serverless-mys)并将Lambda子网的IP CIDR添加到RDS实例的安全组(称为rds-launch-wizard)的原因。
仍然,Lambda函数能够与公共Internet交互,但是不能连接到RDS实例(超时)。我的想法不多了,这是怎么了?
答案 0 :(得分:1)
配置应为:
0.0.0.0/0
到NAT网关的专用子网然后考虑安全组:
Lambda-SG
),允许所有出站访问RDS-SG
),应允许在适当的数据库端口上从Lambda-SG
进行入站访问也就是说,RDS-SG
允许来自Lambda-SG
的传入流量(按名称)。 无需在安全组中使用CIDR 。
Lambda函数将通过弹性网络接口(ENI)连接到专用子网,并将能够与RDS实例(直接)以及与Internet(通过NAT网关)进行通信。
请注意,您不是在引导“来自NAT网关的流量”。而是将Internet绑定流量引导至 NAT网关。也没有“ RDS实例的路由表”之类的东西,因为路由表与子网关联,而不与RDS关联。