为何我的Auto Scaling Group会遗留旧Launch Template的实例?
针对你遇到的ASG未按预期终止旧Launch Template(LT)实例的问题,以下是几个常见的排查方向:
终止策略优先级冲突:ASG的终止策略是按顺序执行的,若你同时启用了
AvailabilityZoneRebalance策略,它会优先于OldestLaunchTemplate生效。当AZ间实例数不平衡时,ASG会先调整AZ平衡,可能会终止新LT实例来满足分布要求。检查ASG的终止策略列表,确保OldestLaunchTemplate是最高优先级,且没有被其他策略抢占执行顺序。实例LT版本标记异常:ASG通过实例的
LaunchTemplateId和LaunchTemplateVersion属性判断所属LT。如果新实例被错误标记为旧LT版本,或旧实例的标记被意外修改,会导致ASG识别错误。执行aws ec2 describe-instances --instance-ids <实例ID>命令,检查实例的LaunchTemplate字段,确认每个实例对应的LT版本是否正确。实例健康状态未完全就绪:若缩容操作过早触发,新实例还未被ASG标记为
InService(或处于Unhealthy状态),ASG可能会优先终止这些未稳定的新实例。确保缩容前,所有新实例都通过了ELB健康检查和ASG自定义健康检查,状态稳定为InService。旧实例开启了实例保护:如果旧实例被设置了
ProtectedFromScaleIn的实例保护,ASG无法终止这些旧实例,只能选择终止未受保护的新实例。通过aws autoscaling describe-auto-scaling-instances --instance-ids <实例ID>检查旧实例的InstanceProtection配置。AZ间新旧实例分布不均:即使扩容倍数等于AZ数量,若原有AZ实例分布不平衡,扩容后新实例可能集中在某个AZ。缩容时ASG为了维持AZ平衡,会优先从实例较多的AZ选择终止对象,哪怕该AZ里是新LT实例。扩容后先检查各AZ的新旧实例数量,确保每个AZ至少有1个旧实例和1个新实例,再执行缩容。
LT版本指定不明确:如果切换ASG到新LT时使用了
$Default或$Latest动态版本,而非固定版本号,后续LT的更新可能导致ASG对实例归属的判断混淆。确认ASG关联的是新LT的固定版本号,避免动态版本带来的识别问题。
内容的提问来源于stack exchange,提问作者John Kelly III

