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

如何删除创建时间超过30天的AWS AMI

实现保留30天的AMI备份清理策略

核心步骤说明

要从“删除前一天AMI”切换到“删除30天前的AMI”,需要分两步:生成30天前的标准日期,再通过JMESPath查询筛选出符合条件的AMI ID。

1. 生成30天前的UTC格式日期

AWS的AMI创建日期(CreationDate)采用UTC时区的ISO 8601格式(例如2024-05-20T08:30:00.000Z),先通过date命令生成对应的日期字符串:

THIRTY_DAYS_AGO=$(date -d "-30 days" --utc +%Y-%m-%dT%H:%M:%SZ)

2. 查询并获取30天前的AMI ID

修改原有的describe-images命令,使用JMESPath的条件筛选语法,只返回创建时间早于等于30天前的AMI ID:

OLD_AMI_IDs=$(/usr/bin/aws ec2 describe-images \
  --owners ########## \
  --filters "Name=tag:Backup,Values=TRUE" "Name=tag:InstanceID,Values=$I_ID" \
  --query "Images[?CreationDate <= '$THIRTY_DAYS_AGO'].ImageId" \
  --output text)
  • --query参数里的[?CreationDate <= '$THIRTY_DAYS_AGO']用于筛选符合日期条件的AMI,再提取ImageId字段
  • 保留原有的标签过滤条件,确保只清理目标实例的备份AMI

3. 批量删除旧AMI及关联快照

获取到旧AMI ID后,循环执行注销AMI和删除关联快照的操作(AMI注销后快照不会自动删除,需手动清理):

for ami_id in $OLD_AMI_IDs; do
  # 注销AMI
  aws ec2 deregister-image --image-id "$ami_id"
  # 获取关联的快照ID并删除
  snapshot_id=$(aws ec2 describe-images --image-id "$ami_id" --query "Images[0].BlockDeviceMappings[0].Ebs.SnapshotId" --output text)
  aws ec2 delete-snapshot --snapshot-id "$snapshot_id"
done

为什么之前的尝试无效?

你之前使用--query="Images[*].{date:CreationDate}"仅返回了创建日期,但没有结合日期对比条件筛选,也没有关联到需要删除的AMI ID。只有先生成标准对比日期,再通过JMESPath的条件表达式筛选,才能精准定位到需要清理的旧AMI。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:15:05