practices instancia home ec2 conexion conectar best aws python amazon-web-services boto instances

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.