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("------")
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:
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.