簡體   English   中英

使用 python3 和 boto3 獲取最新的 aws 卷快照 ID

[英]get the latest aws volume snapshot-id using python3 and boto3

我是pythonboto3 ,我想獲取最新的快照 ID。

我不確定我是否使用 lambda 正確編寫了排序以及如何訪問最后一個快照,或者我可以在打印snapshot_idsnapshot_date時使用腳本的第一部分來完成?

謝謝。

這是我的腳本

import boto3
ec2client = mysession.client('ec2', region_name=region)
ec2resource = mysession.resource('ec2', region_name=region)

def find_snapshots():
    for snapshot in ec2client_describe_snapshots['Snapshots']:
        snapshot_volume = snapshot['VolumeId']
        mnt_vol = "vol-xxxxx"
        if mnt_vol == snapshot_volume:
            snapshot_date = snapshot['StartTime']
            snapshot_id = snapshot['SnapshotId']
            print(snapshot_id)
            print(snapshot_date)

find_snapshots()

snapshots = ec2resource.snapshots.filter(Filters=[{'Name': 'volume-id', 'Values': [mnt_vol]}]).all()
print(snapshots)
snapshots = sorted(snapshots, key=lambda ss:ss.start_time)
print(snapshots)
snapshot_ids = map(lambda ss:ss.id, snapshots)
print(snapshot_ids)

last_snap_id = ?

輸出:

snap-05a8e27b15161d3d5
2016-12-25 05:00:17+00:00
snap-0b87285592e21f0
2016-12-25 03:00:17+00:00
snap-06fa39b86961ffa89
2016-12-24 03:00:17+00:00

ec2.snapshotsCollection(ec2.ServiceResource(), ec2.Snapshot)
[]
<map object at 0x7f8d91ea9cc0>

*將問題更新為@roshan 答案:

def find_snapshots():
    list_of_snaps = []
    for snapshot in ec2client_describe_snapshots['Snapshots']:
        snapshot_volume = snapshot['VolumeId']
        if mnt_vol == snapshot_volume:
            snapshot_date = snapshot['StartTime']
            snapshot_id = snapshot['SnapshotId']
            list_of_snaps.append({'date':snapshot['StartTime'], 'snap_id': snapshot['SnapshotId']})
    return(list_of_snaps)

find_snapshots()

print(find_snapshots())

#sort snapshots order by date
newlist = sorted(list_to_be_sorted, key=lambda k: k['name'])  
print(newlist)

輸出:

[{'date': datetime.datetime(2016, 12, 25, 14, 23, 37, tzinfo=tzutc()), 'snap_id': 'snap-0de26a40c1d1e53'}, {'date': datetime.datetime(2016, 12, 24, 22, 9, 34, tzinfo=tzutc()), 'snap_id': 'snap-0f0341c53f47a08'}]

Traceback (most recent call last):
  File "test.py", line 115, in <module>
    newlist = sorted(list_to_be_sorted, key=lambda k: k['name'])  
NameError: name 'list_to_be_sorted' is not defined

如果我做:

list_to_be_sorted = (find_snapshots())
print(list_to_be_sorted)
#sort snapshots order by date
newlist = sorted(list_to_be_sorted, key=lambda k: k['snap_id'])
print(newlist[0])

最新的快照不會出現在輸出中:

{'date': datetime.datetime(2016, 12, 23, 3, 0, 18, tzinfo=tzutc()), 'snap_id': 'snap-0225cff1675c369'}

這是最新的:

[{'date': datetime.datetime(2016, 12, 25, 5, 0, 17, tzinfo=tzutc()), 'snap_id': 'snap-05a8e27b15161d5'}

如何獲取最新快照 ( snap_id )?

謝謝

你應該以reverse順序排序。

sorted(list_to_be_sorted, key=lambda k: k['date'], reverse=True)[0]

按日期對列表進行排序(按升序 - 從最舊到最新)如果添加reverse=True ,則按降序排序(從最新到最舊)。 [0]返回列表中的第一個元素,即最新的快照。

如果您想要最新快照的snap_id ,只需訪問該密鑰。

sorted(list_to_be_sorted, key=lambda k: k['date'], reverse=True)[0]['snap_id']
def find_snapshots():
    list_of_snaps = []
    for snapshot in ec2client_describe_snapshots['Snapshots']:
    snapshot_volume = snapshot['VolumeId']
    mnt_vol = "vol-xxxxx"
    if mnt_vol == snapshot_volume:
        snapshot_date = snapshot['StartTime']
        snapshot_id = snapshot['SnapshotId']
        list_of_snaps.append({'date':snapshot['StartTime'], 'snap_id': snapshot['SnapshotId']})
        print(snapshot_id)
        print(snapshot_date)

    #sort snapshots order by date
    newlist = sorted(list_of_snaps, key=lambda k: k['date'], reverse= True)
    latest_snap_id = newlist[0]['snap_id']
    #The latest_snap_id provides the exact output snapshot ID
    print(latest_snap_id)

最后一行需要是這樣的:

newlist = sorted(list_of_snaps, key=lambda k: k['snap_id'])

您可以將快照附加到列表中,然后根據日期對列表進行排序

def find_snapshots():
    list_of_snaps = []
    for snapshot in ec2client_describe_snapshots['Snapshots']:
    snapshot_volume = snapshot['VolumeId']
    mnt_vol = "vol-xxxxx"
    if mnt_vol == snapshot_volume:
        snapshot_date = snapshot['StartTime']
        snapshot_id = snapshot['SnapshotId']
        list_of_snaps.append({'date':snapshot['StartTime'], 'snap_id': snapshot['SnapshotId']})
        print(snapshot_id)
        print(snapshot_date)

    #sort snapshots order by date
    newlist = sorted(list_to_be_sorted, key=lambda k: k['name'])  

希望能幫助到你 !!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM