python - बीओटीओ 3 के साथ ईसी 2 उदाहरण के सार्वजनिक डीएनएस को पुनः प्राप्त करना



amazon-web-services dns (1)

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

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

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

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


आपके द्वारा वापस प्राप्त होने वाला Instance ऑब्जेक्ट केवल create_instances कॉल से प्रतिक्रिया विशेषताओं के साथ हाइड्रेटेड है। चूंकि उदाहरण चल रहे राज्य [1] तक पहुंच गया है, जब तक DNS नाम उपलब्ध नहीं है, यह तुरंत उपस्थित नहीं होगा। मैं समय के बारे में कल्पना करता हूं कि आप उदाहरण बनाते हैं और शुरू करने के लिए सूक्ष्म उदाहरण के लिए उदाहरणों का वर्णन करते हैं।

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)




aws-ec2