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

如何按指定顺序高效删除AWS CloudFormation堆栈?

高效按序删除CloudFormation堆栈的实现方案

核心思路

直接用jq一次性完成堆栈名称的筛选和分组,避免多次调用AWS CLI或额外的文本处理工具,减少不必要的开销,同时严格按照需求的顺序执行删除。

优化后的脚本

# 一次性获取所有堆栈名称并按规则分组
read -r -d '' GROUP1 GROUP2 GROUP3 <<< "$(aws cloudformation describe-stacks | jq -r '
  # 定义需要最后删除的特殊堆栈列表
  def special_stacks: ["aws-infrastructure-users", "bootstrap-credentials-aws"];
  .Stacks[].StackName |
  # 分组:先筛选mmm开头的,再筛选ddd结尾的,最后是特殊堆栈和剩余其他
  if startswith("mmm") then . + "\tgroup1"
  elif endswith("ddd") then . + "\tgroup2"
  elif IN(special_stacks[]) then . + "\tgroup3"
  else . + "\tgroup3" end |
  # 按分组排序,确保group1先处理,然后group2,最后group3
  sort_by(.[-6:]) |
  # 拆分分组输出,用换行分隔每个分组内的堆栈,用空行分隔不同分组
  group_by(.[-6:])[] |
  map(split("\t")[0]) |
  join("\n")
')"

# 定义删除函数,复用逻辑
delete_stacks() {
  local stack_list="$1"
  if [ -z "$stack_list" ]; then return; fi
  for stack_name in $stack_list; do
    # 直接用堆栈名删除,无需额外查StackId(CLI支持用名称)
    aws cloudformation delete-stack --stack-name "$stack_name"
    echo "正在删除CloudFormation堆栈:$stack_name"
    aws cloudformation wait stack-delete-complete --stack-name "$stack_name"
  done
}

# 按顺序执行删除
delete_stacks "$GROUP1"
delete_stacks "$GROUP2"
delete_stacks "$GROUP3"

优化点说明

  • 减少CLI调用:仅调用一次aws cloudformation describe-stacks,避免循环内重复查询StackId(实际上删除堆栈直接用名称即可,无需StackId)
  • 纯jq处理分组:利用jq的字符串匹配和分组功能,一次性完成所有堆栈的分类排序,比grep加管道的组合更高效
  • 逻辑复用:封装删除函数,避免重复代码
  • 顺序严格可控:通过分组排序确保先处理mmm*开头的堆栈,再处理*ddd结尾的,最后处理特殊的基础设施用户、凭证类堆栈及剩余所有堆栈

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 00:54:34