手动通过AWS CLI创建AMI时快照命名及自动删除问题求助
解决AWS CLI手动创建AMI时快照无标签/名称及自动删除问题
一、给自动生成的快照添加标签
AWS CLI的create-image命令默认仅为AMI本身添加标签,不会自动将标签同步到关联的快照,必须显式指定快照的标签配置。修改你的命令,在--tag-specifications中同时包含image和snapshot两种资源类型:
aws ec2 create-image \ --instance-id i-0e3a7bXXXXXXXXXX \ --name "EXT-XXXXXX-01" \ --description "1052024" \ --tag-specifications 'ResourceType=image,Tags=[{Key=Name,Value=EXT-XXXXX-01}]' 'ResourceType=snapshot,Tags=[{Key=Name,Value=EXT-XXXXX-01-SNAP},{Key=BackupType,Value=Manual},{Key=Description,Value="1052024 AMI Backup Snapshot"}]' \ --no-reboot
- 这里为快照指定了
Name标签(后缀加-SNAP区分)、BackupType和Description标签,你可以根据需求调整标签键值对。
二、实现快照的按需自动删除
手动创建的AMI及关联快照,无法直接通过生命周期策略自动清理,但可以通过以下两种方式实现按需删除:
方式1:CLI脚本批量清理
如果需要一次性清理指定标签的旧AMI和快照,可以编写如下脚本逻辑:
- 筛选出目标标签的AMI(例如
BackupType=Manual且创建时间超过N天):
OLD_AMIS=$(aws ec2 describe-images --owners self --filters "Name=tag:BackupType,Values=Manual" "Name=creation-date,Values=<$DATE_THRESHOLD" --query 'Images[*].ImageId' --output text)
- 注销这些AMI:
for AMI in $OLD_AMIS; do aws ec2 deregister-image --image-id $AMI done
- 筛选出关联的快照(通过标签匹配)并删除:
OLD_SNAPSHOTS=$(aws ec2 describe-snapshots --owner self --filters "Name=tag:BackupType,Values=Manual" "Name=start-time,Values=<$DATE_THRESHOLD" --query 'Snapshots[*].SnapshotId' --output text) for SNAP in $OLD_SNAPSHOTS; do aws ec2 delete-snapshot --snapshot-id $SNAP done
方式2:CloudWatch Events + Lambda 定时清理
如果需要定期自动清理,可以:
- 创建Lambda函数,编写代码(Python/Node.js均可),逻辑同上:筛选指定标签的旧AMI和快照,先注销AMI再删除快照。
- 配置CloudWatch Events规则,设置定时触发(例如每周日凌晨),调用该Lambda函数。
内容的提问来源于stack exchange,提问作者Reggie Alfaro
相关产品推荐
相关产品推荐

