Подтвердить что ты не робот

Получение тегов из экземпляров AWS с помощью boto

Я пытаюсь получить теги из экземпляров в моей учетной записи AWS, используя библиотеку boto Python.

Пока этот фрагмент работает правильно, принося все теги:

    tags = e.get_all_tags()
    for tag in tags:
        print tag.name, tag.value

(e - соединение EC2)

Когда я запрашиваю теги из отдельных экземпляров,

    print vm.__dict__['tags']

или

    print vm.tags

Я получаю пустой список (vm на самом деле является классом экземпляра).

Следующий код:

    vm.__dict__['tags']['Name']

конечно, результат:

KeyError: 'Name'

Мой код работал до вчерашнего дня, и вдруг я не могу получить теги из экземпляра.

Кто-нибудь знает, есть ли проблема с AWS API?

4b9b3361

Ответ 1

Вы должны быть уверены, что перед тем, как обратиться к нему, существует тег 'Name'. Попробуйте следующее:

import boto.ec2
conn=boto.ec2.connect_to_region("eu-west-1")
reservations = conn.get_all_instances()
for res in reservations:
    for inst in res.instances:
        if 'Name' in inst.tags:
            print "%s (%s) [%s]" % (inst.tags['Name'], inst.id, inst.state)
        else:
            print "%s [%s]" % (inst.id, inst.state)

напечатает:

i-4e444444 [stopped]
Amazon Linux (i-4e333333) [running]

Ответ 2

Попробуйте что-то вроде этого:

import boto.ec2

conn = boto.ec2.connect_to_region('us-west-2')
# Find a specific instance, returns a list of Reservation objects
reservations = conn.get_all_instances(instance_ids=['i-xxxxxxxx'])
# Find the Instance object inside the reservation
instance = reservations[0].instances[0]
print(instance.tags)

Вы должны увидеть все теги, связанные с экземпляром i-xxxxxxxx.

Ответ 3

Для boto3 вам нужно будет сделать это.

import boto3
ec2 = boto3.resource('ec2')
vpc = ec2.Vpc('<your vpc id goes here>')
instance_iterator = vpc.instances.all()

for instance in instance_iterator:
    for tag in instance.tags:
        print('Found instance id: ' + instance.id + '\ntag: ' + tag)

Ответ 4

Это оказалось ошибкой в ​​моем коде. Я не рассматривал случай наличия одного экземпляра без тега 'Name'.

Был один экземпляр без тега "Имя", и мой код пытался получить этот тег из каждого экземпляра.

Когда я запускал этот фрагмент кода в экземпляре без тега 'Name',

vm.__dict__['tags']['Name']

Я получил: KeyError: 'Name'. vm - это экземпляр AWS. С экземплярами, на самом деле имевшими этот набор тегов, у меня не было проблем.

Спасибо за вашу помощь и извините за вопрос, когда это была только моя собственная ошибка.