2013-10-15 52 views
1

我看了一下「describe_cluster_snapshots」從去年的解釋快照...發現使用博託

http://docs.pythonboto.org/en/latest/ref/redshift.html#boto.redshift.layer1.RedshiftConnection.create_cluster

它有一個選項START_TIME和END_TIME,但也沒有辦法對它進行排序。如何使用boto獲取最新快照的ID?

這是我試過的,但它似乎沒有返回上一個快照。

mysnap=conn.describe_cluster_snapshots() 

mysnapidentifier=mysnap['DescribeClusterSnapshotsResponse']['DescribeClusterSnapshotsResult']['Snapshots'][-1]['SnapshotIdentifier'] 

回答

1

無法在服務器端進行排序,因此您必須在客戶端進行排序。首先,從所述響應數據中提取快照數據的列表:

response = conn.describe_cluster_snapshots() 
snapshots = response['DescribeClusterSnapshotsResponse']['DescribeClusterSnapshotsResult']['Snapshots'] 

snapshots變量現在應該字典,其中每個字典表示一個快照的列表。這些字典中的每一個都會有一個名爲SnapshotCreateTime的密鑰,並且您想按該值對列表進行排序。你可以是這樣做的:

snapshots.sort(key=lambda d: d['SnapshotCreateTime']) 

這確實就地進行排序,以便您的名單將現在進行修改,以在該鍵的升序所有快照。現在,您可以只搶到最後一個項目在列表中:

mysnapidentifier = snapshots[-1]['SnapshotIdentifier'] 

我不使用紅移,所以我沒有現場數據來測試這一點,但我相信會給你想要的東西。

0

因爲我只是不得不這樣做同樣的事情對超過100個快照的集合,這裏有一個完整的解決方案:

def list_all_snapshots(conn, cluster, snap_type=None, marker=None): 
    response = conn.describe_cluster_snapshots(
      cluster_identifier=cluster, 
      snapshot_type=snap_type, 
      marker=marker 
      )['DescribeClusterSnapshotsResponse'] 
    result = response['DescribeClusterSnapshotsResult'] 
    snapshots = result['Snapshots'] 
    if result['Marker']: 
     snapshots += self.list_all_snapshots(conn, cluster, snap_type, result['Marker']) 
    return snapshots 

def pick_latest_snapshot(snapshots): 
    return max(snapshots, key=lambda x:x['SnapshotCreateTime'])