2012-04-10 6 views
36

हम ईसी 2 इंस्टेंस को इंगित करने के लिए रूट 53 DNS का उपयोग कर रहे हैं। क्या लोचदार आईपी या सीएनएन के बजाय, सीधे उदाहरण को इंगित करने के लिए रूट 53 प्राप्त करने का कोई तरीका है?आईपी या सीएनएन के बजाय एक उदाहरण के लिए रूट 53 बिंदु है?

  1. मैं एक आईपी जलाने के लिए नहीं करना चाहती:

    मैं इस के लिए कई कारण है।

  2. सीएनएन अविश्वसनीय हैं, क्योंकि यदि कोई उदाहरण नीचे चला जाता है और बैक अप आता है, तो पूरा नाम, ec2-X-X-X-X.compute-1.amazonaws.com बदल जाएगा।

  3. भविष्य में, मुझे प्रोग्राम्सेटिक रूप से उदाहरणों को स्पिन करना होगा और उन्हें सबडोमेन के साथ संबोधित करना होगा, और मुझे लोचदार आईपी या सीएनएन के साथ ऐसा करने का कोई आसान तरीका नहीं दिखता है।

सबसे अच्छा तरीका क्या है?

+3

शायद इसका उत्तर नहीं दिया जाएगा, लेकिन मुझे जवाब में भी रूचि है। अगर मेरे पास "example.com" है और मेरे अपने DNS सर्वर हैं, तो क्या मैं "foo.example.com" को ईसी 2 इंस्टेंस में भेज सकता हूं? –

+0

ठीक है, मेरे अपने मेटा-प्रश्न का उत्तर देने के लिए, मैंने अपने उदाहरण के लिए एक लोचदार आईपी सौंपा और फिर इसके लिए एक रिकॉर्ड बनाया। आप इंस्टेंस के सार्वजनिक DNS नाम के लिए एक CNAME रिकॉर्ड भी बना सकते हैं, लेकिन यह स्थिर नहीं है क्योंकि सार्वजनिक DNS नाम बदलता है जब आप इंस्टेंस को रोकते हैं और पुनरारंभ करते हैं। –

+5

दरअसल, एक बार जब आप लोचदार आईपी आवंटित करते हैं, तो आप सार्वजनिक DNS नाम की भविष्यवाणी कर सकते हैं जो बनाया जाएगा: ec2 - {{लोचदार आईपी}}। {{AWS AZ}}। Compute.amazonaws.com। यदि आप रूट 53 में उस DNS को एक नाम निर्दिष्ट करते हैं, तो आपको हमेशा उस ईआईपी को आवंटित करने के उदाहरण को सही ढंग से इंगित करना चाहिए। जब आप EC2 नेटवर्क के अंदर होते हैं और बाहरी सार्वजनिक लोचदार आईपी के बाहर होते हैं तो आंतरिक ईसी 2 आईपी को हल करने का इसका लाभ होता है। – jslatts

उत्तर

14

मैं इस समस्या का समाधान अपने ही लिखा था के बाद से मैं दूसरे दृष्टिकोण है कि यहाँ प्रस्तुत कर रहे थे वे नाखुश थे। अमेज़ॅन सीएलआई उपकरण का उपयोग करना अच्छा है, लेकिन वे अन्य अमेज़ॅन एपीआई पुस्तकालयों (उदाहरण के लिए रूबी) का उपयोग कर प्रत्यक्ष एपीआई कॉल की तुलना में धीमी गति से होते हैं।

यहां मेरे AWS Route53 DNS instance update गिस्ट का एक लिंक है। इसमें आईएएम नीति और रूबी स्क्रिप्ट शामिल है। आपको आईएएम पैनल में एक नया उपयोगकर्ता बनाना चाहिए, संलग्न नीति के साथ इसे अपडेट करें (इसमें अपनी ज़ोन आईडी के साथ) और रुबी स्क्रिप्ट में प्रमाण-पत्र और पैरामीटर सेट करें। आपके होस्टेड जोन में आपके उदाहरण के लिए पहला पैरामीटर होस्टनाम उपनाम है। उदाहरण के निजी होस्ट नाम <hostname>.<domain> पर एलियास है और उदाहरण के सार्वजनिक होस्ट नाम के लिए <hostname>-public.<domain>

अद्यतन एलियास किया गया: यहाँ होस्ट नामों को पंजीकृत जब उदाहरण के जूते AWS Route53 DNS instance update init.d script के लिए एक लिंक है। अगर एक ही फैशन में AWS Route53 DNS load-balancing का उपयोग करना चाहते हैं तो यहां एक और है।

+0

बेशक और यह एक अतिरिक्त संसाधन है जिसे आपको प्रबंधित करना है। इसका अलग उद्देश्य है। – kixorz

1

रूट 53 के साथ आप उर्फ ​​रिकॉर्ड है कि एक लचीला लोड बैलेंसर (ईएलबी) करने के लिए नक्शे बना सकते हैं:

http://docs.amazonwebservices.com/Route53/latest/DeveloperGuide/HowToAliasRRS.html

+4

यह समस्या का समाधान करने का एक महंगा तरीका है, क्योंकि इसकी आवश्यकता है और ईएलबी जिसके लिए आपको भुगतान करना है ... मैं वास्तव में हैरान हूं कि अमेज़ॅन इस सामान्य समस्या का समाधान नहीं प्रदान करता है !!! – Sdra

+5

एक समाधान है। आप एक लोचदार आईपी का उपयोग कर सकते हैं जो कि उपयोग में है तो मुक्त है। और यदि आपको उनमें से 5 से अधिक की आवश्यकता है, तो आप अपने खाते की सीमा बढ़ाने का अनुरोध कर सकते हैं। –

6

आप route53 का उपयोग कर से चिपके हैं, तो आप एक स्क्रिप्ट है कि के लिए CNAME रिकॉर्ड अपडेट कर सकते हैं उस घटना को हर बार रीबूट करता है। >http://cantina.co/automated-dns-for-aws-instances-using-route-53/ (प्रकटीकरण, मैं इस का निर्माण नहीं किया है, हालांकि मैं एक ऐसी ही स्थिति के लिए एक कूद बिंदु के रूप में यह प्रयोग किया जाता)

बेहतर अभी तक, इस वजह से आप प्रोग्राम दृष्टांत स्पिन करने में सक्षम होने का उल्लेख किया, -

यह देख दृष्टिकोण आपको उस अंत तक मार्गदर्शन करना चाहिए।

यह भी देखना ->http://docs.pythonboto.org/en/latest/index.html

0

मैंने aws EC2 इंस्टेंस पर कोशिश नहीं की है लेकिन इसे भी काम करना चाहिए। मैंने एक छोटा जावा प्रोग्राम लिखा है जो मशीन के सार्वजनिक आईपी का पता लगाता है और aws रूट 53 पर एक निश्चित रिकॉर्ड अपडेट करता है।

एकमात्र आवश्यकता यह है कि आपको अपने ईसी 2 इंस्टेंस पर जावा स्थापित करने की आवश्यकता है।

परियोजना https://github.com/renatodelgaudio/awsroute53 पर होस्ट की है और आप भी मामले में यह संशोधित करने के लिए स्वतंत्र हैं आप की जरूरत यह

आप इसे कॉन्फ़िगर कर सकता है बूट समय पर या एक crontab नौकरी के रूप में चलाने के लिए इतना है कि अपने रिकॉर्ड नई के साथ अपडेट कर सार्वजनिक आईपी इन Linux manual installation steps

0

क्लाउडवॉच, रूट 53 और लैम्ब्डा के संयोजन का उपयोग करना एक विकल्प भी है यदि आप रूट 53 में अपने डीएनएस के कम से कम हिस्से में होस्ट करते हैं। इसका लाभ यह है कि आपको उदाहरण पर चल रहे किसी भी एप्लिकेशन की आवश्यकता नहीं है।

इस दृष्टिकोण का उपयोग करने के लिए जब भी एक ईसी 2 इंस्टेंस की स्थिति चलने में बदलती है तो आप लैम्ब्डा फ़ंक्शन को ट्रिगर करने के लिए क्लाउडवॉच नियम कॉन्फ़िगर करते हैं। लैम्ब्डा फ़ंक्शन फिर इंस्टेंस के सार्वजनिक आईपी पते को पुनर्प्राप्त कर सकता है और रूट 53 में डीएनएस रिकॉर्ड अपडेट कर सकता है।

var AWS = require('aws-sdk'); 

var ZONE_ID = 'Z1L432432423'; 
var RECORD_NAME = 'testaws.domain.tld'; 
var INSTANCE_ID = 'i-423423ccqq'; 

exports.handler = (event, context, callback) => { 
    var retrieveIpAddressOfEc2Instance = function(instanceId, ipAddressCallback) { 
     var ec2 = new AWS.EC2(); 

     var params = { 
       InstanceIds: [instanceId] 
     }; 

     ec2.describeInstances(params, function(err, data) { 
      if (err) { 
       callback(err);     
      } else { 
       ipAddressCallback(data.Reservations[0].Instances[0].PublicIpAddress); 
      }    
     }); 
    } 

    var updateARecord = function(zoneId, name, ip, updateARecordCallback) { 
     var route53 = new AWS.Route53(); 

     var dnsParams = { 
       ChangeBatch: { 
        Changes: [ 
         { 
          Action: "UPSERT", 
          ResourceRecordSet: { 
           Name: name, 
           ResourceRecords: [ 
            { 
             Value: ip 
            } 
            ], 
            TTL: 60, 
            Type: "A" 
          } 
         } 
         ], 
         Comment: "updated by lambda" 
       }, 
       HostedZoneId: zoneId 
     }; 

     route53.changeResourceRecordSets(dnsParams, function(err, data) { 
      if (err) { 
       callback(err, data); 
      } else { 
       updateARecordCallback(); 
      }    
     }); 
    } 

    retrieveIpAddressOfEc2Instance(INSTANCE_ID, function(ip) { 
     updateARecord(ZONE_ID, RECORD_NAME, ip, function() { 
      callback(null, 'record updated with: ' + ip); 
     }); 
    }); 
} 

आप एक भूमिका Route53 में EC2 उदाहरणों और अद्यतन रिकॉर्ड वर्णन करने के लिए अनुमतियां हैं साथ लैम्ब्डा पर अमल करने की आवश्यकता होगी:

लैम्ब्डा कुछ इस तरह (Node.js क्रम का उपयोग करके) दिखाई दे सकता है।

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