我想通过Auto Scaling功能阻止EC2实例终止,如果该实例处于某种处理中间。

背景:
假设我有一个Auto Scaling组,当前有5个实例在运行。
我创建了有关平均CPU使用率的警报...
假设其中4个实例处于空闲状态,其中一个正在执行大量处理...
平均CPU负载将触发警报,结果将执行缩小策略。

如何获得Auto Scaling来终止一个空闲实例,而不是正在处理中的实例?

最佳答案

更新资料

作为noted by Ryan Walls(+1),AWS同时提供Instance Protection来控制Auto Scaling在扩展时是否可以终止特定实例(请参阅入门博客文章Instance Protection for Auto Scaling以获得逐步了解):


您可以在Auto Scaling上启用实例保护设置
组或单个Auto Scaling实例。自动缩放时
启动实例,该实例继承实例保护
Auto Scaling组的设置。 [...]


值得注意的是,此实例保护仅适用于事件中的常规Auto Scaling缩放比例:


实例保护不能保护Auto Scaling实例免受
通过Amazon EC2控制台进行手动终止,
Terminate-instances命令或TerminateInstances API。实例
保护不能防止Auto Scaling实例终止
如果未通过健康检查,则必须更换。另外,实例
保护不能保护Auto Scaling组中的竞价型实例
从中断。


与往常一样,可以通过AWS管理控制台(菜单操作->实例保护->设置保护级别),AWS CLI(set-instance-protection命令)和API(SetInstanceProtection API操作)使用此功能。

后两个选项允许自动化当前的方案,即一个需要在运行“繁重的处理”作业之前启用实例保护,并在实例完成后禁用实例保护,以使实例有资格再次终止。



初步答案

此功能当前不适用于Auto Scaling实例的Amazon EC2-尽管您确实能够Configure [an] Instance Termination Policy for Your Auto Scaling Group,但available policies并不包含这样的(相当高级的)概念:


Auto Scaling为您提供以下终止策略选项
从中选择。您可以在自己的计算机中指定一个或多个这些选项
终止政策。


OldestInstance-如果要终止Auto Scaling组中的最旧实例,请指定此选项。 [...]
NewestInstance-如果要终止最后启动的实例,请指定此选项。 [...]
OldestLaunchConfiguration-如果要使用最早的启动配置启动实例,请指定此项
终止。 [...]
ClosestToNextInstanceHour —如果要使最接近完成计费时间的实例为该值,请指定此项
终止。 [...]
默认值-如果您希望Auto Scaling使用默认终止策略选择要终止的实例,请指定此选项。

08-07 12:17