从 Amazon Route 53 导出 DNS 区域文件
Posted
技术标签:
【中文标题】从 Amazon Route 53 导出 DNS 区域文件【英文标题】:Exporting DNS zonefile from Amazon Route 53 【发布时间】:2013-12-18 17:15:28 【问题描述】:我想从我的 Amazon Route 53 设置中导出一个 DNS 区域文件。这是可能的,还是只能手动创建区域文件? (例如通过http://www.zonefile.org/?lang=en)
【问题讨论】:
已经在这里回答serverfault.com/questions/535631/… 对于 YAML AWS CLI 输出,它可能是:zone["ResourceRecordSets"].collect |r| "#r["Name"] #r["TTL"]s #r["Type"] #r["ResourceRecords"].first["Value"]" .each |里| puts ri 对于像 MX 这样的多目标记录通常不准确,并且确实有 SOA 和 NS,什么是垃圾 【参考方案1】:以下脚本以绑定格式从 Route53 导出区域详细信息。将域名作为参数传递给脚本。 (这需要安装和配置awscli。)
#!/bin/bash
zonename=$1
hostedzoneid=$(aws route53 list-hosted-zones --output json | jq -r ".HostedZones[] | select(.Name == \"$zonename.\") | .Id" | cut -d'/' -f3)
aws route53 list-resource-record-sets --hosted-zone-id $hostedzoneid --output json | jq -jr '.ResourceRecordSets[] | "\(.Name) \t\(.TTL) \t\(.Type) \t\(.ResourceRecords[]?.Value)\n"'
【讨论】:
请添加一些解释。 @szentmarjay-tibor 您可以更改以下行,因为如果默认输出与 json 不同,则会出错。hostedzoneid=$(aws route53 list-hosted-zones | jq -r ".HostedZones[] | select(.Name == \"$zonename.\") | .Id" | cut -d'/' -f3)
"'
避免空迭代:aws route53 list-resource-record-sets --hosted-zone-id $hostedzoneid --output json | jq -jr '.ResourceRecordSets[] | "(.Name) \t(.TTL) \t(.Type) \t(.ResourceRecords[]?.Value)\n"'
以上评论很有用,但不会转义(
。改为使用:aws route53 list-resource-record-sets --hosted-zone-id $hostedzoneid --output json | jq -jr '.ResourceRecordSets[] | "\(.Name) \t\(.TTL) \t\(.Type) \t\(.ResourceRecords[]?.Value)\n"'
如何运行此文本? (对不起,如果有人觉得这个问题很奇怪?)【参考方案2】:
目前还不可能。您必须使用 API 的 ListResourceRecordSets
并自己构建区域文件。
【讨论】:
查看此工具:https://github.com/barnybug/cli53 这是用于管理 Amazon Route 53 dns 服务的命令行脚本。希望有帮助 grrrr 我不敢相信开发人员想到了“导入”按钮却忘记了“导出!” 有道理,他们想带来业务,但又想让业务难以带走。但是是的,非常烦人!感谢您对 cli 工具的引用。 它们的记录值不符合 RFC。他们无法在不丢失数据的情况下进行导出。 祝你好运!使用该 API 调用将所有记录获取到 JSON 文件中很简单。不幸的是,您必须编辑该文件,包括编辑该文件中的每一条记录,使其具有正确的格式,然后您可以使用它来导入。就我而言,我们有 250 多条记录,这使得这完全不切实际。来自 AWS 的绝对垃圾!【参考方案3】:如the comment 中所述,cli53 是使用命令行界面与 Route 53 交互的绝佳工具。
首先,在~/.aws/config
文件中配置您的帐户密钥:
[default]
aws_access_key_id = AK.....ZP
aws_secret_access_key = 8j.....M0
然后,使用export
命令:
$ cli53 export --full --debug example.com > example.com.zone 2> example.com.zone.log
导出后验证example.com.zone
文件,确保所有内容都正确导出。
您最近可以导入该区域:
$ cli53 import --file ./example.com.zone example.com
如果您想将 Route53 区域从一个 AWS 账户转移到另一个账户,您可以使用 profile
选项。只需将两个命名帐户添加到~/.aws/config
文件,并在导出和导入期间使用profile
属性引用它们。您甚至可以通过管道传输这两个命令。
【讨论】:
【参考方案4】:您可以使用 aws api 导出
aws route53 list-resource-record-sets --hosted-zone-id YOUR_ZONE_ID
【讨论】:
【参考方案5】:https://github.com/RisingOak/route53-transfer可以导出和导入
【讨论】:
【参考方案6】:您可以导出 JSON 文件:
aws route53 list-resource-record-sets --hosted-zone-id <zone-id-here> --output json > route53-records.json
【讨论】:
以上是关于从 Amazon Route 53 导出 DNS 区域文件的主要内容,如果未能解决你的问题,请参考以下文章
Amazon Route 53 DNS 反向查找区域 - ATT IP 块设置
将现有域的 DNS 服务迁移到 Amazon Route 53