我们希望在 AWS 上以版本控制和记录的方式启动单个 Docker 容器任务 - 但采用临时方式。每个容器任务都需要大量 vCPU 和 RAM(可能是 16 个 vCPU 和 64GB RAM)。
我看到有几种服务可能有助于解决这个问题,但没有一种是理想的;
- CloudFormation + EC2:在实例(以及 VPC 等)上启动、配置和执行容器
- 批(很好,但我们不需要并行容器)
- Fargate(很棒,但仅限于 4 个 vCPU 和 30GB RAM)
- ElasticBeanstalk(单容器环境)该任务不是 Web 应用程序,因此不需要负载均衡器等。
有人可以提供类似工作负载的经验吗?我是否遗漏了一些明显的服务?
答案1
使用云形成设置堆每次需要运行时,都会以一致、可重复的方式进行。CloudFormation 模板将创建:
- ECS 集群
- EC2 实例加入 ECS 集群(单个实例或自动伸缩组)
- ECS任务定义容器 URL 可以作为模板的参数
- 任何支持资源 -IAM 角色,安全组, ETC。
然后你可以有一个简单的shell 脚本或者ansible 剧本这将从 CloudFormation 模板创建堆栈并触发任务运行。然后等待它完成并拆除再次使用堆栈,这样您就不会为闲置资源付费。如果您需要运行任务(例如每天早上),则可以使用CloudWatch 事件规则定期触发它。
如果要运行的容器需要不时从源代码重建,您还可以设置CI/CD 管道使用代码管道,CodeBuild等,每次更改代码时,它都会以一致的方式重建容器。
希望有帮助:)
答案2
尝试 terraform + ecs。简单又方便