【问题标题】:AWS VPC Lambda Networking IssueAWS VPC Lambda 网络问题
【发布时间】:2020-07-05 11:39:28
【问题描述】:

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

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

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

更新

在玩了很多不同的东西之后,我无法确定我到底把我的配置搞砸了。但是按照接受的答案,我最终得到了以下设置,这似乎可以满足我的需要。

  • 子网 1 10.14.10.0/24(自动分配公共 = 假)
    • 本地路由(10.14.0.0/16)和默认路由=nat-gateway
  • 子网 2 10.14.20.0/24(自动分配公共 = 假)
    • 本地路由(10.14.0.0/16)和默认路由=nat-gateway
  • 子网 3 10.14.30.0/24(自动分配公共 = 假)
    • 本地路由(10.14.0.0/16)和默认路由=nat-gateway
  • 子网 4 10.14.40.0/24(自动分配公共 = 假)
    • 本地路由(10.14.0.0/16)和默认路由=nat-gateway
  • 子网 5 10.14.200.0/24(自动分配公共=真)
    • 本地路由(10.14.0.0/16)和默认路由=igw
  • nat 网关
    • 在子网 5 中

我不知道这是否是我想要的,但这就是我想要的。一系列不可公开访问但具有 Internet 连接以访问其他 AWS 服务的子网。所以我的 Lambda 资源、ECS 等可以私下访问并访问他们需要的东西。

感谢大家提供的信息。

【问题讨论】:

  • 当 lambda 不在 VPC 中时是否一切正常?您的 lambda 是否对 VPC 具有正确的执行角色?
  • 是的,API GW 有多个端点,所有端点都在 VPC 内正常工作(访问 DynamoDB、elasticache 等)。我没有在 VPC 之外专门尝试过。我会试试看。
  • @Marcin 是的,它确实在 VPC 之外工作。
  • 有趣。您的子网上是否有任何 NACL 可以阻止连接。也是您的子网私有还是公有?
  • VPC 和子网是私有的。我正在使用默认的 NACL,它对入站和出站都有一个允许所有 ( 100 / ALL Traffic / ALL / ALL / 0.0.0.0/0 / ALLOW ) 的规则。我刚刚注意到的同一子网中也有一个 NAT GW。我添加它是为了解决过去的问题,但我不记得为什么了。

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


【解决方案1】:

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

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

更多信息请访问:

【讨论】:

  • 我所有的“私有”子网都有一条到 IGW 的默认路由……但我只是假设 IGW 充当路由器,在需要时将我的 10.xxx IP 流量通过IGW。我认为使他们成为私有的原因是他们没有公共 IP。虽然这听起来确实像一个 NAT 功能,所以也许我需要在这两个方面多读一点。我的私有子网(sub-a、sub-b 等)是否应该有到我的公共子网(sub-z)的默认路由,这将是唯一一个具有到 IGW 的默认路由的路由?也许我以为我的 VPC 中有一个有效的互联网连接,而我没有。
  • 不,您的私有子网没有到 IGW 的默认路由。这些是公共子网。所有子网都有一个本地目标(如果是 10/16 网络,那么目标是 10.0.0.0/16 并且目标是本地的)——这就是 VPC 子网相互通信的方式。公共子网具有到 IGW 的默认路由。私有子网可以具有到公共子网中的 NAT 的默认路由。请参阅docs.aws.amazon.com/vpc/latest/userguide/VPC_Scenario2.html 了解更多信息。
  • 感谢您的链接。我会阅读并尝试让它工作,然后用我的分辨率更新我的原始问题(如果我能够弄清楚哈哈)。谢谢(你的)信息。云网络很“有趣”
  • 将 Lambda 移动到私有子网,确保您在公有子网中有 NAT,并添加从私有子网到该 NAT 的默认路由。设置应该很简单。
【解决方案2】:

当您说“我进行了测试,Lambda 函数可以将我的 IoT 终端节点的 IP 解析为公共 IP (54.xxx)”时,您是指 DNS 解析,还是您已经使用实际网络进行了检查交通。

无论哪种情况,您都可以为您的 VPC 启用 VPC 流日志,然后重试。流日志将识别 SG 或 NACL 是否阻塞了您的流量。

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

【讨论】:

  • 我的意思是 DNS 解析,如果 AWS 提供了这样的东西,我想这可以通过我的 VPC 中的“内部”DNS 服务器来完成。我想我真的不明白何时使用 IGW 和 NAT GW。我现在有一个 IGW,但如果这是默认路由,为什么不允许我的 VPC 上的 Internet?我将查看 VPC 流日志。我以前见过它们,只是没用过。
  • VPC 确实包括 EC2 实例的本地域名的 DNS 解析(如 ec2-192-0-1-2.compute-1.amazonaws.com),它对公共名称服务器执行递归查找.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-18
  • 2023-02-07
  • 1970-01-01
  • 2018-09-26
  • 2019-12-06
  • 2016-08-03
  • 2021-11-29
相关资源
最近更新 更多