2011-09-23 13 views
42

रीबूट पर एक अमेज़ॅन ईसी 2 इंस्टेंस के आईपी पते को कैसे ढूंढें, अमेज़ॅन इंस्टेंस के आईपी पते में परिवर्तन होता है। जावा एपीआई का उपयोग कर नया आईपी पता कैसे खोजें?रीबूट

+0

आप एक निश्चित लोचदार आईपी क्यों नहीं सौंपते हैं ? – okrasz

उत्तर

4

मान लें कि आप एक लचीला आईपी पते आवंटित करने के लिए नहीं करना चाहते हैं (और वहाँ कारण हैं यह हमेशा एक समाधान नहीं है) तो बस रिबूट उदाहरण हैं, जिनमें से एक गुच्छा रिटर्न पर DescribeInstances फोन सार्वजनिक आईपी पते सहित जानकारी।

इस विषय पर AWS EC2 Java API Documentation है।

+0

मैंने आपको आठ-बिट-गुरु को उखाड़ फेंक दिया। क्या आप तुरंत एलैस्टिकिप को जोड़ने के लिए आखिरी बनाए गए इंस्टेंस के इंस्टेंस आईडी प्राप्त करने के किसी भी आसान तरीके से जानते हैं? मेरे ज्ञान के लिए इसे 'ec2-run-instances' से लौटाई गई जानकारी को पार्स करना होगा या' aws ec2 रन-इंस्टेंस 'से वापसी JSON के साथ बैश का उपयोग करके JSON को पार्स करना होगा। अतिरिक्त निर्भरताओं से बचने की कोशिश कर रहा है। – JohnAllen

+0

उपरोक्त 'DescribeInstances' कमांड को स्पष्ट करने के लिए, मैं इसका उपयोग करना चाहता हूं:' aws ec2 वर्णन-उदाहरण | grep "वैल्यू \ | PublicIpAddress" '(बेशक आपको aws cli इंस्टॉल की आवश्यकता होगी) – modulitos

+0

धन्यवाद, गुमनाम डाउनवॉटर। मेरे छः वर्षीय स्वीकृत उत्तर को दंडित करके थोड़ा सा मेरे प्रतिनिधि को कम करने का आपका कारण इतना स्पष्ट रूप से स्पष्ट है कि कोई टिप्पणी की आवश्यकता नहीं है! –

0

उदाहरण को रीबूट करने और स्क्रैच से लॉन्च नहीं करने से आप एक लोचदार आईपी असाइन कर सकते हैं जो हमेशा ec2 इंस्टेंस के साथ रहता है (जब तक कि आप आईपी को दूसरे सर्वर पर नहीं ले जाते)। यह आपको अपने सभी DNS को उस आईपी पर इंगित करने की अनुमति देता है और चिंता न करें कि रीबूट आपको समस्याएं देगा।

मुझे लगता है कि आपकी पूछताछ क्या है लेकिन अन्य चीजें हैं जो आप पूछ सकते हैं। सर्वर का आंतरिक आईपी बदलता है (यदि आप आवृत्ति को रीबूट नहीं करते हैं) और आप इसे 'आरक्षित' नहीं कर सकते हैं, तो आपको नया आईपी रखने के लिए आपको एक स्क्रिप्ट बनाने की आवश्यकता हो सकती है (यदि आपकी ओर इशारा करते हुए आंतरिक सेवाएं)।

आशा व्यक्त की कि मदद करता है

97

रीबूट पर, ईसी 2 उदाहरण के आईपी पते परिवर्तन नहीं करते हैं। वे आम तौर पर गैर-वीपीसी ईबीएस बूट इंस्टेंस के स्टॉप/स्टार्ट पर बदलते हैं।

अपने संबंधित सवाल यहाँ करने के लिए अपने जवाब देखें:

https://stackoverflow.com/questions/7533871/difference-between-rebooting-and-stop-starting-an-amazon-ec2-instance

कहा, आप अपने विशेष भाषा में DescribeInstances के लिए API कॉल के माध्यम से निजी और सार्वजनिक IP पते पा सकते हैं।

आप उदाहरण पर ही कर रहे हैं, तो आप भी सरल HTTP का उपयोग कर उपयोगकर्ता के डेटा एपीआई के माध्यम से IP पते पा सकते हैं:

http://instance-data/latest/meta-data/local-ipv4 
http://instance-data/latest/meta-data/public-ipv4 

उदाहरण के लिए,

wget -qO- http://instance-data/latest/meta-data/public-ipv4 

Elastic IP addresses के लिए सिफारिश कर रहे हैं किसी विशेष सेवा या सर्वर के लिए बाहरी (स्थिर) बाहरी आईपी पते का सामना करना। स्टॉप/स्टार्ट के बाद इन्हें दोबारा आवंटित करने की आवश्यकता है (लेकिन रीबूट के बाद नहीं)।

+1

यह एक ठोस पूर्ण उत्तर है। "Wget" विशिष्ट सही उत्तर प्रदान करता है और आसपास के गद्य भी सहायक/उपयोगी है। – javadba

47
curl http://169.254.169.254/latest/meta-data/public-ipv4 
+1

यह स्वीकार्य उत्तर होना चाहिए, और वे दस्तावेज़ों में जो भी कहते हैं वह भी है। http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing.html – jontsai

+1

वह अजीब आईपी क्या है? क्या यह अज्ञात आईपी को किसी के सर्वर से कॉल करने का सुरक्षा खतरा है? : डी मैं एक संपादन कि आईपी समझा सुझाव दिया और लगता है कि यह स्वीकार नहीं किया गया –

+0

@RavindranathAkila नहीं, तो आप इस आदेश अपने EC2 उदाहरण –

3

यह कैसे मैं एक Ubuntu 12.04 EC2 उदाहरण पर यह किया एक VPC के भीतर है:

curl ifconfig.me 

यकीन है कि क्यों, लेकिन सार्वजनिक-आईपीवी 4 मेटा डेटा यूआरएल के तहत नहीं मिला था नहीं

+1

मैं इस कोशिश की अंदर से उपयोग कर सकते हैं: यह कोई जवाब नहीं CentOS 7 – javadba

+0

वर्क्स के साथ लटका हुआ है यह वास्तव में बेहतर काम किया। उपर्युक्त उत्तर/सार्वजनिक-आईपीवी 4 हाल ही में काम कर रहा था, अगर एडब्ल्यूएस ने कुछ बदल दिया या ईएलबी के माध्यम से यातायात को सीमित कर दिया तो कोई फर्क नहीं पड़ता, लेकिन मुझे अपने लोचदार आईपी दोनों उदाहरणों पर वापस रिपोर्ट कर रही थी। कर्ल चेकिप ने हालांकि यह सही ढंग से किया, एक पर मेरा लोचदार आईपी और दूसरे पर एक यादृच्छिक असाइन किया गया। –

1

उदाहरण के सार्वजनिक आईपी को लाने के लिए आपको पहले उस उदाहरण की इंस्टेंस आईडी प्राप्त करने की आवश्यकता है। आप निम्नलिखित जावा कोड का उपयोग करके इंस्टेंस की इंस्टेंस आईडी प्राप्त कर सकते हैं।

List<Instance> instances = runInstancesResult.getReservation().getInstances(); 

String instanceId = instances.get(0).toString().substring(13, 23); 

और अब सार्वजनिक आईपी प्राप्त करने के लिए आप निम्नलिखित जावा कोड का उपयोग कर सकते हैं।

public void fetchInstancePublicIP() { 
    DescribeInstancesRequest request = new DescribeInstancesRequest().withInstanceIds("i-d99ae7d2"); 
    DescribeInstancesResult result= ec2.describeInstances(request); 
    List <Reservation> list = result.getReservations(); 

    for (Reservation res:list) { 
     List <Instance> instanceList= res.getInstances(); 

     for (Instance instance:instanceList){ 

       System.out.println("Public IP :" + instance.getPublicIpAddress());  
       System.out.println("Public DNS :" + instance.getPublicDnsName()); 
       System.out.println("Instance State :" + instance.getState()); 
       System.out.println("Instance TAGS :" + instance.getTags()); 
     }  
    } 
} 
1

उनके पास उपयोग कक्षा है जो ईसी 2 मेटाडेटा तक पहुंच की सुविधा प्रदान करती है। उदाहरण के लिए

EC2MetadataUtils.getNetworkInterfaces().get(0).getPublicHostname(); 
EC2MetadataUtils.getNetworkInterfaces().get(0).getPublicIPv4s(); 
0

आप इसका उपयोग कर सकते हैं।

   var ipofnewServer = string.Empty;  
       while (string.IsNullOrEmpty(ipofnewServer)) 
       { 
        var statusRequest1 = new DescribeInstancesRequest 
        { 
         InstanceIds = new List<string>() { instanceId } 
        }; 

        var result = amazonEc2client.DescribeInstances(statusRequest1); 
        var status = result.Reservations[0].Instances.FirstOrDefault(); 
        if (status != null) 
        { 
         ipofnewServer = status.PublicIpAddress; 
        } 
       } 
30

सार्वजनिक IPv4 पता तो जैसे भी EC2 उदाहरण से उपलब्ध है:

curl checkip.amazonaws.com 

और सार्वजनिक होस्ट नाम है:

dig -x $(curl -s checkip.amazonaws.com) +short 
+1

पर –

संबंधित मुद्दे