python(boto3)程序删除aws中的旧快照

时间:2018-01-06 04:28:18

标签: python amazon-web-services aws-lambda boto3

我已经编写了一个删除旧快照的程序。但现在问题是,如果快照附加了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)

2 个答案:

答案 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