AWS VPC Lambda 网络问题

AWS VPC Lambda Networking Issue

所以我有一个非常困惑的问题,我不知道如何解决。我的设置是 API 网关 -> Lambda -> IoT 核心。我设置了代码,它在我的 IDE 中运行良好。我将其部署到 AWS,但与 AWS 的连接超时。

Lambda 在单个子网中,并且该子网确实有到 IGW 的默认路由。我做了一个测试,Lambda 函数可以将我的 IoT 端点的 IP 解析为 public IP (54.x.x.x)。但是 connect() 方法超时。我的 Lambda 函数安全组设置为允许所有传入/传出。

我错过了什么?为什么我无法从配置了 IGW 且似乎正常工作的 VPC 内部访问 IoT Core。任何方向将不胜感激。

更新

在尝试了很多不同的东西之后,我无法确定到底是什么弄乱了我的配置。但是按照接受的答案,我最终得到了以下设置,它似乎可以满足我的需要。

我不知道这是否是我想要的,但这是我一直在寻找的。一系列无法​​ public 访问但具有 Internet 连接以访问其他 AWS 服务的子网。所以我的 Lambda 资源、ECS 等可以私下访问它们需要的东西。

谢谢大家的信息

当你说"I did a test, and the Lambda function can resolve the IP of my IoT endpoint to a public IP (54.x.x.x)"你是指DNS解析,还是你已经用实际网络流量检查过这个。

无论哪种情况,您都可以为您的 VPC 打开 VPC 流日志,然后重试。流日志将确定 SG 或 NACL 是否阻止了您的流量。

另请记住,Lambda 不能存在于 public 子网中,它们必须驻留在私有子网中,并在 public 子网上使用 NAT GW 连接到互联网。

您不应将 Lambda 函数部署到 public 子网(即具有到 IGW 的默认路由的子网)。它不会按照您希望的方式工作。 Lambda 函数没有,也不可能有 public IP,因此无法通过 IGW 路由到互联网。

如果 Lambda 需要在 VPC 中,则将其移动到私有子网并确保私有子网具有到 public 子网中的 NAT(或 NAT 网关)的默认路由。或者,如果可行的话,将 Lambda 函数完全部署在 VPC 之外。

更多信息请访问:

  • Why do we need private subnet in a VPC?