Получение тегов из экземпляров 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?
Ответы
Ответ 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.
С экземплярами, на самом деле имевшими этот набор тегов, у меня не было проблем.
Спасибо за вашу помощь и извините за вопрос, когда это была только моя собственная ошибка.