2016-01-11 5 views
7

के साथ ईसी 2 उदाहरण के सार्वजनिक डीएनएस को पुनर्प्राप्त करना मैं आईटी 2 उदाहरणों के साथ बातचीत करने और ईटी 2 उदाहरणों के साथ बातचीत करने के लिए आईपीथॉन का उपयोग कर रहा हूं। यहाँ कोड मैं एक उदाहरण बनाने के लिए उपयोग कर रहा हूँ है:बीओटीओ 3

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 नाम, एडब्ल्यूएस कंसोल से आईपी और अन्य जानकारी प्राप्त कर सकते हैं। लेकिन, जब मैं, सार्वजनिक डीएनएस Boto का उपयोग कर पाने के लिए ऐसा करने से प्रयास करें:

new_instance[0].public_dns_name 

रिटर्न खाली उद्धरण। फिर भी, अन्य उदाहरण विवरण, जैसे:

new_instance[0].instance_type 

सही जानकारी देता है।

कोई विचार? धन्यवाद।

संपादित करें:

तो अगर मैं करता हूँ:

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 

तो यह सार्वजनिक डीएनएस वापस आ जाएगी। लेकिन यह मुझे समझ में नहीं आता है कि मुझे यह सब करने की ज़रूरत क्यों है।

उत्तर

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) 
संबंधित मुद्दे