AWS ECS Fargate 动态注册 IP 到目标组

AWS ECS Fargate dynamically register IP to target group

我在工作中使用 AWS,对此我还很陌生。

我有多项服务,其中一项 Task/Container 运行。每个 Container 基本上都是一样的,只是有一些变化,基本上是针对不同的 stages/deployments。我每个都有一个目标组,因此我的负载均衡器将请求从特定域路由到每个域。

例如:如果主机是 example1.com 则转发到 exampleTargetGroup1 等等。

问题

你可能知道每次更新容器时,它的 IP 都会改变,因此我必须重新注册新 IP 到目标组

我发现 several approaches 这个问题。他们中的大多数人建议为静态 IP 使用网络负载平衡器,但这不起作用,因为据我所知,它会在更新时自动注册容器。

Another solution 是在更新任务时在云监视事件上触发 Lambda 函数。该函数获取 IP 并更新 Route53 记录。我的想法是采用这种方法并在目标组中注销旧 IP 并注册新 IP。

我的问题

是否有更好的解决方案,或者我对第一个解决方案的理解有误?如果最后一个解决方案最适合我的问题,是否有代码示例,这样我就不需要弄明白了?

编辑:

感谢 Mark B 我现在知道了,您最好使用 AWS API 或类似 Terraform 的工具来创建 ECS 服务并将目标组关联到它。

"but this doesn't work because, as I understand it, it registers the containers automatically on updates."

我认为你误解了什么。每个 ECS 服务都应与一个负载均衡器目标组相关联。每当服务创建任务时,服务都会自动将该任务的 IP 添加到目标组。每当服务删除任务时,它也会从目标组中删除该任务的 IP。这适用于网络负载均衡器和应用程序负载均衡器。

您陈述了以下内容:

"I have multiple Services with one Task/Container running"

所以每个服务一个任务,每个目标组一个服务。根据您的描述,您的架构应如下所示:

One load Balancer with multiple domains pointing at it. 
In the Load Balancer listener configuration, you have each domain configured to route to a different target group.
Each ECS service configured with a task count of 1

Load balancer -> domain name 1 -> target group 1 -> ECS service 1 -> ECS task 1
Load balancer -> domain name 2 -> target group 2 -> ECS service 2 -> ECS task 2
Load balancer -> domain name 3 -> target group 3 -> ECS service 3 -> ECS task 3
etc...

在上述场景中,只要您为每个 ECS 服务配置了适当的目标组,每次该服务重新部署任务时,它都会自动更新目标组以指向更新后的任务。

换句话说,ECS 将“动态地将 IP 注册到目标组”,就像您想要的那样。