带有 Internet 网关的 VPC 中的 AWS Lambda 函数仍然无法访问 Internet

Joh*_* D. 3 amazon-web-services amazon-vpc aws-lambda

我有一个 lambda 函数,它只是执行http.getto http://www.google.com。如果我没有 VPC 背后的功能,它工作正常。当我把它放在我的 VPC 中时就会出现问题。

我知道您需要设置 Internet 网关。我这样做了。我的两个子网连接到路由0.0.0.0/0到此 Internet 网关的路由表。这不应该是我需要的全部吗?

无论 Internet 网关的关联如何,该功能仍会挂起。子网的安全组允许所有流量流出0.0.0.0/0".

根据授予对 VPC Lambda 函数的 Internet 访问权限,这是我需要做的一切。

编辑:

添加 VPC 组件的完整列表以明确。

  • 创建了一个新的 VPC (vpc-09*)
  • 创建了一个新的子网 (subnet-05*) 指向我的新子网:
  • 路由表,(rtb-0b)。我在子网关联下看到子网 05*。在 Routes 下,我看到 Destination 0.0.0.0/0 链接到目标
  • 一个新的 NAT 网关 (nat-08*)。这个 NAT 网关有一个弹性 IP 地址和一个私有 IP 地址。它驻留在正确的子网中。状态为可用。
  • 此外,我为 Lambda 函数创建了一个新的安全组。这包含一个目标为 0.0.0.0/0 的“所有流量”的出站规则

据我所知,我已经完成了 AWS 文档链接中的所有工作,为我的 Lambda 提供了互联网访问。然而,当尝试向外部互联网发出请求时,它仍然永远挂起。

Gui*_*lla 5

您快到了。您提供的链接直接解决了您的问题:

如果您的函数还需要 Internet 访问(例如,访问公共 AWS 服务终端节点),则您的函数必须使用 NAT 网关或实例

你缺少这个:

您的 VPC 应包含公有子网中的 NAT 网关或实例。

这意味着如果没有 NAT,您的 Lambda 将无法访问互联网 - 即使“它们”位于公共子网中。这就是 lambda 在 VPC 中的基本工作方式。

您提供的完全相同的链接将指导您如何在您的 VPC 和 Lambda 旁边创建此 NAT 网关。

补充答案 - 关于为什么在这种情况下需要 NAT 网关- 是由于:

...您可以使用网络地址转换 (NAT) 网关使私有子网中的实例能够连接到 Internet 或其他 AWS 服务,但阻止 Internet 启动与这些实例的连接...

aws 文档中提取


请记住:如果您需要 lambdas访问互联网- 而不是同一 VPC 中的任何其他资源 - 我建议将它们设为非 VPC,然后它们将具有开箱即用的互联网访问 - 你不会t 支付 NAT 的费用。