自动扩展 ECS 集群到/从零个实例

Posted

技术标签:

【中文标题】自动扩展 ECS 集群到/从零个实例【英文标题】:Auto-scaling ECS Cluster to/from zero instances 【发布时间】:2017-02-28 15:01:40 【问题描述】:

我已经使用 SQS 和 ECS 实现了Job Observer Pattern。职位描述被推送到 SQS 队列进行处理。作业处理在运行 ECS Docker 任务的 Auto-Scaling 组内的 ECS 集群上运行。

每个 ECS 任务都会:

    从 SQS 队列中读取消息 对数据执行作业(约 1 小时) 删除消息 有更多消息时循环

当每个实例没有更多工作时,我想缩小集群,最终减少到零个实例。

查看this similar post,答案表明需要在 ASG 之外以某种方式处理缩减。实例将通过显式自行终止或在没有更多消息时关闭 ASG 实例保护来自我缩减。

这也不处理在单个实例上运行多个 ECS 任务的情况,因为如果其他任务并行运行,单个任务不应终止。

我是否仅限于自我缩减并且每个实例只有一个任务?有什么方法可以仅在实例上的所有 ECS 任务退出后终止?是否还有其他可缩小的替代方案?

【问题讨论】:

您能否检查实例是否正在执行作业,并在您的实例上安装了一个简单的应用程序?例如通过获取 CPU/内存利用率? 【参考方案1】:

您可以使用 CloudWatch Alarms with Actions:

检测并终止闲置一段时间的工作实例

【讨论】:

【参考方案2】:

我最终使用了:

添加与挂起的 SQS 队列消息相同数量的实例的横向扩展策略 SQS 队列为空后将实例设置为零的缩减策略 在批处理作业开始时启用 ASG 实例保护并在结束时禁用它

这将我限制为每个实例一个批处理作业,但在我的场景中效果很好。

【讨论】:

【参考方案3】:

该问题的另一个解决方案是 2016 年底宣布的 AWS Batch 服务。

【讨论】:

以上是关于自动扩展 ECS 集群到/从零个实例的主要内容,如果未能解决你的问题,请参考以下文章

AWS IAM 策略拒绝对自动扩展组或 ECS 集群内的任何 EC2 实例的权限

如何将使用自动扩展组和 ECS IAM 创建的 EC2 实例添加到 OpsWorks 堆栈?

如何将我的自动缩放组连接到我的 ecs 集群?

Amazon ECS 未扩展实例

AWS ECS Fargate 模式 - 自动扩展

在 AWS ECS 上的服务 Auto Scaling 中注册可扩展目标时出错