【问题标题】:Exporting DNS zonefile from Amazon Route 53从 Amazon Route 53 导出 DNS 区域文件
【发布时间】:2013-12-18 17:15:28
【问题描述】:

我想从我的 Amazon Route 53 设置中导出一个 DNS 区域文件。这是可能的,还是只能手动创建区域文件? (例如通过http://www.zonefile.org/?lang=en

【问题讨论】:

  • 对于 YAML AWS CLI 输出,它可能是:zone["ResourceRecordSets"].collect { |r| "#{r["Name"]} #{r["TTL"]}s #{r["Type"]} #{r["ResourceRecords"].first["Value"]}" }.each { |里| puts ri } 对于像 MX 这样的多目标记录通常不准确,并且确实有 SOA 和 NS,什么是垃圾

标签: amazon-web-services dns amazon-route53


【解决方案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】:

      【讨论】:

        【解决方案6】:

        您可以导出 JSON 文件: aws route53 list-resource-record-sets --hosted-zone-id <zone-id-here> --output json > route53-records.json

        【讨论】:

          猜你喜欢
          • 2013-02-25
          • 2017-05-23
          • 2015-09-27
          • 2015-02-25
          • 2016-06-28
          • 2017-07-31
          • 2020-04-09
          • 2020-10-24
          相关资源
          最近更新 更多