具有RDS和Internet连接的VPC中的AWS Lambda

时间:2019-03-06 09:34:05

标签: aws-lambda amazon-rds amazon-vpc

我在新创建的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实例(超时)。我的想法不多了,这是怎么了?

1 个答案:

答案 0 :(得分:1)

配置应为:

  • 具有NAT网关(以及定义为Internet网关)的公共子网
  • 具有Amazon RDS实例的私有子网 与Lambda函数关联的
  • 相同或不同的私有子网
  • 配置有路由表且目标为0.0.0.0/0到NAT网关的专用子网

然后考虑安全组:

  • 用于Lambda功能的安全组Lambda-SG),允许所有出站访问
  • 用于RDS实例的安全组RDS-SG),应允许在适当的数据库端口上从Lambda-SG进行入站访问

也就是说,RDS-SG允许来自Lambda-SG的传入流量(按名称)。 无需在安全组中使用CIDR

Lambda函数将通过弹性网络接口(ENI)连接到专用子网,并将能够与RDS实例(直接)以及与Internet(通过NAT网关)进行通信。

请注意,您不是在引导“来自NAT网关的流量”。而是将Internet绑定流量引导至 NAT网关。也没有“ RDS实例的路由表”之类的东西,因为路由表与子网关联,而不与RDS关联。