如何通过Auto Scaling阻止EC2实例终止?

Sun*_*ark 15 amazon-ec2 amazon-web-services autoscaling

如果该实例处于某种处理阶段,我想通过Auto Scaling功能阻止EC2实例终止.

背景:
假设我有一个Auto Scaling组,目前有5个实例正在运行.我创建一个平均CPU使用率的警报...假设有4个实例处于空闲状态,而且其中一个正在进行一些繁重的处理......平均CPU负载将触发警报,因此缩减策略将执行.

如何让Auto Scaling终止其中一个空闲实例而不是处理中间的实例?

Ste*_*pel 9

更新

正如Ryan Walls(+1)所述,AWS同时提供实例保护 来控制Auto Scaling是否可以在扩展时终止特定实例(请参阅介绍博客文章Instance Protection for Auto Scaling for a walk through):

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

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

实例保护不会通过Amazon EC2控制台,terminate-instances命令或TerminateInstances API保护Auto Scaling实例免于手动终止.如果Auto Scaling实例未通过运行状况检查并且必须更换,则实例保护不会保护Auto Scaling实例不被终止.此外,实例保护不会保护Auto Scaling组中的Spot实例免受中断.

像往常一样,该功能可通过AWS管理控制台(菜单操作 - >实例保护 - >设置保护范围)),AWS CLI(set-instance-protection命令)和API(SetInstanceProtection API操作)获得.

后两个选项允许手头的场景自动化,即需要在运行"繁重处理"作业之前启用实例保护,并在完成后禁用实例保护,以便实例再次符合终止条件.


初步答复

此功能目前不适用于自动缩放亚马逊EC2实例-而你的确能够配置为您自动缩放集团[一]实例终止政策,在现有政策不包括这样的(相当先进)的概念:

Auto Scaling提供以下终止策略选项供您选择.您可以在终止策略中指定一个或多个这些选项.

  • OldestInstance - 如果希望终止Auto Scaling组中最旧的实例,请指定此项.[...]

  • NewestInstance - 如果要终止上次启动的实例,请指定此项.[...]

  • OldestLaunchConfiguration - 如果希望终止使用最早的启动配置启动的实例,请指定此项.[...]

  • ClosestToNextInstanceHour - 如果希望终止最接近完成计费小时的实例,请指定此项.[...]

  • 默认 - 如果希望Auto Scaling使用默认终止策略选择终止实例,请指定此选项.


ner*_*rff 9

我刚刚使用相对较新的生命周期钩子功能成功处理了自动缩放组中长时间运行的作业问题.

在我的例子中,尝试选择空闲节点终止的问题在于,选择空闲节点的进程将与向节点提交工作的进程竞争.在这种情况下,最好使用一种策略,任何节点都可以终止,但终止正常,这样就不会丢失任何工作.然后,您可以使用所有标准自动缩放策略来管理扩展和扩展.

终止生命周期钩子允许用户(或进程)在节点被自动缩放组置于中间状态(标记为终止:等待)之后对节点执行操作.然后,用户(或进程)负责通过AWS API调用完成生命周期操作,从而导致关闭已终止的EC2实例.

简而言之,我设置它的方式是:

  • 创建一个允许自动扩展以将消息发布到SQS队列的角色.
  • 为终止消息创建SQS队列.
  • 创建在每个节点中作为服务运行的监视器脚本.我的脚本是一个简单的事件驱动状态机,它按顺序从MONITORING(轮询SQS以获取节点的终止消息)转换为DRAINING(轮询作业队列直到节点上没有工作)到TERMINATED(完成) - 生命周期电话).
  • 事件驱动的AWS自动缩放的标准配置; 也就是说,创建CloudWatch警报以及用于扩展和向外扩展的自动扩展策略.

这种方法的一个障碍是SDK中尚不支持生命周期钩子管理(至少,不支持它AFAIK),也没有用于钩子的Cloud Formation资源.

相关的AWS文档在此处:

http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/AutoScalingGroupLifecycle.html


Rya*_*lls 6

亚马逊终于以更简单的方式解决了这个问题.现在有"实例保护",您可以将实例标记为受保护,并且在"缩放"期间不会终止它.

请参阅https://aws.amazon.com/blogs/aws/new-instance-protection-for-auto-scaling