通过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
相关产品推荐
相关产品推荐

