gpt4 book ai didi

amazon-web-services - AWS Lambda - NAT 网关互联网访问导致超时

转载 作者:行者123 更新时间:2023-12-03 23:21:47 25 4
gpt4 key购买 nike

我有一个 AWS Lambda 函数:

  • 检查 Redis Elasticache 实例,
  • 如果在缓存中找不到该项目,则转到 Google Places API 服务。

  • Redis 实例位于 私有(private)子网 ;因此,为了获取它,我添加了 VPC 和实例所在的子网。我还指定了允许所有出站流量的安全组。网络 ACL 是默认的,应该用于所有入站和出站流量。

    通过控制台将VPC添加到Lambda函数时,它会提示:

    When you enable VPC, your Lambda function will lose default internet access. If you require external internet access for your function, ensure that your security group allows outbound connections and that your VPC has a NAT gateway.



    所以,在 Route Table在私有(private)子网中,我添加了 NAT gateway也。但是,在从 Lambda 函数调用 Google Places API 服务时,它总是注定会导致超时。

    简而言之,我怀疑 NAT 网关是否正确允许 Lambda 函数访问 Internet。我如何检查它出了什么问题?

    NAT 网关是否会在 CloudWatch 等中以某种方式记录调用或通过它尝试的调用尝试?

    最佳答案

    我想详细说明@vahdet 的答案。试图协调 NAT 网关应该如何同时位于公共(public)子网和私有(private)子网中的方式让我失去了理智。好像是官方 AWS 文档 here错了,但当然不是。我和其他人都错过了一个非常微妙的细节。
    NAT 网关必须同时跨两个不同的子网“热连线”,以便将私有(private)地址桥接到面向 Internet 的公共(public)地址。
    首先,我尝试将 NAT 网关与 IGW 放在同一个路由表中,但这当然行不通,因为您不能有两个具有不同目标的相同路由 (0.0.0.0/0)。
    该指南说将 NAT 网关放在专用网络的路由表中,我这样做了,但这似乎不起作用。
    我缺少的关键细节是 NAT 网关必须是 创建于 公共(public)子网。文档实际上是这么说的,但这似乎令人困惑,因为我们后来被告知要放置 路线用于 中的 NAT 网关私有(private)餐 table .
    这两件事都是真的。在 中创建 NAT 网关公共(public)子网然后只添加一个 路由表条目 私有(private)路由表 .
    该文档告诉您在 VPC 中创建以下网络资源:

  • 两个新子网
  • 两个新路由表
  • 一个新的 NAT 网关

  • 我已经有一个路由表和一些子网,所以我尝试只添加一个新子网和一个新路由表,这就是我遇到麻烦的地方。最好按照文档创建两个。
    这是子网对我的样子:
    subnet-public    10.8.9.0/24    us-east-1a
    subnet-private 10.8.8.0/24 us-east-1a
    那么 创建 中的 NAT 网关公共(public)子网 .
    它将等待几分钟,这很重要,因为它必须进入可用状态才能在路由表条目中被引用。
    以下是路由表:
    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
    你看到那里发生了什么吗?这真的很微妙。 NAT 网关是交叉连接的。它“存在”在创建它的公共(public)子网中,但私有(private)子网中的所有流量都被路由到它。
    如果您像我一开始那样在私有(private)子网中创建 NAT 网关,那么 NAT 网关与私有(private)子网中的其他所有东西一样隔离,并且无法将流量路由到 Internet。必须是 已创建 在公共(public)子网中才能访问 Internet,因为它必须 在公共(public)子网内有一个 IP 地址 .我的 NAT 网关的内部 IP 为 10.8.9.127 以及 54.X.X.X 范围内的外部 IP。
    通过使 NAT 网关成为私有(private)路由表中的 0.0.0.0/0 路由,我们告诉所有非 10.8.0.0/16 流量直接进入 NAT 网关 即使它实际上不在私有(private)子网内 .
    VPC 本身知道如何跨自己的子网桥接流量,并且能够将 10.8.8.X 流量发送到 NAT 网关的 10.8.9.X IP。然后,它充当桥接器,并将通过其内部 IP 的所有流量转换为其外部 IP。因为它位于带有 Internet 网关的路由表中的公共(public)子网中,所以外部 IP 具有通往 Internet 的清晰路径。
    现在我的私有(private) VPC lambda 在 子网私有(private) 已通过 NAT 网关验证互联网访问。

    关于amazon-web-services - AWS Lambda - NAT 网关互联网访问导致超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52155921/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com