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

Mar*_*naW 1 amazon-rds amazon-vpc aws-lambda

我在新创建的 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)并添加了 IP CIDR RDS 实例的安全组(称为 rds-launch-wizard)。

尽管如此,Lambda 函数仍能够与公共互联网交互,但无法连接到 RDS 实例(超时)。我的想法不多了,这里有什么问题?

Joh*_*ein 7

配置应该是:

  • 一个公共子网与NAT网关(和,顾名思义,Internet网关)
  • 一个私人子网与亚马逊RDS实例
  • 与 Lambda 函数关联的相同或不同的私有子网
  • 使用路由表配置的私有子网,其目的地为0.0.0.0/0NAT 网关

然后考虑安全组:

  • 一个为lambda函数安全组Lambda-SG),它允许所有出站访问
  • 对RDS实例安全组RDS-SG)应该从允许入站访问Lambda-SG相应的数据库端口

也就是说,RDS-SG允许来自Lambda-SG(按名称)的传入流量。有没有必要的安全组中使用CIDRs

Lambda 函数将通过弹性网络接口 (ENI) 连接到私有子网,并且能够与 RDS 实例(直接)和互联网(通过 NAT 网关)进行通信。

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

  • 约翰,如果你在教程中一步一步地写下来,我相信这会节省数百人几个小时的头痛。...删除了一个生产实例,试图对此进行排序。谢谢你的帮助❤️ (3认同)