【问题标题】:How to decide which ECS tool to use?如何决定使用哪个 ECS 工具?
【发布时间】:2021-05-03 20:27:27
【问题描述】:

我正处于一个十字路口。我的目标是自动创建我的 ECS 架构并将我的 docker-compose 服务部署到 ECS Fargate,但是有很多方法可以做到!

希望从社区中获得一些关于为工作选择合适工具的见解。它们各自的用例是什么?我应该什么时候选择一个而不是另一个?

Docker ECS 集成
https://docs.docker.com/cloud/ecs-integration/

ecs-cli
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_CLI.html

AWS Copilot
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Copilot.html

AWS CLI ecs
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ecs/index.html

【问题讨论】:

  • 您遗漏了 CloudFormation、AWS CDK、Terraform 和 Pulumi(我可能忘记了一些)。恐怕你的问题的答案会非常固执己见。如果您对自动化感兴趣,我只会查看您列表中的 Copilot,但根据您的需求有多先进,我会查看 AWS CDK 或 Terraform。
  • 我希望能够做的主要事情是使用 CloudFormation 分别定义我的所有网络、数据库和存储,然后能够使用我的 docker-compose 文件轻松部署到这些资源。我不希望自动创建我的网络堆栈。
  • 如果您已经在使用 CloudFormation,为什么还要使用 docker-compose 进行部署?为什么不将它用于所有事情?
  • 如何将 docker-compose 转换为 CloudFormation 堆栈?我不想手动描述我的 ECS 任务、服务等。
  • 我发现的问题是我总是最终需要做更高级的事情,比如在 EFS 卷中映射,这在 ECS 任务定义中执行而不是尝试插入您的 docker 中才有意义- 以某种方式撰写文件。我维护一个用于本地开发的 docker-compose 文件,以及用于 AWS 部署的 Terraform 中的 ECS 任务定义。从头开始编写一个 ECS 任务定义只需要我几分钟,所以你不需要同时承担所有这些额外的工作。

标签: amazon-web-services docker docker-compose amazon-ecs


【解决方案1】:

这就是我的分解方式:

  • Docker Compose / ECS 集成:如果您深入了解 Docker 已经爱上了 compose 语法,请使用此功能。如果你还没有爱上它,你应该爱上它,因为它的语法非常简单
  • ECS CLI:这是 Copilot CLI 的早期版本。 ECS CLI 具有本地 ECS 组件/工作流程 + 某种程度的 docker compose 兼容性。此后,我们改进了 Copilot 中的工作流程,并将 compose 支持分叉到上面的 Docker Compose / ECS 集成中。 TL/DR:不要使用 ECS CLI
  • Copilot CLI:这是在 AWS ECS 上开始使用容器的一种非常简单的方法。如果您对 Docker 了解不多,并且不需要成为容器专家,那么 Copilot 是正确的方法。唯一的缺点 (IMO) 是它还不真正支持适当的 IaC 模式 (example)。
  • AWS CLI(ecs 命名空间):这只是核心 ECS API 的 1:1 映射的 CLI 表现形式。这很可能对您来说太低了,无法提取价值(除非您正在做非常深入的事情)。例如,一个 Copilot 命令或几行 Docker Compose 行可以轻松地分解为数十个 AWS CLI 命令。

我会将 CDK 添加到您的列表中:CDK 是 AWS 构造(包括 ECS)的表示,可以用标准编程语言表示。 CDK 的好处是它可以映射 1:1 的原始 API/Cloudformation 构造,但它还附带更高级别和更抽象的库,允许您用几行代码表达需要数百行 CFN 的内容。

如果您对撰写深入了解(从您的原始消息中可以看出),您可能需要查看this approach

【讨论】:

  • 对我来说,它归结为copilotdocker-compose。我想坚持使用docker-compose,因为它是我们在开发环境中使用的。让我转向copilot 的三个主要认识是 1) 它是专门为 AWS 构建的。这比试图让docker-compose 做一些原本不打算做的事情要好。 2) 无论如何我们都会使用 AWS 服务(Elasticache 和 Aurora,而不是带有 MySQL 和 Redis 的 docker 容器),所以copilot 可能更适合。 3) copilot pipeline 在我们准备好时为 CI/CD 提供了一种 AWS 友好的方法
猜你喜欢
  • 1970-01-01
  • 2011-10-11
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
  • 2018-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多