AWS ECS:在单个服务下负载平衡多个容器

AWS ECS: Load Balancing multiple containers under a single service

假设我有一个包含 2 个 nginx 容器的任务定义。现在,当我使用此任务定义创建服务(EC2 启动类型)并尝试向其添加 ALB 时,我只能选择一个“容器以进行负载平衡”。我如何设置它以便我也能够使用相同的 ALB 对另一个容器进行负载平衡?

我尝试过并理解的是:假设我 运行 2 个任务在单个服务下使用上述定义。因此将有 4 个容器 运行(container_1 和 container_2 各 2 个)。当我在服务 ALB 创建过程中选择 container_1 进行负载平衡时,ECS 将创建一个目标组并将 container_1 的实例和动态端口作为目标。然后,该目标组将映射到 ALB 的规则。这对我有用。

但是现在如果我想为我的另一组容器设置规则,我看到的唯一方法是通过硬编码 container_2 的容器的动态端口来自己创建目标组,这是不太理想。

我现在能想到的一个用例是假设一个容器是 运行 前端,另一个是 运行 后端。所以我希望 url 像 /my-app/pages/* 去前端容器,/my-app/apis/* 去后端容器。我敢肯定还有更好的 examples/use 案例,但这就是我现在能想到的。

那么,我该如何设置呢?

谢谢!

让我们遵循 AWS 的文档和建议,了解为什么一个任务中允许使用多个容器。来自文档 [1]

When the following conditions are required, we recommend that you deploy your containers in a single task definition:

  • Your containers share a common lifecycle (that is, they are launched and terminated together).

  • Your containers must run on the same underlying host (that is, one container references the other on a localhost port).

  • You require that your containers share resources.

  • Your containers share data volumes.

Otherwise, you should define your containers in separate tasks definitions so that you can scale, provision, and deprovision them separately.

[1] https://docs.aws.amazon.com/AmazonECS/latest/developerguide/application_architecture.html

对于前端和后端应用程序的用例,两种不同的服务是正确的方法。 2 个 ECS 服务,每个服务有 1 个任务定义和 1 个容器。

至于两者应该如何相互集成,通过URL或服务名称(微服务网格)是另一个话题和讨论。