puerto precio instancia elastic ec2 direccion costo change aws address abrir python amazon-web-services dns boto3 aws-ec2

python - precio - Recuperando dns públicos de instancia de EC2 con BOTO3



precio elastic ip amazon (1)

Estoy usando ipython para comprender Boto3 e interactuar con las instancias de EC2. Aquí está el código que estoy usando para crear una instancia:

import boto3 ec2 = boto3.resource(''ec2'') client = boto3.client(''ec2'') new_instance = ec2.create_instances( ImageId=''ami-d05e75b8'', MinCount=1, MaxCount=1, InstanceType=''t2.micro'', KeyName=<name_of_my_key>, SecurityGroups=[''<security_group_name>''], DryRun = False )

Esto inicia bien una instancia de EC2 y puedo obtener el nombre DNS público, la ip y otra información de la consola de AWS. Pero cuando trato de obtener el DNS público usando Boto, al hacer esto:

new_instance[0].public_dns_name

Devuelve citas en blanco. Sin embargo, otros detalles de la instancia, como:

new_instance[0].instance_type

Devuelve la información correcta.

¿Algunas ideas? Gracias.

EDITAR:

Entonces si lo hago:

def get_name(inst): client = boto3.client(''ec2'') response = client.describe_instances(InstanceIds = [inst[0].instance_id]) foo = response[''Reservations''][0][''Instances''][0][''NetworkInterfaces''][0][''Association''][''PublicDnsName''] return foo foo = get_name(new_instance) print foo

Luego devolverá el DNS público. Pero no tiene sentido para mí por qué tengo que hacer todo esto.


El objeto Instance que recuperas solo está hidratado con los atributos de respuesta de la llamada create_instances . Dado que el nombre DNS no está disponible hasta que la instancia haya alcanzado el estado en ejecución [1] , no estará presente inmediatamente. Imagino que el tiempo entre la creación de la instancia y la invocación de las instancias de descripción es suficiente para que comience la microinstancia.

import boto3 ec2 = boto3.resource(''ec2'') instances = ec2.create_instances( ImageId=''ami-f0091d91'', MinCount=1, MaxCount=1, InstanceType=''t2.micro'', KeyName=''<KEY-NAME>'', SecurityGroups=[''<GROUP-NAME>'']) instance = instances[0] # Wait for the instance to enter the running state instance.wait_until_running() # Reload the instance attributes instance.load() print(instance.public_dns_name)