【问题标题】:AWS Lambda in VPC with RDS and Internet Connection带有 RDS 和 Internet 连接的 VPC 中的 AWS Lambda
【发布时间】:2019-07-27 22:04:21
【问题描述】:

我在新创建的 VPC 中设置了一个 Aurora 数据库(已配置),并且没有公共可访问性。由于我想在 VPC 中运行一个能够同时访问 RDS 实例和 Internet 的 Lambda 函数,我将 RDS 实例的路由表更改为允许来自我放置在公共子网中的 NAT 网关的流量在同一个 VPC 中。

对于 Lambda 函数本身,我创建了一个单独的私有子网,也只允许来自路由表中 NAT 网关的流量。我在 Lambda 设置中将此子网和 VPC 分配给 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 函数能够与公共互联网交互,但无法连接到 RDS 实例(超时)。我的想法不多了,这里有什么问题?

【问题讨论】:

  • 我看不出这如何解决我的问题。为什么将 lambda 函数放入两个子网(私有和公共)中,而不是像我上面的链接中描述的那样创建单独的私有子网?如何在您的示例中限制数据库访问(私有子网访问)?
  • 有两个独立的子网:一个公共子网和一个私有子网。公共负责通过 Internet 网关访问 Internet,私有负责通过 NAT 网关访问 VPC
  • 我将 Lambda 放在两者上,因为它需要访问 Internet 和您的 RDS 实例(这也是您的问题)。公共子网将请求路由到其他 AWS 服务/互联网,私有子网将请求路由到 VPC(如 RDS、ElasticSearch 等)
  • 感谢 ThalesMinussi 的快速回复。请查看aws.amazon.com/premiumsupport/knowledge-center/… - 当您按照说明(包括 Lambda 函数只能与私有子网关联)时如何配置您的 VPC?
  • @ThalesMinussi 公共子网中的 Lambda 函数无法与 Internet 通信。它没有收到公共 IP 地址。

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


【解决方案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 实例(直接)和互联网(通过 NAT 网关)进行通信。

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

【讨论】:

  • 谢谢约翰,我已经假设我对安全组有误解。连接现在完美运行 - 不过,将进一步提高我的知识以赶上你:)
  • 约翰,如果你在教程中一步一步地写出来,我相信它会为数百人节省数小时的头痛。 ...取消了一个生产实例,试图对此进行排序。感谢您的帮助❤️
猜你喜欢
  • 1970-01-01
  • 2017-10-12
  • 2018-07-10
  • 1970-01-01
  • 2019-09-18
  • 2018-10-20
  • 2019-02-12
  • 1970-01-01
相关资源
最近更新 更多