在 For 循环中使用过滤器 boto3 的快照 ID

snapshot id with filter boto3 within a For Loop

我正在尝试将每个快照 ID 传递到 for 循环并打印但无济于事,每次我都可以传递它只描述第一个快照并描述打印所有标签。

for snapshot in get_my_snapshots():
    print ('Snapshot ID is equal to', snapshot['id'])
    my_tag = ec2.describe_snapshots(Filters=[{'Name': 'tag:mytag', 'Values': ['TRUE']}])['Snapshots']
    print (my_tag)
    print('{:22} {:22}'.format(
        snapshot['id'],
        snapshot['description'],
        ))

我尝试了多种组合来从函数中传入快照 ID,但如下所示无济于事。

for snapshot in get_my_snapshots():
    print ('Snapshot ID is equal to', snapshot['id'])
    my_tag = ec2.describe_snapshots(SnapshotId=snapshot['id'], Filters=[{'Name': 'tag:mytag', 'Values': ['TRUE']}])['Snapshots']
    print (my_tag)
    print('{:22} {:22}'.format(
        snapshot['id'],
        snapshot['description'],
        ))

如何将快照 ID 传递到应用过滤器的描述中以获取每个快照的标签

能够使用下面的函数解决并在主体中调用 for 循环

def get_tag_snapshots():
'''
Get all tags.
'''
global region_tags
ec2 = boto3.client('ec2', region_name=region_tags)
snap_tag = ec2.describe_snapshots(Filters=[{'Name': 'tag:mytag', 'Values': ['TRUE']}])
print ('Snap Tag!!', snap_tag)
ls_snaptags=[]
for snapshot in snap_tag['Snapshots']:
    (ls_snaptags.append(snapshot['SnapshotId']))
    snap_tag_id = snapshot['SnapshotId']
    yield {
        'snap_id': snapshot['SnapshotId'],
    }
    print ("Snapshot with mytag = True !! ",snapshot['SnapshotId'])

感谢约翰的帮助

看来您的要求是:

  • 查找所有没有标签 mytag=TRUE
  • 的快照

最简单的方法是使用 if 语句来检查与快照关联的标签:

import boto3

ec2_client = boto3.client('ec2')

for snapshot in ec2_client.describe_snapshots(OwnerIds=['self'])['Snapshots']:
    if 'Tags' in snapshot:
        # Skip if mytag=TRUE
        if [tag for tag in snapshot['Tags'] if tag['Key'] == 'mytag' and tag['Value'] == 'TRUE']:
            continue
    print(snapshot['SnapshotId'])
    print(snapshot['Description'])

以上代码将打印 具有 mytag=TRUE.

标签的任何快照的 ID 和描述

能够使用上面的函数解析并在每个快照中调用 for 循环