我想从我的亚马逊路线53设置导出一个 DNS 区域文件。这可能吗? 还是只能手动创建区域文件?(例如透过 http://www.zonefile.org/?lang=en)
现在还不可能。您必须使用 API 的 ListResourceRecordSets并自己构建区域文件。
ListResourceRecordSets
使用 https://github.com/RisingOak/route53-transfer可以进行导出和导入
下面的脚本以绑定格式从 Route53导出区域详细信息。将域名作为参数传递给脚本。(这需要安装和配置 (咒语)和 JQ。)
#!/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"'
如 评论所述,Cli53是使用命令行界面与53号公路交互的一个很好的工具。
首先,在 ~/.aws/config文件中配置您的帐户密钥:
~/.aws/config
[default] aws_access_key_id = AK.....ZP aws_secret_access_key = 8j.....M0
然后,使用 export命令:
export
$ cli53 export --full --debug example.com > example.com.zone 2> example.com.zone.log
导出后验证 example.com.zone文件,以确保所有内容都正确导出。
example.com.zone
您可以最近导入该区域:
$ cli53 import --file ./example.com.zone example.com
如果要将 Route53区域从一个 AWS 帐户转移到另一个帐户,可以使用 profile选项。只需将两个已命名的帐户添加到 ~/.aws/config文件中,并在导出和导入期间使用 profile属性引用它们。您甚至可以通过管道传送这两个命令。
profile
你可以用 aws api 导出
Aws route53 list-resource-record-sets —— host-zone-id YOUR _ ZONE _ ID
您可以导出一个 JSON 文件: aws route53 list-resource-record-sets --hosted-zone-id <zone-id-here> --output json > route53-records.json
aws route53 list-resource-record-sets --hosted-zone-id <zone-id-here> --output json > route53-records.json
基于@szentmarjay 上面的答案,除了它显示了用法并支持 zone _ id 或 zone _ name 之外。这是我的最爱,因为它是标准的老学校 bind格式,所以其他工具可以用它做的东西。
bind
#!/bin/bash # r53_export usage() { local cmd=$(basename "$0") echo -e >&2 "\nUsage: $cmd {--id ZONE_ID|--domain ZONE_NAME}\n" exit 1 } while [[ $1 ]]; do if [[ $1 == --id ]]; then shift; zone_id="$1" elif [[ $1 == --domain ]]; then shift; zone_name="$1" else usage fi shift done if [[ $zone_name ]]; then zone_id=$( aws route53 list-hosted-zones --output json \ | jq -r ".HostedZones[] | select(.Name == \"$zone_name.\") | .Id" \ | head -n1 \ | cut -d/ -f3 ) echo >&2 "+ Found zone id: '$zone_id'" fi [[ $zone_id ]] || usage aws route53 list-resource-record-sets --hosted-zone-id $zone_id --output json \ | jq -jr '.ResourceRecordSets[] | "\(.Name) \t\(.TTL) \t\(.Type) \t\(.ResourceRecords[]?.Value)\n"'