我已从...
中读到有关“describe_cluster_snapshots”的说明它有一个选项start_time和end_time但是没有办法对它进行排序。如何使用boto获取最新快照的ID?
这是我尝试过的,但它似乎没有返回上一个快照。
mysnap=conn.describe_cluster_snapshots()
mysnapidentifier=mysnap['DescribeClusterSnapshotsResponse']['DescribeClusterSnapshotsResult']['Snapshots'][-1]['SnapshotIdentifier']
答案 0 :(得分:1)
无法在服务器端完成排序,因此您必须在客户端进行排序。首先,从响应数据中提取快照数据列表:
response = conn.describe_cluster_snapshots()
snapshots = response['DescribeClusterSnapshotsResponse']['DescribeClusterSnapshotsResult']['Snapshots']
snapshots
变量现在应该是一个字典列表,其中每个字典代表一个快照。每个字典都有一个名为SnapshotCreateTime
的密钥,您希望按该值对列表进行排序。你可以这样做:
snapshots.sort(key=lambda d: d['SnapshotCreateTime'])
这会进行就地排序,因此现在可以修改列表,使所有快照按该键的升序排列。您现在可以抓住列表中的最后一项:
mysnapidentifier = snapshots[-1]['SnapshotIdentifier']
我不使用Redshift,因此我没有实时数据来测试,但我相信这会给你你想要的东西。
答案 1 :(得分: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'])