【发布时间】:2019-10-28 13:34:40
【问题描述】:
我有一个 lambda 函数,它只是将 http.get 转换为 http://www.google.com。如果我没有 VPC 背后的功能,它可以正常工作。当我将它放入我的 VPC 时,就会出现问题。
我知道您需要设置一个 Internet 网关。我这样做了。我的两个子网附加到将0.0.0.0/0 路由到此 Internet 网关的路由表。这不应该是我所需要的吗?
无论 Internet 网关的关联如何,该功能仍然挂起。子网的安全组允许来自0.0.0.0/0" 的所有流量。
根据Grant Internet Access to a VPC Lambda Function,这就是我应该做的一切。
编辑:
添加要明确的 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 提供 Internet 访问。然而,当尝试向外部互联网发出请求时,它仍然永远挂起。
【问题讨论】:
-
“它位于正确的子网中” 你确定吗? NAT 网关进入子网 X,默认路由到 Internet 网关。然后,Lambda 函数必须与子网 Y 关联,并具有到 NAT 网关的默认路由。
-
是的,两者都需要,因为 NAT 网关必须位于公共子网上。这就是他们通过 Internet 网关到达 Internet 的方式。 NAT 网关不在它们所服务的同一子网中。
-
Lambda 函数指向一个或多个默认路由为 NAT 网关的子网。 NAT 网关位于不同的子网上,其默认路由是 Internet 网关。
-
Lambda 的第二个子网需要是第二个 private 子网,所以总共是 3 个。除非您的 RDS 实例是多可用区,并且您正在设计高可用性,否则可以忽略该警告。
标签: amazon-web-services aws-lambda amazon-vpc