具有Internet网关的VPC中的AWS Lambda功能仍然无法访问Internet

时间:2019-06-13 22:25:45

标签: amazon-web-services aws-lambda amazon-vpc

我有一个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)。我在“子网关联”下看到了subnet-05 *。在“路线”下,我看到“目标0.0.0.0/0”已链接到“
  • ”的目标
  • 新的NAT网关(nat-08 *)。此NAT网关具有一个弹性IP地址和一个专用IP地址。它位于正确的子网中。状态为可用。
  • 此外,我为Lambda函数创建了一个新的安全组。其中包含一个针对目的地为0.0.0.0/0的“所有流量”的出站规则

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

1 个答案:

答案 0 :(得分:4)

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

  

如果您的功能还需要互联网访问(例如,到达公共AWS服务终端节点),则您的功能必须使用NAT网关或实例

您错过了此事:

  

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

这意味着没有NAT,即使Lambda处于公共子网中,也无法访问Internet。这就是Lambda在VPC中的基本原理。

您提供的完全相同的link指导您如何与VPC和Lambda一起创建此NAT网关。

补充答案-关于在这种情况下为什么需要NAT网关的原因-

  

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

     

摘自aws docs


请紧记::如果您需要Lambda来访问仅互联网-而不是同一VPC中的任何其他资源-我建议将它们设置为非VPC然后他们就可以使用互联网了-您无需支付NAT的费用。