You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何删除CloudFormation栈时自动终止Auto Scaling Group关联的EC2实例

解决CloudFormation删除栈时Auto Scaling Group实例无法自动终止的问题

核心原因

你的Auto Scaling Group(ASG)配置了NewInstancesProtectedFromScaleIn: true,这会让实例处于缩容保护状态,CloudFormation尝试删除ASG时,无法自动终止受保护的实例,导致删除操作超时失败。另外,默认情况下ASG删除时不会主动将期望容量调整为0,这也会阻碍实例的自动终止。

解决方案

方法1:调整ASG的删除与更新策略

在ASG资源中添加删除前自动调整容量的配置,确保删除流程先将实例缩容至0:

修改后的ASG模板片段:

ECSAutoScalingGroup:
  Type: AWS::AutoScaling::AutoScalingGroup
  DependsOn:
    - ECSCluster
    - EC2Role
  Properties:
    VPCZoneIdentifier: !Ref SubnetIds
    LaunchTemplate:
      LaunchTemplateId: !Ref ContainerInstances
      Version: !GetAtt ContainerInstances.LatestVersionNumber
    MinSize: 0
    MaxSize: !Ref MaxSize
    DesiredCapacity: !Ref DesiredCapacity
    NewInstancesProtectedFromScaleIn: true
  UpdatePolicy:
    AutoScalingReplacingUpdate:
      WillReplace: 'true'
    # 添加删除前自动缩容的规则
    AutoScalingRollingUpdate:
      MinInstancesInService: 0
      MaxBatchSize: !Ref MaxSize
  DeletionPolicy: Delete

方法2:移除缩容保护(按需选择)

如果你的场景不需要实例缩容保护,可以直接关闭该配置,这样CloudFormation删除ASG时能自动终止所有实例:

# 将原配置中的这一行改为false或删除
NewInstancesProtectedFromScaleIn: false

方法3:应急手动处理(针对已卡住的栈)

如果栈已经处于删除失败的状态,可以先手动操作清理:

  • 进入Auto Scaling控制台,找到目标ASG,将DesiredCapacity设为0
  • 手动移除实例的缩容保护(若开启)
  • 等待所有实例终止后,重新发起CloudFormation栈删除操作

关键注意事项

  • NewInstancesProtectedFromScaleIn适合运行核心业务的实例,但在测试环境或需要自动清理的场景中,建议关闭或在删除流程中自动移除保护
  • CloudFormation只有在ASG的所有关联实例都终止后,才能成功删除ASG资源,因此删除前将期望容量调至0是核心解决步骤

内容的提问来源于stack exchange,提问作者Adel Tahir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 18:07:07