59

I would like to export a DNS zonefile from my Amazon Route 53 setup. Is this possible, or can zonefiles only be created manually? (e.g. through http://www.zonefile.org/?lang=en)

4

7 回答 7

58

以下脚本以绑定格式从 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"'
于 2018-01-29T10:02:02.250 回答
28

这还不可能。您必须使用 APIListResourceRecordSets并自己构建区域文件。

于 2013-12-09T00:59:07.620 回答
12

评论中所述,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您甚至可以通过管道传输这两个命令。

于 2019-10-12T21:12:42.633 回答
4

您可以使用 aws api 导出

aws route53 list-resource-record-sets --hosted-zone-id YOUR_ZONE_ID

于 2020-07-21T16:16:25.777 回答
3

使用https://github.com/RisingOak/route53-transfer可以导出和导入

于 2017-07-04T15:17:06.737 回答
2

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

于 2021-08-09T10:34:27.443 回答
0

基于上面@szentmarjay 的回答,除了它显示用法并支持zone_id 或zone_name。这是我的最爱,因为它是标准的老式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"'
于 2022-02-28T02:51:59.043 回答