如何启动具有公共 DNS 的 ECS Fargate 容器?

问题描述 投票:0回答:3

我构建了一个 AWS CodePipeline 来构建容器并将其部署到 Fargate 托管的 EC2 实例中。参考 AWS CodePipeline

其中一项服务是网络服务器,我正在尝试通过公共分配的 IP 地址从公众访问它;然而,这并不是很有用,因为每个部署的容器都会收到一个新的 IP 地址。

我知道可以设置弹性 IP 地址或将域指向容器服务,但我认为有一种更简单的方法。

EC2 实例可以通过提供公共 DNS 的选项来启动...

是否可以使用静态公共 DNS 记录启动容器服务?如果是的话,怎么办?

amazon-web-services amazon-ecs amazon-route53 amazon-vpc aws-cloudmap
3个回答
16
投票

最常见的选择:ALB

虽然它不是免费的,但通常如果您想要 ECS 服务(fargate 或 EC2)的公共 DNS 名称,您可以在其前面添加一个负载均衡器(如果您愿意,它也可以执行 SSL 终止)。

因此,当您设置服务时,AWS 可以轻松创建负载均衡器或将您的服务添加到现有目标组。我认为事后您无法更改它,因此您可能需要重新创建服务。

最后,当您在 ECS 服务前面有一个负载均衡器时,您只需在 Route53 中设置 CNAME 或 A ALIAS(如果您使用 Route53)即可将 DNS 名称定向到该负载均衡器。

AWS 在 AWS 计算博客上提供了 2016 年的演练,快速描述了如何设置 ECS 服务并使用应用程序负载均衡器公开它。

ECS服务连接

ECS Service Connect 在 ReInvent 2022 上宣布,似乎可以让您提供负载均衡的 ECS 服务,而无需配置或管理 ALB 或 API 网关:

借助 ECS Service Connect,您可以使用 AWS Cloud Map 提供的命名空间通过逻辑名称引用和连接到您的服务,并在 ECS 任务之间自动分配流量,而无需部署和配置负载均衡器。

云地图/服务发现/API网关

借助 ECS Service Discovery 和 AWS CloudMap,您可以使用 API 网关。您的负载平衡选项更加有限,但 API 网关是根据使用情况而不是小时数计费的,因此它可以潜在地节省小批量服务的成本。您还可以在多个 ECS 服务前面使用单个 API 网关,无论如何,有些人会想要这样做。这种方法不太常用,但对于某些用途来说可能是正确的方法。


3
投票

您可以使用 ECS 服务发现 在私有 DNS 命名空间中注册容器 - 不幸的是,这对于公共 DNS 是不可能的。

但是,你能做的就是拥有一个脚本

  • 重新部署后获取容器的公共 IP 并
  • 使用该 IP 更新插入您的公共 Route 53 记录集。

在本文中,我们将描述如何使用通用 lambda 函数来准确实现这一点。


0
投票

当我第一次设置 ECS Fargate 服务时,设置向导似乎已自动(?)为我创建了一个负载均衡器。我能够通过 URL 创建的 Web 应用程序:Amazon ECS -> 集群 -> {我的集群} -> {我的服务} -> 目标组名称(在“详细信息”选项卡中的“负载均衡”下)-> {我的目标组} -> 负载均衡器 -> DNS 名称

© www.soinside.com 2019 - 2024. All rights reserved.