2016-01-11 6 views
7

Я использую ipython, чтобы получить представление о Boto3 и взаимодействовать с экземплярами EC2. Вот код, я использую для создания экземпляра:Получение публичных dns экземпляра EC2 с BOTO3

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 
    ) 

Это запускает экземпляр EC2 прекрасно, и я могу получить имя общественного DNS, IP и другую информацию из консоли AWS. Но, когда я пытаюсь получить публичный DNS с помощью Boto, выполните следующие действия:

new_instance[0].public_dns_name 

Возвращает пустые кавычки. Тем не менее, данные других инстанций, такие как:

new_instance[0].instance_type 

Возвращает правильную информацию.

Любые идеи? Благодарю.

EDIT:

Так что, если я делаю:

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 

Затем он возвращает общественное DNS. Но для меня не имеет смысла, зачем мне все это делать.

ответ

10

Возвращаемый объект Instance только увлажнен с атрибутами ответа от вызова create_instances. Поскольку DNS-имя недоступно до тех пор, пока экземпляр не достигнет состояния [1], он не будет немедленно присутствовать. Я предполагаю, что время между созданием экземпляра и вызовом описать экземпляры достаточно долго для запуска микрокарта.

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) 

 Смежные вопросы

  • Нет связанных вопросов^_^