在 AWS EC2 Spot 队列中实施保护规模

Implement scale in protection in AWS EC2 Spot fleet

我们想使用 Spot Fleet 来管理执行批处理作业的 EC2 实例扩展。一种激进的规模化方法被证明可以移除正在执行作业的机器,从而触发重新启动作业的作业恢复过程。最终结果是完成工作所花的时间超过预期。 我们还希望采取积极的政策规模来降低总体成本。

一个可能的解决方案是控制实例的终止方式(除了价格方面)。尽管 Spot Fleet 并未正式提供与 ASG 类似的 "scale in protection",但有什么解决办法吗?

您可以以编程方式请求通过减员减少组的大小——减少组的大小,然后当实例自行终止时,它们不会被替换——通过将超额容量终止策略设置为不终止容量过剩的实例。

you can request that the Spot fleet keep the fleet at its current size, but not replace any Spot instances that are interrupted or that you terminate manually.

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-requests.html#modify-spot-fleet

实例可以在不调用 API 的情况下通过告诉 OS 关闭机器(例如 sudo halt)来在内部自行终止。 Spot 实例不能处于 Stopped 状态,因此与按需实例的默认行为(实例仅停止)不同,Spot 实例在此操作时终止。