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

Posted

技术标签:

【中文标题】将 AWS Route 53 DNS 记录静态链接到 EC2 实例【英文标题】:Statically link AWS Route 53 DNS record to EC2 instance 【发布时间】:2014-12-23 05:31:48 【问题描述】:

我有多个 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 将 EC2 实例的当前公共 IP 地址替换为它可能用于将 DNS 记录静态链接到 EC2 实例的任何静态标识符。

【问题讨论】:

【参考方案1】:

你可以在启动时运行一个脚本....这是 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...您可能必须先删除然后再创建,似乎没有更新(我没有尝试过那种特殊的方法,所以不能肯定地说)。

【讨论】:

【参考方案2】:

使用弹性 IP 地址并将它们分配给您的 EC2 实例。配置 Route 53 以将您的 DNS 条目解析为这些 IP 地址。

【讨论】:

以上是关于将 AWS Route 53 DNS 记录静态链接到 EC2 实例的主要内容,如果未能解决你的问题,请参考以下文章

如何创建到 ALB 的 Route 53 记录? (AWS)

AWS Route53 之 加权记录配置

AWS Elastic Beanstalk 和 Route 53 域链接 - “未找到 DNS”

AWS Route53 故障转移和 chrome DNS 缓存

使用 Terraform 创建多个 DNS Route53 A 记录

使用 Shopify 商店设置时 Route53 DNS 无法解析