EC2 Тег имени и его положение - PullRequest
0 голосов
/ 29 мая 2020

У меня есть этот код, он работает, но вскоре я понял, что стандарты - это не то, чем мы занимаемся. В моем коде я получаю значение тегов для «Имя». Однако, как я это делаю, я предполагаю, что это первый тег в позиции 0. Я ошибаюсь. Как я могу сделать его более надежным, чтобы просто искать значение ключа Name, не имеющее отношения к позиции?

 response = client.describe_instances(Filters=[{'Name':'tag-key','Values':['Name']}]) 

for item in response['Reservations']:
    #pprint(item['Instances'])
        print("AWS Account ID: {}".format(item['OwnerId']))
        for instance_id in item['Instances']:
            #print(instance_id)
            Tags = instance_id['Tags'][0]['Value']
            State = instance_id['State']['Name']
            print("EC2 Name: {}".format(Tags))
            print("Instance Id is: {}\nInstance Type is: {}".format(instance_id['InstanceId'],instance_id['InstanceType']))

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Для более новой версии Pythoni c:

response = ec2_client.describe_instances()

for reservation in response['Reservations']:
    for instance in reservation['Instances']:
        if name := [tag['Value'] for tag in instance['Tags'] if tag['Key'] == 'Name']:
            print(name[0])

Или с использованием методов ресурсов:

ec2_resource = boto3.resource('ec2')

for instance in ec2_resource.instances.all():
    if name := [tag['Value'] for tag in instance.tags if tag['Key'] == 'Name']:
        print(name[0])

(требуется Python 3.8)

1 голос
/ 29 мая 2020

Один из способов - итерация по Tags и поиск тега с Key из Name:

for item in response['Reservations']:

        print("AWS Account ID: {}".format(item['OwnerId']))

        for instance_id in item['Instances']:

            Tags = instance_id['Tags']

            tag_name_value = ""

            for tag in Tags:
                if tag['Key'] == "Name":
                    tag_name_value = tag["Value"]
                    break

            State = instance_id['State']['Name']

            print("EC2 Name: {}".format(tag_name_value))
            print("Instance Id is: {}\nInstance Type is: {}".format(
                    instance_id['InstanceId'],instance_id['InstanceType']))
...