【问题标题】:Accessing ECS container from AWS Lambda running in VPC从运行在 VPC 中的 AWS Lambda 访问 ECS 容器
【发布时间】:2020-11-30 03:42:41
【问题描述】:

我在公共 VPC(无 NAT 网关)中有一个 lambda 函数,它应该调用另一个 ECS 服务,该服务可通过负载均衡器公开访问。由于 lambda 函数无法访问 Internet,因此无法访问 ECS 服务。我可以以某种方式使用内部网络(特别是现有的负载均衡器),这样我就不需要设置 NAT 网关了吗?一切都部署到同一个公共子网。

【问题讨论】:

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


    【解决方案1】:

    如果所有内容都部署到公共子网(或者甚至在不同的子网中但在同一个 vpc 中),您可以简单地创建一个新的“内部”负载均衡器。有两种负载均衡器:

    1. 公开
    2. 内部

    然后,您的 lambda 函数将可以使用此内部负载平衡器(通过私有 ip,通过 LB 提供的 DNS 解析)。 (假设您当前的负载均衡器是公共的,其 DNS 解析为公共 IP。) 我不知道私有 IP 访问公共负载均衡器的任何方式。

    然而,在这一点上,我会问一个看似无关,但可能很重要的设计问题: 是什么迫使您将 lambda 函数放在 VPC 的公共子网中? lambda 函数永远不会有公共 IP,这意味着它永远无法在没有 NAT 网关的情况下访问互联网,无论它放在哪里。 一个有趣的后续问题是,是什么阻止您将 lambda 函数放在 VPC 之外,在那里它可以开放访问互联网? :)

    【讨论】:

    • lambda 需要访问部署到 VPC 的 RDS。我现在已经部署了一个 NAT 网关并将 lambda 函数移动到私有子网,以便我可以访问第三方服务。所有子网也与 VPC 终端节点相关联。那些仍然在使用,即使 lambda 可以访问互联网,AWS 是否最好通过端点而不是 NAT 网关路由流量?
    • 这应该可以解决问题。至于您的问题,如果您的路由表中仍有私有子网的服务端点,那么您的请求将通过路由表中最具体的路由条目进行路由。简而言之,是的,如果您在路由表中仍有指向服务端点的条目。从docs.aws.amazon.com/vpc/latest/userguide/… 检查以下内容:“路由优先级我们使用路由表中与流量匹配的最具体的路由来确定如何路由流量(最长前缀匹配)。”
    猜你喜欢
    • 2016-09-12
    • 2017-02-08
    • 2020-09-28
    • 2019-09-18
    • 2019-12-21
    • 2018-09-23
    • 2019-06-04
    • 2021-04-05
    • 2019-11-07
    相关资源
    最近更新 更多