python - instancia - ssh ec2 windows
Obtención de etiquetas de instancias de AWS con boto (4)
Estoy tratando de obtener etiquetas de instancias en mi cuenta de AWS usando la biblioteca boto de Python.
Mientras que este fragmento funciona correctamente, trae todas las etiquetas:
tags = e.get_all_tags()
for tag in tags:
print tag.name, tag.value
(e es una conexión EC2)
Cuando solicito etiquetas de instancias individuales,
print vm.__dict__[''tags'']
o
print vm.tags
Estoy obteniendo una lista vacía (vm es en realidad una clase de instancia).
El siguiente código:
vm.__dict__[''tags''][''Name'']
por supuesto resultados en:
KeyError: ''Name''
Mi código estuvo funcionando hasta ayer y, de repente, no puedo obtener las etiquetas de una instancia.
¿Alguien sabe si hay un problema con la API de AWS?
Debe asegurarse de que la etiqueta ''Nombre'' exista antes de acceder a ella. Prueba esto:
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)
imprimirá:
i-4e444444 [stopped]
Amazon Linux (i-4e333333) [running]
Intenta algo como esto:
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)
Debería ver todas las etiquetas asociadas con la instancia i-xxxxxxxx
impresas.
Para boto3 necesitarás hacer esto.
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)
Resultó ser un error en mi código. No consideré el caso de tener una instancia sin la etiqueta ''Nombre''.
Hubo una instancia sin la etiqueta "Nombre" y mi código estaba tratando de obtener esta etiqueta de cada instancia.
Cuando ejecuté este fragmento de código en una instancia sin la etiqueta ''Nombre'',
vm.__dict__[''tags''][''Name'']
Tengo: KeyError: ''Nombre''. vm es una instancia de AWS. Con las instancias que realmente tenían esta etiqueta establecida, no tuve ningún problema.
Gracias por su ayuda y perdón por preguntar cuando fue solo mi propio error.