我有一个简单地执行 http.get
的 lambda 函数至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 提供互联网访问。然而,当试图向外部互联网发出请求时,它仍然永远挂起。
最佳答案
您快到了。您提供的链接直接解决了您的问题:
If your function also requires internet access (for example, to reach a public AWS service endpoint), your function must use a NAT gateway or instance
你错过了这个:
Your VPC should contain a NAT gateway or instance in a public subnet.
这意味着如果没有 NAT,您的 Lambda 将无法访问互联网——即使“它们”在公共(public)子网中。这就是 lambda 在 VPC 中的基本工作方式。
完全相同link您提供的指导您如何与您的 VPC 和 Lambda 一起创建此 NAT 网关。
补充答案 - 在 为什么需要 NAT 网关 在这种情况下 - 是由于:
... you can use a network address translation (NAT) gateway to enable instances in a private subnet to connect to the internet or other AWS services, but prevent the internet from initiating a connection with those instances...
Extracted from aws docs
请记住:如果你需要你的 lambda 来访问 只有互联网 - 而不是同一 VPC 中的任何其他资源 - 我建议将它们设为非 VPC,然后他们将可以开箱即用地访问互联网 - 您无需支付 NAT 的成本。
关于amazon-web-services - 带有 Internet 网关的 VPC 中的 AWS Lambda 函数仍然无法访问 Internet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56589269/