删除快照时出现以下错误。我想删除当前未被我的AWS AMI和其他实例使用的快照..我试过但是遇到了这个错误..
Traceback (most recent call last):
<path to error file>
EC2ResponseError: EC2ResponseError: 400 Bad Request
<?xml version="1.0" encoding="UTF-8"?><Response><Errors><Error><Code>InvalidSnapshot.InUse</Code><Message>The snapshot snap-xxxxxxxx is currently in use by ami-xxxxxxxx</Message></Error></Errors><RequestID>bbe55333-4acf-4ca7-9aa3-49307b189ca3</RequestID></Response>
答案 0 :(得分:2)
不幸的是,没有一个API可以直接从EBS快照获取AMI ID。
相反,你可以走另一条路。
ec2:DescribeImages
获取AMI图像列表。 编辑:另一种可能性:
您可以将ec2:DescribeImages
与EBS快照ID上的过滤器一起使用。
https://ec2.amazonaws.com/?Action=DescribeImages
&Filter.1.Name=block-device-mapping.snapshot-id
&Filter.1.Value=snap-xxxx
参考:http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html
答案 1 :(得分:2)
删除所有未使用的快照:
for s in $(comm -23 <(echo $(ec2-describe-snapshots --region ap-southeast-1 | grep SNAPSHOT | awk '{print $2}' | sort | uniq) | tr ' ' '\n') <(echo $(ec2-describe-images --region ap-southeast-1 | grep BLOCKDEVICEMAPPING | awk '{print $3}' | sort | uniq) | tr ' ' '\n') | tr '\n' ' ')
do
echo Deleting snapshot $s
ec2-delete-snapshot --region ap-southeast-1 $s
done
答案 2 :(得分:0)
1)检索所有快照,使用正则表达式在快照描述中搜索AMI-ID。
reAmi = re.compile('ami-[^ ]+')
snapshotImageId = reAmi.findall(snapshot.description)
2)检索所有AMI。检查在第一步中检索到的AMI-ID是否仍然存在,如果不存在,则不再需要与该特定AMI关联的快照。
完整代码已发布here
希望它有所帮助!!