将托管区迁移到其它 AWS 账户 - Amazon Route 53

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

将托管区迁移到其它 AWS 账户

在将托管区迁移到其他 AWS 账户 时,请执行以下建议的步骤。

这些步骤最适合记录更改频率较低的托管区。对于记录频繁更新的托管区,请考虑以下事项:

  • 迁移期间不要更新任何资源记录。

  • 转移委托后,在旧托管区和新托管区中发布资源记录更改。

先决条件

安装或升级 AWS CLI:

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

注意

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

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

步骤 1:准备迁移

准备步骤可帮助您最大限度地降低与迁移托管区相关的风险。

1. 监控区域可用性

您可以监控区域以了解域名的可用性。这可以帮助您解决可能导致回滚迁移的任何问题。您可以使用 CloudWatch 或查询日志记录来监控流量最多的域名。有关设置查询日志记录的更多信息,请参阅 监控 Amazon Route 53

可以通过 Shell 脚本或第三方服务来完成监控。但是,其不应作为确定是否需要回滚的唯一信号,因为由于域不可用,您也可能会从客户处获得反馈。

2. 降低 TTL 设置值

记录的 TTL(生存时间)设置指定您希望 DNS 解析程序缓存记录和使用缓存信息的时间。当 TTL 过期时,解析程序会向域的 DNS 服务提供商发送另一个查询以获取最新信息。

NS 记录的典型 TTL 设置为 172800 秒或两天。NS 记录列出了域名系统 (DNS) 可用来获取有关如何路由域流量的信息的名称服务器。通过为当前 DNS 服务提供商和 Route 53 减小 NS 记录的 TTL,可在您将 DNS 迁移至 Route 53 的过程中发现问题时缩短域的停机时间。如果您不减小 TTL,则您的域可能会在出现问题时最多两天内在 Internet 上不可用。

降低 TTL
  1. 请登录 AWS 管理控制台,并通过以下网址打开 Route 53 控制台:https://console.aws.amazon.com/route53/

  2. 在导航窗格中选择托管区

  3. 选择托管区域的名称。

  4. 选择 NS 记录,然后在记录详细信息窗格中选择编辑记录

  5. 更改 TTL(秒)的值。我们建议您指定一个介于 60 秒和 900 秒 (15 分钟) 之间的值。

  6. 选择保存

3. 从父区域中移除 DS 记录(如果您已配置 DNSSEC)

如果已为域配置 DNSSEC,请在将域迁移到 Route 53 之前从父区域中删除 Delegation Signer (DS) 记录。

如果父区域通过 Route 53 进行托管,请参阅 删除域的公有密钥 以获取更多信息。如果父区域在另一个注册商处进行托管,请联系他们移除 DS 记录。

Route 53 目前不支持迁移 DNSSEC 设置。因此,您需要通过从父区域中移除 DS 记录来禁用在迁移之前对您的域执行的 DNSSEC 验证。迁移完成后,您可以通过在新托管区上配置 DNSSEC 并将相应 DS 记录添加到父区域来重新启用 DNSSEC 验证。

4. 确保没有其他依赖迁移托管区的持续操作

某些操作将依赖于迁移托管区中的 DNS 解析,例如,TLS/SSL 证书续订过程可能需要更改 DNS 记录,而提供商会尝试将 DNS 记录解析为验证方法。在迁移之前,应确保没有其他操作发生,以避免托管区迁移造成意外影响。

步骤 2:创建新的托管区

在要将托管区迁移到的目标账户中创建新的托管区。

选择相应选项卡,查看 AWS CLI 或控制台的说明。

CLI

输入以下命令:

aws route53 create-hosted-zone \ --name $hosted_zone_name \ --caller-reference $unique_string

有关更多信息,请参阅 create-hosted-zone

Console
使用其他账户创建新的托管区域
  1. 请登录 AWS 管理控制台,并通过以下网址打开 Route 53 控制台:https://console.aws.amazon.com/route53/

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

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

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

  4. 从 Route 53 控制台注销。

在新区域中也要降低 NS TTL,类似于准备“步骤 1:降低 TTL 设置值”中的“降低 TTL”设置。

步骤 3:(可选)迁移运行状况检查

您可以将新账户中的 DNS 记录与要从中迁移的账户中的 Route 53 运行状况检查相关联。要迁移 Route 53 运行状况检查,您需要使用与现有账户相同的配置,在新账户中创建新的运行状况检查。有关更多信息,请参阅 创建 Amazon Route 53 运行状况检查

步骤 4:将记录从旧托管区迁移到新的托管区

您可以使用控制台或 AWS CLI,将记录从 AWS 账户 迁移到另一个。

Console

如果您的区域仅包含几条记录,则可以考虑使用 Route 53 控制台列出旧区域中的记录,记下这些记录,然后在新区域中创建这些记录。如果您已在 步骤 3:(可选)迁移运行状况检查 中迁移运行状况检查,则在新的托管区中创建记录时,应指定新的运行状况检查 ID。有关更多信息,请参阅以下主题:

您还应该降低新区域中的 NS TTL,类似于步骤 1 中的降低 TTL 设置。

CLI

如果您的区域包含大量记录,则可以导出要迁移到文件的记录,编辑此文件,然后使用编辑后的文件在新的托管区中创建记录。以下过程使用 AWS CLI 命令,但也有第三方工具可用于此目的。

  1. 运行以下命令:

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

    请注意以下几点:

    • 对于 hosted-zone-id,请指定包含要迁移记录的旧托管区的 ID。

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

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

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

      如果您使用其它编程方法(如某个 AWS 软件开发工具包)列出记录,对于每个结果页,您最多可以获取 100 条记录。如果托管区域包含 100 条以上的记录,您必须提交多个请求才能列出所有记录。

    创建此输出的副本。在新的托管区域中创建记录后,建议您在新的托管区域上运行 AWS CLI list-resource-record-sets 命令并比较两个输出以确保已创建所有记录。

  2. 编辑要迁移的记录

    编辑导出的文件,然后才能将其与 change-resource-record-sets 命令结合使用。您可以使用文本编辑器中的“搜索并替换”功能来进行这些更改。

    注意

    以下步骤描述使用文本编辑器进行手动编辑。高级用户可以使用 jq、Python 或其他脚本语言等编程工具自动执行这些转换。

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

    • 将文件顶部的 ResourceRecordSets 元素替换为 Changes 元素。

    • 可选 — 添加 Comment 元素。

    • 删除与托管区名称的 NS 和 SOA 记录相关的行。新的托管区域已具有这些记录。

    • 为每条记录添加 ActionResourceRecordSets 元素,根据需要添加左方括号和右方括号({ })以使 JSON 代码有效。

      注意

      您可以使用 JSON 验证程序来验证所有大括号和方括号是否位于正确的位置。要查找在线 JSON 验证器,请在浏览器中搜索“JSON 验证器”。

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

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

        重要

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

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

        重要

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

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

    • 如果您已在 步骤 3:(可选)迁移运行状况检查 中迁移运行状况检查,请更改记录以与新创建的运行状况检查 ID 相关联。

    以下示例显示了 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." } } ] }
  3. 将大文件拆分成多个小文件

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

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

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

  4. 在新托管区中创建记录

    输入以下 CLI:

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

    指定以下值:

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

    • 对于 path-to-file-that-contains-records,请指定您在前面步骤中编辑的目录路径和文件名。

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

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

要确认您已在新托管区中成功创建所有记录,请输入如下 CLI 命令以列出新托管区中的记录,并将输出与旧托管区中的记录列表进行比较。

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

指定以下值:

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

  • 对于 path-to-output-file,指定要在其中保存输出的目录路径和文件名。使用与您在步骤 4 中使用的不同文件名。

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

将此输出与来自步骤 4 的输出进行比较。除了 NS 和 SOA 记录的值以及您在步骤 4 中所做的任何更改 (如不同的托管区 ID 或域名),两个输出应相同。

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

  • 使用 Route 53 控制台进行少量纠正。有关更多信息,请参阅 编辑记录

  • 从新托管区中删除 NS 和 SOA 记录之外的所有记录,然后重复步骤 4 中的过程。

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

完成将记录迁移到新托管区之后,将域注册的名称服务器更改为使用新托管区的名称服务器。有关更多信息,请参阅将 Amazon Route 53 作为现有域的 DNS 服务。

如果您的托管区正在使用中(例如,如果您的用户正在使用该域名浏览网站或访问 Web 应用程序),则应继续监控托管区的流量和可用性,包括网站或应用程序流量、电子邮件等。

  • 如果流量慢或停止 - 请将域注册的名称服务改回旧托管区中的名称服务器。然后,确定出错的位置。

  • 如果流量未受影响 - 继续至下一步。

步骤 7:将 NS 记录的 TTL 重新改为更高的值

在新托管区中,将 NS 记录对应的 TTL 更改为更典型的值,例如,172800 秒 (两天)。这减少用户的延迟,因为他们不必像 DNS 解析程序一样通常需要等待为您的域的名称服务器发送查询。

更改 TTL
  1. 请登录 AWS 管理控制台,并通过以下网址打开 Route 53 控制台:https://console.aws.amazon.com/route53/

  2. 在导航窗格中选择托管区

  3. 选择托管区域的名称。

  4. 选择 NS 记录,然后在记录详细信息窗格中选择编辑记录

  5. TTL(秒)的值更改为您希望 DNS 解析程序缓存您的域的名称服务器的名称的秒数。我们建议的值为 172800 秒。

  6. 选择保存

步骤 8:重新启用 DNSSEC 签名并建立信任链(如果需要)

您可以通过两个步骤重新启用 DNSSEC 签名:

  1. 为 Route 53 启用 DNSSEC 签名,并请求 Route 53 根据客户托管密钥在 AWS Key Management Service 中创建密钥签名密钥(KSK)。

  2. 通过向父区域添加 Delegation Signer(DS)记录,为托管区创建信任链,以便使用受信任的加密签名对 DNS 响应进行身份验证。

有关说明,请参阅启用 DNSSEC 签名并建立信任链。

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

如果您确信您不再需要旧托管区域,则可选择将其删除。有关说明,请参阅删除公有托管区域

重要

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