2

我已经阅读了关于“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'] 
4

2 回答 2

2

无法在服务器端进行排序,因此您必须在客户端进行排序。首先,从响应数据中提取快照数据列表:

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

snapshots变量现在应该是一个字典列表,其中每个字典代表一个快照。这些字典中的每一个都有一个名为的键SnapshotCreateTime,您希望按该值对列表进行排序。你可以这样做:

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

这会进行就地排序,因此您的列表现在将被修改为所有快照按该键的升序排列。您现在可以抓取列表中的最后一项:

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

我不使用 Redshift,所以我没有实时数据来测试它,但我相信这会给你你想要的。

于 2013-10-23T13:25:49.137 回答
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'])
于 2014-07-24T16:04:52.433 回答