es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Añadiendo múltiples filtros en boto3.

Hola, tengo un requisito para obtener detalles de instancias ec2 con etiquetas como sigue:

prod = monitor

test = monitor

El objetivo es listar solo las instancias con estas etiquetas. Pude agregar un filtro, pero no estoy seguro de cómo usar varios filtros en ec2.instances.filter(Filtros).

from collections import defaultdict
import boto3

<h1>Conectarse a EC2</h1>

ec2 = boto3.resource('ec2')

<h1>Obtener información de todas las instancias en ejecución</h1>

running_instances = ec2.instances.filter(Filtros=[{
    'Name': 'instance-state-name',
    'Values': ['running'],
    'Name': 'tag:prod',
    'Values': ['monitor']}])

ec2info = defaultdict()
para instancia en running_instances:
    para etiqueta en instancia.tags:
        si 'Name' en tag['Key']:
            name = tag['Value']

# Agregar información de la instancia a un diccionario
ec2info[instance.id] = {
    'Name': name,
    'Type': instance.instance_type,
    'State': instance.state['Name'],
    'Private IP': instance.private_ip_address,
    'Public IP': instance.public_ip_address,
    'Launch Time': instance.launch_time
}

atributos = ['Name', 'Type', 'State', 'Private IP', 'Public IP', 'Launch Time']
para instance_id, instancia en ec2info.items():
    para clave en atributos:
        print("{0}: {1}".format(clave, instancia[clave]))
    print("------")
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para obtener detalles de la instancia EC2 con etiquetas prod = monitor y test = monitor, puedes utilizar el método ec2.instances.filter() junto con el parámetro Filters. Para implementar múltiples filtros, puedes agregar más diccionarios a la lista de Filters, cada uno representando un filtro único.

    Aquí hay un ejemplo de fragmento de código que demuestra cómo obtener detalles de la instancia EC2 con etiquetas prod = monitor y test = monitor:

    import boto3
    
    # Conectar a EC2
    ec2 = boto3.resource('ec2')
    
    # Obtener información de todas las instancias en ejecución con etiquetas prod=monitor y test=monitor
    filters = [
        {'Name': 'instance-state-name', 'Values': ['running']},
        {'Name': 'tag:prod', 'Values': ['monitor']},
        {'Name': 'tag:test', 'Values': ['monitor']}
    ]
    
    instances = ec2.instances.filter(Filters=filters)
    
    # Imprimir detalles de la instancia
    for instance in instances:
        print('ID de la instancia:', instance.id)
        print('Tipo de instancia:', instance.instance_type)
        print('Estado:', instance.state['Name'])
        print('Dirección IP privada:', instance.private_ip_address)
        print('Dirección IP pública:', instance.public_ip_address)
        print('Tiempo de lanzamiento:', instance.launch_time)
        print('Etiquetas:', instance.tags)
        print('---------------------------------------')
    

    En el código anterior, estamos creando una lista de Filters que contiene tres diccionarios. El primer diccionario filtra las instancias que están en estado de ejecución, y los otros dos diccionarios filtran las instancias que tienen las etiquetas prod=monitor y test=monitor.

    Luego, utilizamos el método ec2.instances.filter() con el parámetro Filters para obtener las instancias que coinciden con todos los filtros.

    Finalmente, iteramos sobre las instancias y imprimimos sus detalles, incluyendo las etiquetas.

Comments are closed.