我是一名长期开发人员,但对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服务器?
谢谢!
乍得
答案 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