我在新创建的VPC中设置了Aurora数据库(已配置),并且没有公共可访问性。由于我想在VPC中运行Lambda函数,同时能够访问RDS实例以及Internet,我更改了RDS实例的路由表,以允许来自我放置在公有子网中的NAT网关的流量在同一个VPC中。
对于Lambda函数本身,我创建了一个单独的私有子网,也只允许来自路由表中NAT网关的流量。我将此子网和VPC分配给Lambda设置中的Lambda函数。互联网连接适用于此配置,但我无法访问数据库。这就是我遵循这篇文章(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.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相关联。