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.

Verifique si existe EC2 con Lambda Boto3.

Tengo 1 ID de instancia de lista de S3 y quiero verificar cada ID de instancia de S3 con el ID de instancia de los servicios EC2 para comprobar si existe EC2. ¿Podría ayudarme a aconsejarme alguna solución? Gracias.

def lambda_handler (event, context):

Obtenga toda la información de EC2: la lista actual en AWS

ins_inf = ec2_client.describe_instances()
para reservación en ins_inf[‘Reservations’]:
para ins_cur en reserva[‘Instances’]:
# Obtener todas las ID de instancia de EC2
ins_cur_id = ins_cur[“InstanceId”]
# Obtener la lista de ID de instancia de S3
para ins_f_s3 en line_stream(s3_objload.get()[‘Body’]):
#Eliminar /n
ins_f_s3_re = ins_f_s3.strip()
# Compare la ID de la instancia de S3 con la instancia actual ID en aws
si ins_cur_id == ins_f_s3_re:
imprimir (ins_f_s3_re + ‘encontrado’)
más:
imprimir(ins_f_s3_re + ‘no se encontró en aws ‘)

Y este es el resultado.

i-0a959c122fd51581e no se encontró en aws
i-0a959c122fd51581f no se encontró en aws
i-0a959c122fd51581e encontrado
i-0a959c122fd51581f no se encontró en aws

Quizás puedan ver que “i-0a959c122fd51581e” muestra 2 mensajes al comparar. No es correcto. ¿Alguien puede ayudarme en este caso? Muchas gracias.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema se debe al hecho de que el bucle recorre cada ID de instancia de S3 y cada instancia de EC2, por lo que si múltiples IDs de instancia de S3 coinciden con el mismo ID de instancia de EC2, se imprimirán múltiples mensajes.

    Una posible solución a este problema es crear una lista para almacenar los IDs de instancia coincidentes e imprimir el resultado después de que termine el bucle, así:

    def lambda_handler(event, context):
        # Obtener toda la información de EC2: la lista actual en AWS
        ins_inf = ec2_client.describe_instances()
        matched_ids = []
        for reservation in ins_inf['Reservations']:
            for ins_cur in reservation['Instances']:
                # Obtener todos los ID de instancia de EC2
                ins_cur_id = ins_cur["InstanceId"]
                # Obtener lista de ID de instancia de S3
                for ins_f_s3 in line_stream(s3_objload.get()['Body']):
                    # Eliminar /n
                    ins_f_s3_re = ins_f_s3.strip()
                    # Comparar ID de instancia de S3 con ID de instancia actual en AWS
                    if ins_cur_id == ins_f_s3_re:
                        matched_ids.append(ins_f_s3_re)
    
        # Imprimir los IDs de instancia coincidentes
        if matched_ids:
            print("Los siguientes IDs de instancia coinciden:")
            for id in matched_ids:
                print(id)
        else:
            print("No se encontraron instancias coincidentes.")
    

    De esta manera, el bucle solo imprimirá los IDs de instancia coincidentes una vez, después de recorrer todas las instancias de EC2 y los IDs de S3.

Comments are closed.