2016-09-14 96 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選項。