如何在 AWS ECS 中扩展任务/容器

How to scale tasks / containers in AWS ECS

This 是 AWS 的介绍性指南,介绍如何在 ECS

上部署基于微服务的应用程序

显然(从文档中也可以看出),所谓的任务定义应该包含 所有 构成堆栈的容器。

即如果您相应的 docker-compose.yml 文件由 5 services 组成(在 docker 组合上下文中),那么这些文件都应该在 same ECS 任务中结束定义 (?).

据我了解,这也有助于在容器中自动发现服务(docker-composedocker swarm 中的默认行为);

问题在于,ECS 的扩展可能性是(除了 EC2 个实例)每个 ECS 服务。

这是否意味着您不能进行容器级缩放?

如果我想要一个服务规模,我将不得不在我所谓的堆栈中扩展 所有 个容器?

好吧,ECS 只扩展任务,没有 1 个容器在任务内,如果你想在任务内扩展一个容器,你必须用所有容器扩展任务。您必须为每个服务创建一个任务。请记住,AWS 认为您只想 运行 一个简单应用程序的任务,该应用程序使用来自 RDS 的数据库服务以及它可以使用它的任何服务分配在 AWS 基础设施中。

不需要将所有容器都放在同一个任务定义中。来自 docs:

Your entire application stack does not need to exist on a single task definition, and in most cases it should not. Your application can span multiple task definitions by combining related containers into their own task definitions, each representing a single component.

另外请注意,您在单个任务定义中只能使用 10 个容器定义,在每个任务定义中只使用一个容器定义是完全可以的。

至于缩放,您可以为每个任务定义创建一个服务。这允许堆栈中逻辑上独立的组件独立扩展。例如,如果您有 2 个服务,一个用于后端 api 服务,另一个用于前端 nginx,您可以为它们创建 2 个单独的任务定义,每个服务独立扩展。

将容器定义分组为单个任务定义的可能原因:

  • 它们有一个单一的逻辑目的或共享一个生命周期(一起开始和结束)。
  • 您想将它们一起缩放。
  • 您希望容器共享数据量等资源。
  • 容器需要 运行 在同一主机实例上,并执行诸如通过本地主机通信之类的操作。

另一方面,如果容器执行单独的逻辑功能,独立扩展,不共享生命周期或卷等资源,您最好使用多个任务 definitions/services。

还有一些关于 ECS 应用程序架构的文档 here 进一步解释了这一点。