程序化DNS

时间:2010-03-24 06:23:44

标签: dns amazon-ec2

我是一名长期开发人员,但对DNS不太熟悉。这是我的问题:

我们的应用程序在Amazon EC2上为客户端启动服务器。一个客户希望为每个启动的服务器使用自定义DNS,而不是AWS提供的普通长公共DNS:例如server-5.demo.ourclient.com,server-6.demo.ourclient.com。

从启动服务器并了解亚马逊公共DNS的应用程序中解决这一挑战的最简单/最干净/最好的方法是什么?我们也可以控制demo.ourclient.com ....

是否有适合API的托管解决方案?我们是否需要为* .demo.ourclient.com管理DNS服务器?

谢谢!

乍得

4 个答案:

答案 0 :(得分:3)

更好的方法是使用Route53,这是亚马逊的动态DNS服务:http://aws.amazon.com/documentation/route53/

答案 1 :(得分:2)

您可以尝试其中一项dynamic dns服务。这些允许您定义自己的主机名,例如machine1.dyndns.org,并将其附加到IP地址。您可以运行脚本来使用EC2提供的动态IP地址更新dyndns解析器。

答案 2 :(得分:0)

我真的不明白为什么你的客户不会在这里使用弹性IP或Elastic Load Balancer?

使用弹性IP ,您可以在公共DNS记录上保持一致的名称,然后在必要时使用elb API脚本手动或以编程方式更新与该EIP关联的EC2实例。

使用Elastic Load Balancer ,您可以轻松地将一个活动节点连接到ELB,然后可以通过编程方式删除/添加节点并相应地更新Route53。

您可以使用内部计算机的API在boostrap脚本中获取这些调用的值(实例ID等)。

答案 3 :(得分: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