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

通过CLI批量删除AWS Linux服务器的AMI及快照,含按年份删除需求咨询

在AWS Linux环境下批量删除AMI及快照(含指定年份筛选)

核心前提

  • 确保AWS CLI已在Linux服务器上安装并配置好足够权限:需要ec2:DescribeImages、ec2:DeregisterImage、ec2:DeleteSnapshot、ec2:DescribeSnapshots权限
  • 操作前建议先执行查询命令,确认目标AMI/快照范围,避免误删

一、删除指定年份(如2020年)创建的AMI

1. 查询并确认目标AMI

执行以下命令列出2020年创建的所有自有AMI(仅显示ImageId和创建时间):

aws ec2 describe-images --owners self --filters "Name=creation-date,Values=2020-*" --query 'Images[*].[ImageId,CreationDate]' --output table

说明:--owners self仅筛选当前账号下的AMI,若需包含共享AMI可移除该参数(但需确保有删除权限)

2. 批量注销AMI

将查询到的AMI批量注销,执行:

aws ec2 describe-images --owners self --filters "Name=creation-date,Values=2020-*" --query 'Images[*].ImageId' --output text | tr '\t' '\n' | while read image_id; do
  aws ec2 deregister-image --image-id $image_id
  echo "已注销AMI: $image_id"
done

二、删除AMI关联的快照

AMI注销后,其关联的快照不会自动删除,需单独处理:

1. 查询与2020年AMI关联的快照

aws ec2 describe-images --owners self --filters "Name=creation-date,Values=2020-*" --query 'Images[*].BlockDeviceMappings[*].Ebs.SnapshotId' --output text | tr '\t' '\n' | grep -v None > snapshot_ids.txt

说明:结果会保存到snapshot_ids.txt文件,可先查看确认

2. 批量删除快照

cat snapshot_ids.txt | while read snap_id; do
  aws ec2 delete-snapshot --snapshot-id $snap_id
  echo "已删除快照: $snap_id"
done

三、数千量级批量操作注意事项

  • 若一次性处理数千个资源,建议在脚本中加入延迟(如sleep 0.5),避免触发AWS API请求阈值限制
  • 可添加错误捕获逻辑,避免因单个资源失败导致整个脚本中断:
cat snapshot_ids.txt | while read snap_id; do
  if aws ec2 delete-snapshot --snapshot-id $snap_id; then
    echo "已成功删除快照: $snap_id"
  else
    echo "删除快照失败: $snap_id" >> delete_errors.log
  fi
  sleep 0.5
done
  • 对于跨区域的AMI/快照,需在命令中指定--region参数,或循环处理所有需要操作的区域

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 03:47:18