vah*_*det 3 nat amazon-web-services aws-lambda
我有一个 AWS Lambda 函数,它:
Redis 实例位于私有子网中;因此,为了获取它,我添加了 VPC 和实例所在的子网。我还指定了允许所有出站流量的安全组。网络 ACL 是默认的,它应该用于所有入站和出站流量。
像这样通过控制台向Lambda函数添加VPC时,提示:
当您启用 VPC 时,您的 Lambda 函数将失去默认的 Internet 访问权限。如果您的功能需要外部 Internet 访问,请确保您的安全组允许出站连接并且您的 VPC 具有 NAT 网关。
因此,在Route Table私有子网的 中,我也添加了一个NAT gateway。但是,在从 Lambda 函数进行 Google Places API 服务调用时,它总是注定会导致超时。
简而言之,我怀疑 NAT 网关是否正确允许 Lambda 函数的 Internet 访问。我怎样才能检查它出了什么问题?
NAT 网关是否会在 CloudWatch 等中以某种方式记录呼叫或尝试通过它尝试的呼叫?
我想详细说明@vahdet 的答案。我正在努力协调 NAT 网关应该如何同时位于公共和私有子网中。这里的AWS 官方文档似乎是错误的,但当然不是。我和其他人都忽略了一个非常微妙的细节。
NAT 网关必须同时跨两个不同的子网进行“热连线”,以便将私有地址桥接到面向 Internet 的公共地址。
首先,我尝试将 NAT 网关放在与 IGW 相同的路由表中,但这当然不起作用,因为您不能有两个具有不同目标的相同路由 (0.0.0.0/0)。
该指南说将 NAT 网关放在专用网络的路由表中,我这样做了,但这似乎不起作用。
我缺少的关键细节是 NAT 网关必须在公共子网中创建。文档实际上是这样说的,但它似乎令人困惑,因为我们后来被告知将NAT 网关的路由放在私有表中。
这两件事都是真的。在公有子网中创建 NAT 网关,然后只在私有路由表中添加路由表条目。
该文档告诉您在 VPC 中创建以下网络资源:
我已经有了一个路由表和一些子网,所以我尝试只添加一个新子网和一个新路由表,这就是我遇到麻烦的地方。最好按照文档创建两个。
这是子网对我来说的样子:
subnet-public 10.8.9.0/24 us-east-1a
subnet-private 10.8.8.0/24 us-east-1a
Run Code Online (Sandbox Code Playgroud)
然后在子网公共中创建NAT 网关。它将等待几分钟,这很重要,因为它必须先进入可用状态,然后才能在路由表条目中引用。
以下是路由表:
route-table-public
10.8.0.0/16 local
0.0.0.0/0 igw-xyz
subnet-association: subnet-public
route-table-private
10.8.0.0/16 local
0.0.0.0/0 nat-abc
subnet-association: subnet-private
Run Code Online (Sandbox Code Playgroud)
你看到那里发生了什么吗?真的很微妙。NAT 网关是交叉连接的。它“存在”在创建它的公共子网中,但私有子网中的所有流量都被路由到它。
如果您像我最初那样在私有子网中创建 NAT 网关,那么 NAT 网关与私有子网中的其他所有内容一样孤立,并且无法将流量路由到 Internet。它必须在公共子网中创建才能访问 Internet,因为它必须在公共子网内具有 IP 地址。我的 NAT 网关获得了10.8.9.127的内部 IP和 54.XXX 范围内的外部 IP。
通过将 NAT 网关设为私有路由表中的 0.0.0.0/0 路由,我们告诉所有非 10.8.0.0/16 流量直接进入 NAT 网关,即使它实际上并不在私有子网内。
VPC 本身知道如何跨其自己的子网桥接流量,并且能够将 10.8.8.X 流量发送到 NAT 网关的 10.8.9.X IP。然后它充当桥接器,并将通过其内部 IP 的所有流量转换为其外部 IP。由于它位于具有 Internet 网关的路由表中的公共子网中,因此外部 IP 具有通往 Internet 的清晰路径。
现在,子网私有中的私有 VPC lambda已通过 NAT 网关验证了 Internet 访问。
| 归档时间: |
|
| 查看次数: |
1140 次 |
| 最近记录: |