将托管区域迁移到其他 Amazon 账户 - Amazon Route 53
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将托管区域迁移到其他 Amazon 账户

如果要将托管区域从一个 Amazon 账户迁移到另一个账户,可以编程方式列出旧托管区域中的记录,编辑输出,然后使用编辑后的输出以编程方式在新托管区域中创建记录。请注意以下几点:

  • 如果您只有几条记录,也可使用 Route 53 控制台在新的托管区域创建记录。有关更多信息,请参阅通过使用 Amazon Route 53 控制台创建记录

  • 有些程序使用 Amazon Command Line Interface (Amazon CLI)。您也可以使用其中一个 Amazon 软件开发工具包、Amazon Route 53 API 或 Amazon Tools for Windows PowerShell来执行这些过程。在本主题中,我们使用, Amazon CLI 因为对于少量托管区域来说,它更容易。

  • 您也可使用此过程在与现有托管区域的名称不同但记录相同的新托管区域中创建记录。

  • 您无法迁移将流量路由到流量策略实例的别名记录。

步骤 1:安装或升级 Amazon CLI

有关下载、安装和配置的信息 Amazon CLI,请参阅《Amazon Command Line Interface 用户指南》

注意

配置 CLI,以便您能在同时使用创建了托管区域的账户和要将托管区域迁移到的账户时使用它。有关更多信息,请参阅 Amazon Command Line Interface 用户指南中的配置

如果您已经在使用 Amazon CLI,我们建议您升级到最新版本的 CLI,以便 CLI 命令支持最新的 Route 53 功能。

步骤 2:创建新的托管区域

以下过程介绍如何使用 Route 53 控制台创建要迁移到的托管区域。

注意

Route 53 为新托管区域分配一组新名称服务器(4 台)。将托管区域迁移到另一个 Amazon 账户后,您需要更新域名注册以使用新的托管区域的名称服务器。在此过程的后面,我们将提示您此步骤。

使用其他账户创建新的托管区域
  1. 登录 Amazon Web Services Management Console 并打开 Route 53 控制台,网址为 https://console.aws.amazon.com/route53/

    使用要将托管区域迁移到的账户的账户凭证登录。

  2. 创建一个托管区域。有关更多信息,请参阅创建公有托管区域

  3. 记下托管区域 ID。在某些情况下,您在此过程的后面需要使用此信息。

  4. 从 Route 53 控制台注销。

步骤 3:创建包含要迁移的记录的文件

要将记录从一个托管区域迁移到另一个托管区域,请创建一个包含要迁移的记录的文件,编辑此文件,然后使用编辑后的文件在新的托管区域中创建记录。执行以下过程可创建此文件。

创建包含要迁移的记录的文件
  1. 登录 Amazon Web Services Management Console 并打开 Route 53 控制台,网址为 https://console.aws.amazon.com/route53/

    使用创建了要迁移的托管区域的账户的账户凭证登录。

  2. 获取要迁移的托管区域的托管区域 ID:

    1. 在导航窗格中,选择 Hosted zones(托管区域)

    2. 查找要迁移的托管区域。如果您有很多托管区域,则可以选择 Exact domain name(确切域名)并输入托管区域的名称,然后按 Enter 来筛选列表。

    3. 获取 Hosted zone ID (托管区域 ID) 列的值。

  3. 运行以下命令:

    aws route53 list-resource-record-sets --hosted-zone-id hosted-zone-id > path-to-output-file

    请注意以下几点:

    • 对于 hosted-zone-id,请指定您在本过程的步骤 2 中获得的托管区域的 ID。

    • 对于 path-to-output-file,请指定要保存输出的目录路径和文件名。

    • > 字符将输出发送到指定文件。

    • 会 Amazon CLI 自动处理包含超过 100 条记录的托管区域的分页。有关更多信息,请参阅Amazon Command Line Interface 用户指南》中的使用 Amazon 命令行界面的分页选项

      如果您使用其他编程方法列出记录,例如其中一个 Amazon SDK,则每页结果最多可以获得 100 条记录。如果托管区域包含 100 条以上的记录,您必须提交多个请求才能列出所有记录。

    • 要在 6.0 PowerShell 之前的 Windows 版本中运行该命令,请使用以下语法:

      aws route53 list-resource-record-sets --hosted-zone-id hosted-zone-id | Out-File path-to-output-file -Encoding utf8

    例如,如果您在 Windows 计算机 Amazon CLI 上运行,则可以运行以下命令:

    aws route53 list-resource-record-sets --hosted-zone-id ZOLDZONE12345 > c:\temp\list-records-ZOLDZONE12345.txt

    如果你在低 Amazon CLI 于 6.0 的 Windows 版本的 Windows PowerShell 计算机上运行,则可以运行以下命令:

    $output = aws route53 list-resource-record-sets --hosted-zone-id <hosted-zone-id>; $mypath = <output-path ; [System.IO.File]::WriteAllLines($mypath,$output)
  4. 创建此输出的副本。在新托管区域中创建记录后,我们建议您在新的托管区域上运行 Amazon CLI list-resource-record-sets命令并比较两个输出,以确保所有记录均已创建。

步骤 4:编辑要迁移的记录

您在前面的过程中创建的文件格式接近您在新托管区域中创建记录时使用的 Amazon CLI change-resource-record-sets命令所要求的格式。但需要对此文件做一些编辑。您必须将一些更改应用于每条记录。您可以使用适用的文本编辑器中的“搜索并替换”功能来进行这些更改。

打开您在步骤 3:创建包含要迁移的记录的文件中创建的文件的副本,然后进行以下更改:

  • 删除输出顶部的前两行:

    { "ResourceRecordSets": [
  • 删除与 NS 和 SOA 记录相关的行。新的托管区域已具有这些记录。

  • 可选 — 添加 Comment 元素。

  • 添加 Changes 元素。

  • 对于每条记录,添加 ActionResourceRecordSet 元素。

  • 根据需要添加左右大括号 ({ }) 以使 JSON 代码有效。

    注意

    您可以使用 JSON 验证程序来验证所有大括号和方括号是否位于正确的位置。要查找联机 JSON 验证程序,请在 Internet 上搜索“json validator”。

  • 如果托管区域包含任何引用同一托管区域中的其他记录的别名,请进行以下更改:

    • 将托管区域 ID 更改为新托管区域的 ID。

      重要

      如果别名记录指向其他资源(例如负载均衡器),请勿将托管区域 ID 更改为资源本身的托管区域 ID,而不是域的托管区域 ID。如果您意外更改了托管区域 ID,请将托管区域 ID 回滚到资源本身的托管区域 ID,而不是域的托管区域 ID。可以在创建资源的 Amazon 控制台上找到该托管区域 ID。

    • 将别名记录移至文件的底部。Route 53 必须先创建别名记录引用的记录,然后才能创建别名记录。

      重要

      如果一条或多条别名记录引用其他别名记录,则作为别名目标的记录在文件中必须位于引用别名记录之前。例如,如果 alias.example.comalias.alias.example.com 的别名目标,则 alias.example.com 必须在文件中出现在后者之前。

    • 删除将流量路由到流量策略实例的任何别名记录。记下这些记录,以便您稍后能重新创建它们。

  • 您可以使用此过程在具有其他名称的托管区域中创建记录。对于输出中的每条记录,请将 Name 元素的域名部分更改为新托管区域的名称。例如,如果您列出 example.com 托管区域中的记录,并且要在 example.net 托管区域中创建记录,请将每个记录名称的 example.com 部分更改为 example.net:

    从:

    • "Name": "example.com."

    • "Name": "www.example.com."

    到:

    • "Name": "example.net."

    • "Name": "www.example.net."

以下示例显示了 example.com 托管区域的记录被编辑后的版本。红色的斜体文本是新版本:

{ "Comment": "string", "Changes": [ { "Action": "CREATE", "ResourceRecordSet":{ "ResourceRecords": [ { "Value": "192.0.2.4" }, { "Value": "192.0.2.5" }, { "Value": "192.0.2.6" } ], "Type": "A", "Name": "route53documentation.com.", "TTL": 300 } }, { "Action": "CREATE", "ResourceRecordSet":{ "AliasTarget": { "HostedZoneId": "Z3BJ6K6RIION7M", "EvaluateTargetHealth": false, "DNSName": "s3-website-us-west-2.amazonaws.com." }, "Type": "A", "Name": "www.route53documentation.com." } } ] }

步骤 5:将大文件拆分成多个小文件

如果您有大量记录或者您的记录包含大量值 (例如,大量 IP 地址),您可能需要将文件拆分为多个小文件。以下是最大数量:

  • 每个文件最多可包含 1000 条记录。

  • 所有 Value 元素中的值的最大组合长度为 32000 个字节。

步骤 6:在新的托管区域中创建记录

要在新托管区域中创建记录,请使用以下 Amazon CLI 命令:

aws route53 change-resource-record-sets --hosted-zone-id id-of-new-hosted-zone --change-batch file://path-to-file-that-contains-records

例如:

aws route53 change-resource-record-sets --hosted-zone-id ZNEWZONE1245 --change-batch file://c:/temp/change-records-ZNEWZONE1245.txt

如果您已删除将流量路由到流量策略实例的任何别名记录,请使用 Route 53 控制台重新创建它们。有关更多信息,请参阅通过使用 Amazon Route 53 控制台创建记录

步骤 7:比较新托管区域和旧托管区域中的记录

要确认您已在新托管区域中成功创建所有记录,建议您列出新托管区域中的记录,并将输出与旧托管区域中的记录列表进行比较。为此,请执行以下步骤。

比较旧托管区域和新托管区域中的记录
  1. 运行以下命令:

    aws route53 list-resource-record-sets --hosted-zone-id hosted-zone-id --output json > path-to-output-file

    指定以下值:

    • 对于 hosted-zone-id,请指定新托管区域的 ID。

    • 对于 path-to-output-file,请指定要保存输出的目录路径和文件名。使用与您在步骤 3:创建包含要迁移的记录的文件中使用的文件名不同的文件名。使用其他文件名可确保新文件不会覆盖旧文件。

    • > 字符将输出发送到指定文件。

    例如,如果您使用的是 Windows 计算机,则可运行以下命令:

    aws route53 list-resource-record-sets --hosted-zone-id ZNEWZONE67890 --output json > c:\temp\list-records-ZNEWZONE67890.txt
  2. 将此输出与来自步骤 3:创建包含要迁移的记录的文件的输出进行比较。

    除了 NS 和 SOA 记录的值以及您在步骤 4:编辑要迁移的记录中所做的任何更改 (如不同的托管区域 ID 或域名),两个输出应相同。

  3. 如果新托管区域中的记录与旧托管区域中的记录不匹配,则可执行下列操作之一:

步骤 8:将域注册更新为使用新托管区域的名称服务器

在新托管区域中创建记录后,将域注册的名称服务器更改为使用新托管区域的名称服务器。

重要

如果您未将域注册更新为使用新托管区域的名称服务器,Route 53 将继续使用旧托管区域来路由域的流量。如果您在未更新域注册的名称服务器的情况下删除旧托管区域,则域将在 Internet 上变得不可用。如果您添加、更新或删除新托管区域中的记录而未更新域注册的名称服务器,则不会基于这些更改路由流量。

有关更多信息,请参阅将 Amazon Route 53 作为现有域的 DNS 服务

注意

无论您使用此过程迁移正在使用的域的 DNS 服务还是对不活动域使用此过程,都可跳过以下步骤,因为您已创建新的托管区域并在该托管区域中创建记录:

  • 步骤 1:从当前 DNS 服务提供商处获取您的当前 DNS 配置

  • 步骤 2:创建托管区域

  • 步骤 3:创建记录

步骤 9:等待 DNS 解析程序开始使用新托管区域

如果您的域正在使用中(例如,如果用户正在使用该域名浏览网站或访问 Web 应用程序),则 DNS 解析程序已缓存当前 DNS 服务提供商所提供的名称服务器的名称。已在几分钟前缓存该信息的 DNS 解析程序会将其保存最多两天。

注意

如果您在新托管区域中创建旧托管区域中未出现的任何记录,则在解析程序开始使用新托管区域的名称服务器之前,您的用户将无法使用新记录访问您的资源。例如,假设您在新托管区域中创建应将 Internet 流量路由到您的网站的记录 test.example.com。如果旧托管区域中未出现此记录,则在解析程序开始使用新托管区域之前,您无法在 Web 浏览器中输入 test.example.com。

要确保在删除旧托管区域之前已完成将托管区域迁移到另一个 Amazon 账户,请在更新域名注册后等待两天,以便将域名服务器用于新的托管区域。为期两天的 TTL 过期且解析程序请求您的域的名称服务器后,解析程序将获取当前名称服务器。此外,您还可以启用 Resolver 查询日志记录 以监控新托管区中的查询。有关 Resolver 查询日志记录定价的信息,请参阅CloudWatch 定价

步骤 10:(可选)删除旧托管区域

如果您确信您不再需要旧托管区域,则可选择将其删除。

重要

在将域注册更新为使用新托管区域的名称服务器后的至少 48 小时内,不要删除旧托管区域或该托管区域中的任何记录。如果在 DNS 解析程序停止使用旧托管区域中的记录之前删除该托管区域,则在解析程序开始使用新托管区域之前,您的域在 Internet 上不可用。

托管区域必须为空,默认 NS 和 SOA 记录除外。如果旧托管区域包含大量记录,则使用控制台删除这些记录可能需要花费很长时间。一种选择是执行以下步骤:

  1. 步骤 4:编辑要迁移的记录为编辑后的文件创建另一个副本。

  2. 在文件副本中,将每条记录的 "Action": "CREATE" 更改为 "Action": "DELETE"

  3. 使用以下 Amazon CLI 命令删除记录:

    aws route53 change-resource-record-sets --hosted-zone-id id-of-old-hosted-zone --change-batch file:///path-to-file-that-contains-records
    重要

    请确保您为托管区域 ID 指定的值为旧托管区域的 ID,而不是新托管区域的 ID。

  4. 删除任何剩余记录和托管区域:

    1. 登录 Amazon Web Services Management Console 并打开 Route 53 控制台,网址为 https://console.aws.amazon.com/route53/

      使用创建了旧托管区域的账户的账户凭证登录。

    2. 在导航窗格中,选择 Hosted zones(托管区域)

    3. 选择旧托管区域的名称。如果您有很多托管区域,则可以选择 Exact domain name(确切域名)并输入托管区域的名称,然后按 Enter 来筛选列表。

    4. 如果托管区域包含默认 NS 和 SOA 记录之外的任何记录 (如将流量路由到流量策略实例的别名记录),请选中相应复选框,然后选择 Delete(删除)。

    5. 在导航窗格中,选择 Hosted zones(托管区域)

    6. 在托管区域列表中,选择要删除的托管区域所对应的单选按钮。

    7. 选择 删除