所以我有一个非常困惑的问题,我不知道如何解决。我的设置是API Gateway-> Lambda-> IoT Core。我设置了代码,并且可以从我的IDE正常工作。我将其部署到AWS,并且与AWS的连接超时。
Lambda位于单个子网中,并且该子网确实具有通往IGW的默认路由。我进行了测试,Lambda函数可以将IoT端点的IP解析为公共IP(54.x.x.x)。但是connect()方法超时。我的Lambda函数安全组已设置为允许所有传入/传出。
我想念什么?为什么我不能从配置了IGW且似乎正在运行的VPC内部进入IoT核心版。任何方向将不胜感激。
在玩了很多不同的事情之后,我无法确定自己到底是在搞乱我的配置。但是,按照接受的答案,我完成了以下设置,该设置似乎可以满足我的需要。
我不知道这是否是我想要的,但这就是我想要的。一系列子网,这些子网不可公开访问,但具有互联网连接以访问其他AWS服务。因此,我的Lambda资源,ECS等可以私下放置并访问所需的资源。
谢谢大家提供的信息。
答案 0 :(得分:1)
您不应将Lambda函数部署到公共子网(这是具有到IGW的默认路由的子网)。它不会以您希望的方式工作。 Lambda功能没有,也没有公共IP,因此无法通过IGW路由到Internet。
如果Lambda需要位于VPC中,则将其移动到专用子网中,并确保专用子网具有到公用子网中NAT(或NAT网关)的默认路由。或者,如果可行的话,可以将Lambda函数完全部署在VPC之外。
更多信息,位于:
答案 1 :(得分:0)
当您说“我进行了测试,并且Lambda函数可以将我的IoT终端节点的IP解析为公共IP(54.xxx)”时,您的意思是DNS解析,或者您已在实际网络中进行了检查交通。
在任何一种情况下,您都可以为VPC打开VPC流日志,然后重试。流日志将确定SG还是NACL阻止了您的流量。
还请记住,Lambda不能存在于公共子网中,它们必须驻留在专用子网中,并在公共子网上使用NAT GW连接到Internet。