我想实现一种基于实例的EC2标签更新Route53 DNS的自动方式。
想象一下,我可以有一个名为dns_name的标签名称,它应该记录机器的预期dns名称。
如果我关闭机器,升级它并重新启动它,我确实希望更新DNS而不必更改任何内容。
我不想在计算机上安装DNS更新服务,因为这需要我将AWS凭据放在所有VM上,并将其部署到它们。
使用AWS EC2标签声明预期名称似乎要容易得多。 cron作业可以轻松检查更改并更新DNS。
有没有人实现这个?
答案 0 :(得分:1)
我强烈建议使用Elastic IP' s。这是他们的确切目的。对于此实施,请转到EC2
=> Network & Security
=> Elastic IP
=> Allocate New Address
=> Actions
=> Associate Address
=> (选择您正在寻找的实例标签名称)
将EIP
复制到剪贴板,然后转到Route53
=> Create Hosted Zone
=>去想那些步骤=> Go to Record Sets
=> Create Record Set
=>对于Name:
,您可以拥有www.
或不是=> Type: A - IPv4
=> Alias: NO
=> TTL:
无论你喜欢什么=> Value:
您的EIP
地址 => Save Record Set
如果您的实例与弹性IP相关联,则可以重启,交换,停止,更新,更改,变形,无论您想要什么! EIP不会去任何地方。
<强>更新强> 您可以通过Route53 API自动完成所有这些操作。 这些是执行此操作的步骤,因为您必须知道该过程才能使用API调用。
答案 1 :(得分:1)
计算机上的DNS更新服务不需要AWS凭据。您最好使用AWS IAM实例配置文件。我已经使用此方法在服务器启动时运行脚本,以使用最新的IP地址更新Route53记录。
如果要在单个服务器上安排cron,该服务器根据实例标签处理更新所有服务器的Route53记录,那么这当然是可能的。它只是几行代码。
答案 2 :(得分:0)
我正在尝试完全按照我的想法做。
我发现此链接中的脚本是一个很好的起点。
#!/bin/bash
# Extract information about the Instance
INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id/)
AZ=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone/)
MY_IP=$(curl -s http://169.254.169.254/latest/meta-data/public-ipv4/)
# Extract tags associated with instance
ZONE_TAG=$(aws ec2 describe-tags --region ${AZ::-1} --filters "Name=resource-id,Values=${INSTANCE_ID}" --query 'Tags[?Key==`AUTO_DNS_ZONE`].Value' --output text)
NAME_TAG=$(aws ec2 describe-tags --region ${AZ::-1} --filters "Name=resource-id,Values=${INSTANCE_ID}" --query 'Tags[?Key==`AUTO_DNS_NAME`].Value' --output text)
# Update Route 53 Record Set based on the Name tag to the current Public IP address of the Instance
aws route53 change-resource-record-sets --hosted-zone-id $ZONE_TAG --change-batch '{"Changes":[{"Action":"UPSERT","ResourceRecordSet":{"Name":"'$NAME_TAG'","Type":"A","TTL":300,"ResourceRecords":[{"Value":"'$MY_IP'"}]}}]}'