我有一个 AWS ECS 集群,其唯一目的是每 12 小时运行一次计划任务。目前,我将集群扩展到 1 个实例,以便任务有地方运行。相反,我希望将集群保持在 0 个实例,并将其配置为在计划任务运行时自动扩展到 1 个实例,然后在任务完成时返回到 0 个实例。
我的研究表明,ECS 自动伸缩通常用于根据资源利用率等指标来扩展实例,因此我想要的可能是不可能的。我发现最接近的解决方案是为自动伸缩组创建一个计划操作,如下所述这里;我可以安排集群每 12 小时扩大一次,就在计划任务运行之前,但我不确定如何确保集群只在任务完成后缩小。(这基本上是这个答案,但已经两年多了,我希望情况已经改变,可以实现我的愿望。)
因此,理想情况下,集群应该根据计划任务本身进行扩展。这可能吗?
答案1
你能在Fargate 容器?
使用 Fargate,您无需运行和管理任何 EC2 实例,只需安排作业在 Fargate 中运行即可。它运行标准 docker 镜像,与基于 EC2 的 ECS 集群相同。唯一的限制是它不能做任何特权操作例如挂载网络文件系统或生成子容器。但如果你不需要这些,你应该认真考虑一下。
希望有帮助:)
答案2
正如您所说,您需要 500GB 的存储空间,您可以考虑通过 AWS Step Function 进行编排。触发阶跃函数每 12 小时以及每次执行以下操作时:
创造AWS Batch作业,指定实例类型和所需的磁盘空间。您甚至可以使用Spot 实例以降低成本。
等待作业完成。
报告成功/失败时重试。
在 Step Functions 控制台中实际上有一个示例项目管理批处理作业正是如此。
或者,如果您愿意,也可以不使用 AWS Batch 执行相同操作,并创建自定义 Lambda 函数来启动实例、等待成功、启动任务、等待成功、拆除实例、等待成功。但您也可以使用 Batch 为您完成所有这些操作。
希望有帮助:)