2010-03-24 36 views
4

我是一個很長時間的開發人員,但對DNS並不很有經驗。這是我的問題:程序化DNS

我們的應用程序在客戶端啓動亞馬遜EC2上的服務器。一個客戶端想要爲每個啓動的服務器使用自定義DNS,而不是使用AWS提供的常規長公共DNS:例如server-5.demo.ourclient.com,server-6.demo.ourclient.com。

從啓動服務器並知道亞馬遜公共DNS的應用程序內解決這個挑戰的最簡單/最乾淨/最好的方法是什麼?我們也可以控制demo.ourclient.com以及...

是否有很好的託管API解決方案?我們是否需要爲* .demo.ourclient.com管理DNS服務器?

謝謝!

乍得

回答

2

你可以嘗試dynamic dns服務之一。這些允許您定義自己的主機名稱,例如machine1.dyndns.org並將其附加到IP地址。您可以運行腳本來使用EC2提供的動態IP地址更新dyndns解析器。

+0

謝謝史蒂夫。還發現dnsmadeeasy.com - 甜。 – Chad 2010-03-25 17:01:38

+0

DynDNS.org/Dyn.com有一個很好的頁面,它將爲您創建配合inadyn和ddclient使用的配置文件,爲您節省了解決如何設置它們的麻煩。我將它與EC2實例和ddclient一起使用,完全沒有問題。 https://account.dyn.com/tools/clientconfig.html(該URL要求您已經登錄到您的帳戶) – 2013-10-02 13:09:24

0

我真的不明白,爲什麼你的客戶就不會在這裏要麼使用彈性IP,或者彈性負載均衡?

使用彈性IP,您可以在公共DNS記錄上保留一致的名稱,然後使用elb API腳本在必要時手動或以編程方式更新與該EIP關聯的EC2實例。

使用Elastic Load Balancer,您可以輕鬆地將一個活動節點連接到ELB,然後可以編程方式刪除/添加節點並相應地更新Route53。

您可以使用內部機器的API在boostrap腳本中獲取這些調用的值(實例ID等)。

0

此代碼獲取您的ip,然後將其設置爲route53。您必須提供變量DOMAIN和HOSTED_ZONE_ID。你可以在啓動時運行它。如果你不想依靠ifconfig.co,而是做

DOMAIN="desired.domain.com" 
HOSTED_ZONE_ID="..." 

# ANYWHERE, but relies on ifconfig.co 
MYIP=$(curl -s ifconfig.co) 

# ON EC2: 
MYIP=$(curl -s curl 169.254.169.254/latest/meta-data/public-ipv4) 

# create json to send to route53 
cat > /tmp/actual_ip.json <<EOF 
{ 
     "Comment": "Update the A record set", 
     "Changes": [ 
       { 
         "Action": "UPSERT", 
         "ResourceRecordSet": { 
           "Name": "$DOMAIN", 
           "Type": "A", 
           "TTL": 300, 
           "ResourceRecords": [ 
             { 
               "Value": "$MYIP" 
             } 
           ] 
         } 
       } 
     ] 
} 
EOF 

# update the dns entry 
if ! /usr/local/bin/aws route53 change-resource-record-sets --hosted-zone-id $HOSTED_ZONE_ID --change-batch file:///tmp/actual_ip.json; then 
    echo "error calling aws $?" 
fi