从 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

必须使用 www 用于使用 Amazon Route53 的 DNS 条目

Amazon Web服务Route 53忽略域名

Amazon Route 53 设置和 301 重定向设置

从阿里云迁移域名至 Amazon Route 53 帮你了解域名迁移