क्लाउडवॉच, रूट 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 क्रम का उपयोग करके) दिखाई दे सकता है।
शायद इसका उत्तर नहीं दिया जाएगा, लेकिन मुझे जवाब में भी रूचि है। अगर मेरे पास "example.com" है और मेरे अपने DNS सर्वर हैं, तो क्या मैं "foo.example.com" को ईसी 2 इंस्टेंस में भेज सकता हूं? –
ठीक है, मेरे अपने मेटा-प्रश्न का उत्तर देने के लिए, मैंने अपने उदाहरण के लिए एक लोचदार आईपी सौंपा और फिर इसके लिए एक रिकॉर्ड बनाया। आप इंस्टेंस के सार्वजनिक DNS नाम के लिए एक CNAME रिकॉर्ड भी बना सकते हैं, लेकिन यह स्थिर नहीं है क्योंकि सार्वजनिक DNS नाम बदलता है जब आप इंस्टेंस को रोकते हैं और पुनरारंभ करते हैं। –
दरअसल, एक बार जब आप लोचदार आईपी आवंटित करते हैं, तो आप सार्वजनिक DNS नाम की भविष्यवाणी कर सकते हैं जो बनाया जाएगा: ec2 - {{लोचदार आईपी}}। {{AWS AZ}}। Compute.amazonaws.com। यदि आप रूट 53 में उस DNS को एक नाम निर्दिष्ट करते हैं, तो आपको हमेशा उस ईआईपी को आवंटित करने के उदाहरण को सही ढंग से इंगित करना चाहिए। जब आप EC2 नेटवर्क के अंदर होते हैं और बाहरी सार्वजनिक लोचदार आईपी के बाहर होते हैं तो आंतरिक ईसी 2 आईपी को हल करने का इसका लाभ होता है। – jslatts