将AWS Route 53 DNS记录静态链接到EC2实例

XDR*_*XDR 3 dns ip-address amazon-ec2 amazon-web-services amazon-route53

我有多个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实例的任何静态标识符.

Tra*_*ero 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
Run Code Online (Sandbox Code Playgroud)

请注意,您需要为具有更新Route53记录权限的实例使用EC2角色,或者您必须将AWS凭据添加到系统或脚本中.(请参阅http://boto.readthedocs.org/en/latest/boto_config_tut.html获取相关帮助).

AWS CLI中还有一个命令行,我认为可以这样做...运行:

aws route53 change-resource-record-sets help 
Run Code Online (Sandbox Code Playgroud)

看格式.它需要一个JSON blob ...你可能必须删除然后创建,似乎没有更新(我没有尝试过那种特殊的方法所以不能肯定地说).