我有一个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组件的完整列表。
据我所知,我已经完成了AWS文档链接中的所有操作,为Lambda提供了Internet访问权限。但是,当尝试向外部Internet发出请求时,它仍然永远挂起。
答案 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的费用。