如果某个EC2实例正在执行某种处理任务,我希望通过Auto Scaling功能来阻止该实例被终止。
背景:
假设我有一个Auto Scaling组,当前有5个实例正在运行。
我对平均CPU使用率创建了一个警报...
假设其中4个实例处于空闲状态,而另一个实例正在进行一些繁重的处理任务...
平均CPU负载将触发警报,因此缩减规则将被执行。
我如何让Auto Scaling终止其中一个空闲的实例而不是那个正在执行处理任务的实例?
如果某个EC2实例正在执行某种处理任务,我希望通过Auto Scaling功能来阻止该实例被终止。
背景:
假设我有一个Auto Scaling组,当前有5个实例正在运行。
我对平均CPU使用率创建了一个警报...
假设其中4个实例处于空闲状态,而另一个实例正在进行一些繁重的处理任务...
平均CPU负载将触发警报,因此缩减规则将被执行。
我如何让Auto Scaling终止其中一个空闲的实例而不是那个正在执行处理任务的实例?
这种方法的一个障碍是SDK(例如boto)尚不支持生命周期挂钩管理,也没有适用于钩子的Cloud Formation资源。
相关的AWS文档在这里:
http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/AutoScalingGroupLifecycle.html
正如Ryan Walls所指出的那样(+1),AWS与此同时提供了实例保护以控制在缩小规模时Auto Scaling是否可以终止特定实例(请参见介绍性博客文章为Auto Scaling提供实例保护):
您可以在自动缩放组或个别自动缩放实例上启用实例保护设置。自动缩放启动实例时,实例会继承自动缩放组的实例保护设置。[...]
值得注意的是,此实例保护仅适用于常规Auto Scaling缩小规模事件:
实例保护无法保护Auto Scaling实例免受通过Amazon EC2控制台、terminate-instances命令或TerminateInstances API进行手动终止的影响。如果Auto Scaling实例失败并且必须被替换,则实例保护不能保护其免受终止的影响。此外,实例保护无法保护Auto Scaling组中的Spot实例免受中断的影响。
通常情况下,该功能可通过AWS管理控制台(菜单操作->实例保护->设置缩放保护),AWS CLI(set-instance-protection命令)和API(SetInstanceProtection API操作)获得。
后两个选项允许自动化当前情景,也就是说,在运行“重型处理”作业之前需要启用实例保护,并在完成后禁用实例保护,以便该实例再次有资格进行终止。
目前,Auto Scaling 的 Amazon EC2 实例不支持此功能。虽然您可以为自动缩放组的实例配置终止策略,但可用的策略中并没有包括这个(相当高级的)概念:
Auto Scaling 为您提供以下终止策略选项可供选择。您可以在终止策略中指定一个或多个选项。
OldestInstance - 如果您想终止您自动缩放组中最老的实例,请指定此选项。[...]
NewestInstance - 如果您想终止最近启动的实例,请指定此选项。[...]
OldestLaunchConfiguration - 如果您想终止使用最旧的启动配置启动的实例,请指定此选项。[...]
ClosestToNextInstanceHour - 如果您希望终止最接近完成计费小时的实例,请指定此选项。[...]
Default - 如果您想要 Auto Scaling 使用默认终止策略来选择实例进行终止,请指定此选项。
aws-cli是您最好的朋友..
在您的自动扩展组上禁用缩放策略。
使用aws-cli创建cron作业或计划任务以执行以下操作:
2a. 获取与自动扩展组关联的EC2实例 http://docs.aws.amazon.com/cli/latest/reference/autoscaling/describe-auto-scaling-instances.html
2b. 接下来,监视EC2实例上的CloudWatch统计信息 http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/US_SingleMetricPerInstance.html http://docs.aws.amazon.com/cli/latest/reference/cloudwatch/get-metric-statistics.html
2c. 从您的自动扩展组中终止空闲的EC2实例 http://docs.aws.amazon.com/cli/latest/reference/autoscaling/terminate-instance-in-auto-scaling-group.html
在这种情况下,由于您将处理终止,因此需要删除缩减策略。还可以参考另一个选项:https://dev59.com/O3fZa4cB1Zd3GeqPOS13#19628453。您可以使用类似的策略来摆脱负责处理计算密集型批处理的实例。一旦CPU空闲并且工作完成,终止实例并节省一些费用!