【问题标题】:boto3 Deleting ec2 Snapshots out of Listboto3 从列表中删除 ec2 快照
【发布时间】:2020-03-18 12:39:34
【问题描述】:

我正在创建一个 python 列表,其中存储了没有特定标签的快照 ID。是否可以自动删除列表中的所有快照?

for snapshot in snapshots.filter(OwnerIds=['self']):

    # checking if PSP is set
    if (not costreferencetag_isset_snapshot(snapshot)):

        tag_snapshot = str(snapshot.id)
        Snapshot_ID.append(tag_snapshot)

        continue
    else:
        costreference_snapshot = get_costreference_snapshot(snapshot)

        if costreference_snapshot not in managedpsp:

            tag_snapshot = str(snapshot.id)
            Snapshot_ID.append(tag_snapshot)
ec2.delete_snapshot(Snapshot_ID)

删除过程应该发生在代码示例的最后一行。 我现在无法真正对其进行测试,因为这会删除我目前仍需使用的快照。

列表为Snapshot_ID,仅存储我要删除的正确快照。

任何人都可以确认这会起作用吗?

【问题讨论】:

    标签: python amazon-web-services amazon-ec2 boto3 snapshot


    【解决方案1】:

    delete_snapshot() 方法只接受一个快照 ID。

    您必须通过快照 ID 列表循环它

    for s in Snapshot_ID:
       ec2.delete_snapshot(SnapshotId=s)
    

    或者删除它们而不是将它们附加到列表中

    for snapshot in snapshots.filter(OwnerIds=['self']):
    
        # checking if PSP is set
        if (not costreferencetag_isset_snapshot(snapshot)):
    
            tag_snapshot = str(snapshot.id)
            ec2.delete_snapshot(SnapshotId=tag_snapshot)
    
            continue
        else:
            costreference_snapshot = get_costreference_snapshot(snapshot)
    
            if costreference_snapshot not in managedpsp:
    
                tag_snapshot = str(snapshot.id)
                ec2.delete_snapshot(SnapshotId=tag_snapshot)
    

    注意:您可以指定DryRun=True 来验证它是否有效,而无需实际删除快照。

    【讨论】:

    • 非常感谢!我也可以在 for 循环中实现ec2.snapshot.delete() 吗?这样他就删除了循环的每个重复中的每个有效快照?所以这基本上就是你所说的......
    • 是的。您也可以删除主 for 循环中的快照,将 Snapshot_ID.append(tag_snapshot) 替换为 ec2.delete_snapshot(SnapshotId=tag_snapshot)
    • for snapshot in snapshots.filter(OwnerIds=['self']): if (not costreferencetag_isset_snapshot(snapshot)): ec2.snapshot.delete() continue else: costreference_snapshot = get_costreference_snapshot(snapshot) if costreference_snapshot not in managedpsp: ec2.snapshot.delete() 就这样?
    猜你喜欢
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    • 2015-05-05
    • 2016-08-30
    • 1970-01-01
    • 2011-07-30
    • 2016-10-28
    • 1970-01-01
    相关资源
    最近更新 更多