2016-10-19 43 views
5

我已经使用SQS和ECS实施了Job Observer Pattern。作业描述被推送到SQS队列进行处理。作业处理在运行ECS Docker任务的Auto-Scaling Group内的ECS群集上运行。从零实例自动缩放ECS群集

每个ECS任务的作用:

    从SQS队列
  1. 上的数据执行作业(〜1小时)
  2. 删除消息
  3. 环路
  4. 读消息而有更多的消息

我想在每个实例没有更多工作时最终缩减群集,最终实现零实例。

看着this similar post,答案显示scale-in需要以某种方式在ASG之外处理。实例可以自我扩展,无论是通过明确的自我终止还是在没有更多消息时关闭ASG实例保护。

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

我是否限于自我缩放,每个实例只有一个任务?任何只能在实例的所有ECS任务都退出后终止的方法?还有其他的扩展选择吗?

+0

月底公布,你可以检查实例执行作业安装在你的情况下一个简单的应用程序?例如通过获取CPU /内存利用率? – Mahdi

回答

2

我最终使用:

  • A范围Out Policy添加与待处理SQS队列消息相同数量的实例
  • A范围在政策设置为零情况下,一旦SQS队列为空
  • 在批作业开始启用ASG实例保护,并在结束时禁用它

这限制了我的每一个批处理作业实例,但对我的场景运行良好。

2

对这个问题的另一个解决方案是AWS批服务在2016年