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

如何批量删除AWS上的多个CloudFormation栈?

批量删除所有CloudFormation栈操作方案

执行删除操作前请务必确认待删除栈列表无需要保留的资源,CloudFormation删除操作会同步清除栈内所有创建的资源,该操作不可逆,生产环境请谨慎执行


操作步骤

1. 先过滤待删除栈列表做核对

原生aws cloudformation list-stacks默认会返回所有历史栈,包括已经处于DELETE_COMPLETE状态的已删除栈,直接调用删除会报错,所以首先要加状态过滤,只返回当前可删除的活跃栈。

先执行预览命令,确认待删除的栈列表符合预期:

无额外依赖版本(用AWS CLI自带query,不需要装jq)

aws cloudformation list-stacks \
  --stack-status-filter CREATE_COMPLETE UPDATE_COMPLETE UPDATE_ROLLBACK_COMPLETE CREATE_FAILED ROLLBACK_COMPLETE ROLLBACK_FAILED UPDATE_ROLLBACK_FAILED DELETE_FAILED \
  --query 'StackSummaries[].StackName' \
  --output text

用jq过滤版本(适合习惯用jq处理JSON输出的场景)

aws cloudformation list-stacks \
  --stack-status-filter CREATE_COMPLETE UPDATE_COMPLETE UPDATE_ROLLBACK_COMPLETE CREATE_FAILED ROLLBACK_COMPLETE ROLLBACK_FAILED UPDATE_ROLLBACK_FAILED DELETE_FAILED \
  | jq -r '.StackSummaries[].StackName'

核对上述命令输出的栈名列表,确认没有需要保留的栈之后再执行后续删除操作。如果存在嵌套栈,只需要保留最上层父栈即可,删除父栈时CloudFormation会自动递归删除所有关联子栈,无需单独处理子栈。

2. 执行批量删除

根据你使用的终端环境选择对应命令:

Bash/Zsh(Linux/macOS/Git Bash/WSL)

不需要等待删除完成的快速执行版本:

for stack in $(aws cloudformation list-stacks \
  --stack-status-filter CREATE_COMPLETE UPDATE_COMPLETE UPDATE_ROLLBACK_COMPLETE CREATE_FAILED ROLLBACK_COMPLETE ROLLBACK_FAILED UPDATE_ROLLBACK_FAILED DELETE_FAILED \
  --query 'StackSummaries[].StackName' \
  --output text); do
  echo "Submitting delete request for stack: $stack"
  aws cloudformation delete-stack --stack-name $stack
done

如果需要等待每个栈删除完成后再处理下一个,方便跟踪进度,可以加wait参数:

for stack in $(aws cloudformation list-stacks \
  --stack-status-filter CREATE_COMPLETE UPDATE_COMPLETE UPDATE_ROLLBACK_COMPLETE CREATE_FAILED ROLLBACK_COMPLETE ROLLBACK_FAILED UPDATE_ROLLBACK_FAILED DELETE_FAILED \
  --query 'StackSummaries[].StackName' \
  --output text); do
  echo "Submitting delete request for stack: $stack"
  aws cloudformation delete-stack --stack-name $stack
  echo "Waiting for stack $stack to be deleted..."
  aws cloudformation wait stack-delete-complete --stack-name $stack
  echo "Stack $stack deleted successfully"
done

Windows PowerShell

aws cloudformation list-stacks `
  --stack-status-filter CREATE_COMPLETE UPDATE_COMPLETE UPDATE_ROLLBACK_COMPLETE CREATE_FAILED ROLLBACK_COMPLETE ROLLBACK_FAILED UPDATE_ROLLBACK_FAILED DELETE_FAILED `
  --query 'StackSummaries[].StackName' `
  --output text | ForEach-Object { 
    Write-Host "Submitting delete request for stack: $_"
    aws cloudformation delete-stack --stack-name $_ 
  }

常见问题处理

  • 如果开启了栈终止保护,删除时会报错,只需要在delete-stack命令前加一行关闭保护的命令即可:
    aws cloudformation update-termination-protection --stack-name $stack --no-enable-termination-protection
    
  • 如果有栈删除失败,可以先排查失败原因(常见是资源有依赖、资源被手动修改过无法删除),处理完残留资源后重新执行上述批量命令即可,已经处于DELETE_COMPLETE的栈会被自动过滤不会重复处理。
  • 提交删除请求后可以到CloudFormation控制台查看每个栈的删除进度,不需要保持终端一直打开。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 06:03:37