2016-09-14 107 views
1

我试图运行boto3来循环14天以前的快照。 它可以找到14天以前的所有快照,并且我已经验证所有这些都可以正常工作。问题是当它通过字典试图删除时,它看起来像函数不正确地评估变量(见下文)。Boto3 - Delete_snapshot不评估变量

它似乎只是将其包含为一个字符串。

如果查找标签以查找准备删除的快照,循环将使用“for snapshot in ...”运行该字典。这里的 '如果' 部分:这里

if snap_start_time < expiry: # check if it's more than a <expiry> old 
    print "Deleting Snapshot: " + snapshot['SnapshotId'] 
    response = ec2client.delete_snapshot(
    SnapshotId=snapshot['SnapshotId'] 
    ) 

错误:

Deleting Snapshot: snap-f4f0079d 
Traceback (most recent call last): 
    File "./aws-snap.py", line 27, in <module> 
SnapshotId=snapshot['SnapshotId'] 
    File "/usr/lib/python2.6/site-packages/botocore/client.py", line 159, in _api_call 
    return self._make_api_call(operation_name, kwargs) 
    File "/usr/lib/python2.6/site-packages/botocore/client.py", line 494, in _make_api_call 
    raise ClientError(parsed_response, operation_name) 
botocore.exceptions.ClientError: An error occurred (InvalidSnapshot.NotFound) when calling the DeleteSnapshot operation: None 

任何线索? \ o/

+0

当您执行此代码或试图第二次删除快照时,快照是否已被删除? – helloV

+0

我非常怀疑它,否则它不会出现在脚本中的第一位。即,如果它已被删除,则它不会尝试再次删除它,因为它将无法找到它。编辑:只是检查,他们都还在那里。 :( –

回答

0

我怀疑SnapshotId可能不会作为字符串传递。 将SnapshotId更改为字符串格式并通过删除。 str(snapshot['SnapshotId'])

0

事实证明,从字典中直接引用是一个坏主意。它需要包装在str()中,并提供了DryRun = False选项。