我已经编写了一个删除旧快照的程序。但现在问题是,如果快照附加了ami,那么它就不会被删除,程序也会停止。它会显示以下消息:
botocore.exceptions.ClientError:调用DeleteSnapshot操作时发生错误(InvalidSnapshot.InUse):ami-12345正在使用快照snap-12345678
我希望程序单独跳过这些快照并继续删除其他快照。这是我的代码:
import boto3
import datetime
client = boto3.client('ec2',region_name='us-west-1')
snapshots = client.describe_snapshots(OwnerIds=['12345678'])
for snapshot in snapshots['Snapshots']:
a= snapshot['StartTime']
b=a.date()
c=datetime.datetime.now().date()
d=c-b
if d.days>10:
id = snapshot['SnapshotId']
client.delete_snapshot(SnapshotId=id)
答案 0 :(得分:5)
我自己解决了。这是代码:
{{1}}
答案 1 :(得分:1)
感谢Vishal,这正是我入门所需要的。由于合规性要求,我做了一些调整。我添加了一个例外,以将所有备份的StartTime日期设置为当月1日。我还添加了一个例外,以保留最早的快照。
import boto3
import datetime
client = boto3.client('ec2',region_name='us-west-1')
snapshots = client.describe_snapshots(OwnerIds=['111111111111'])
def lambda_handler(event, context):
for snapshot in snapshots['Snapshots']:
a=snapshot['StartTime']
b=a.date()
c=datetime.datetime.now().date()
d=c-b
f=a.day
excludeDate=datetime.datetime.strptime('2018-1-10', '%Y-%m-%d').date()
try:
if d.days>30 and f!=1 and b!=excludeDate:
id = snapshot['SnapshotId']
client.delete_snapshot(SnapshotId=id)
except Exception,e:
if 'InvalidSnapshot.InUse' in e.message:
print "skipping this snapshot"
continue