自动缩放ECS群集到零实例

时间:2016-10-19 06:08:13

标签: amazon-web-services autoscaling amazon-ecs

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

每个ECS任务都会:

  1. 从SQS队列中读取消息
  2. 执行数据作业(约1小时)
  3. 删除邮件
  4. 循环时有更多消息
  5. 我希望在每个实例没有更多工作时缩小群集,最终为零实例。

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

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

    我是否仅限于自我扩展,每个实例只有一个任务?一旦实例上的所有ECS任务退出,任何方式只能终止?还有其他任何缩小的替代品吗?

3 个答案:

答案 0 :(得分:3)

您可以使用CloudWatch Alarms with Actions

  

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

答案 1 :(得分:3)

我最终使用了:

  • 扩展策略,添加与待处理SQS队列消息相同数量的实例
  • 策略中的扩展,在SQS队列为空时设置为零实例
  • 在批处理作业开始时启用ASG实例保护并在结束时禁用它

这限制了我每个实例一个批处理作业,但对我的方案效果很好。

答案 2 :(得分:2)

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