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

vis*_*l.k 4 python amazon-web-services boto3 aws-lambda

我已经写了一个删除旧快照的程序,但是对我来说现在的问题是如果快照附有一个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)
Run Code Online (Sandbox Code Playgroud)

vis*_*l.k 5

我自己解决了。这是代码:

    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
       try:
        if d.days>10:
           id = snapshot['SnapshotId']
           client.delete_snapshot(SnapshotId=id)
       except Exception,e:
        if 'InvalidSnapshot.InUse' in e.message:
           print "skipping this snapshot"
           continue
Run Code Online (Sandbox Code Playgroud)

  • 测试e.response ['Error'] ['Code']可能比e.message更好。 (2认同)