我有多个AWS EC2实例在运行,我使用Route 53进行公共DNS。
我知道我可以将Route 53 DNS记录指向公共IP地址或实例的公有DNS名称。但是,无论何时启动或停止实例,这两个值都会更改,因此每次实例停止时,我都需要重新配置Route 53。
有没有办法通过实例名称,私有IP地址,私有DNS名称或其他标识符将AWS Route 53记录静态链接到EC2实例?
显然,要使DNS记录对公众有效,Route 53必须将新的DNS记录解析为公共IP地址或公共DNS名称。我只是希望Route 53将当前的公共IP地址替换为EC2实例,用于静态标识符,以便将DNS记录静态链接到EC2实例。
答案 0 :(得分:6)
您可以在启动时运行脚本....这是Python中的一个脚本:
import boto.route53
import requests
myMachine = "youralias"
myZone = "yourdomain.com."
myARecord = myMachine + "." + myZone
myPublicIP = requests.get("http://169.254.169.254/latest/meta-data/public-ipv4")
myCurrIP = myPublicIP.text
conn53 = boto.route53.connect_to_region("universal")
upd53 = conn53.get_zone(myZone)
exists = upd53.get_a(myARecord)
if exists:
upd53.update_a(myARecord, myCurrIP)
print "DNSLOG: " + myARecord + " updated to " + myCurrIP
else:
upd53.add_a(myARecord, myCurrIP)
print "DNSLOG: " + myARecord + " created: " + myCurrIP
请注意,您需要为有权更新Route53记录的实例使用EC2角色,或者您必须将AWS凭据添加到系统或脚本中。 (请参阅http://boto.readthedocs.org/en/latest/boto_config_tut.html获取相关帮助)。
AWS CLI中还有一个命令行我认为会这样做...运行:
aws route53 change-resource-record-sets help
查看格式。它需要一个JSON blob ...你可能必须删除然后创建,它似乎不是一个更新(我没有尝试过这种特殊的方法,所以不能肯定地说)。 / p>
答案 1 :(得分:1)
使用弹性IP地址并将其分配给您的EC2实例。配置Route 53以将DNS条目解析为这些IP地址。