本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将 DNS 记录批量迁移至 Amazon Route 53 私有托管区
Ram Kandaswamy,Amazon Web Services
Summary
这种模式可自动将 DNS 记录批量迁移到 Amazon Route 53 托管区域。它使用带有 Python AWS 软件开发工具包 (Boto3) 的 Python 脚本从存储在亚马逊简单存储服务 (Amazon S3) 的 JSON 文件中读取记录数据,然后使用 Route 53 API 以编程方式创建记录。
如果您的源系统导出标准的 BIND 区域文件,那么 Route 53 原生导入功能或 c li53
如果您需要将大量 DNS 记录从现有系统迁移到 Route 53 托管区域,而无需通过控制台手动创建每条记录,请使用此模式。
先决条件和限制
先决条件
限制
此模式不使用
change_resource_record_setsAPI 调用的所有可用属性。根据您的用例的需要扩展代码。在 Excel 工作表中,假定每行中的值是唯一的。每个 FQDN 的多个值应出现在同一行中。如果不是这样,请修改代码以连接同一 FQDN 的多个值。
此模式使用 Boto3 直接调用 Route 53 API。您可以增强代码以使用
create_stack和update_stack命令的 AWS CloudFormation 包装器,并使用 JSON 值填充模板资源。如果您的源系统可以以 BIND 区域文件格式导出记录,请考虑改用 Route 53 导入功能。
有些 AWS 服务并非全部可用 AWS 区域。有关区域可用性,请参阅按地区划分的 AWS服务
。有关特定端点,请参阅服务端点和配额页面,然后选择相应服务的链接。
架构

用户将包含 DNS 记录数据的 Excel 工作表上传到亚马逊 S3 存储桶。
在本地(或在像 Kiro 这样的 IDE 中)运行的 Python 脚本使用 Boto3 从 Amazon S3 存储桶中读取 JSON 文件。
该脚本处理记录并调用 Route 53
change_resource_record_setsAPI 操作在托管区域中创建记录。
工具
AWS 服务
其他工具
Kiro — 具有代理人工智能功能的 IDE,用于开发和运行 Python 迁移脚本。有关更多信息,请参阅 Kiro。
p@@ andas — 一个 Python 数据分析库,用于将 Excel 工作表转换为 JSON 格式。
最佳实践
在对所有记录运行脚本之前,先对一小部分 5-10 条记录进行测试,以验证数据格式并正确创建记录。
使用
UPSERT操作代替CREATE。如果记录不存在,则该UPSERT操作会创建记录,如果记录存在,则会对其进行更新。这使得脚本是等效的,可以安全地重新运行。Batch 更改以保持在
ChangeResourceRecordSets请求限制之内。使用该UPSERT操作时,每个ResourceRecord元素的计数会在 1,000 个元素的最大值中计数两次。在插入数据之前验证数据。验证 FQDN 是否以句点 (
.) 结尾,TTL 值是否为正整数,以及记录类型是否与支持的 DNS 记录类型相匹配。在进行批量更改之前,请@@ 备份现有记录
。使用 list_resource_record_sets提供回滚点来导出当前托管区域记录。使用指数退避实现重试逻辑,以处理 Route 53 API 速率限制。有关更多信息,请参阅中的错误重试和指数退缩。 AWS
遵循最低权限原则,并授予执行任务所需的最低权限。有关更多信息,请参阅 AWS Identity and Access Management (IAM) 文档中的授予最低权限和安全最佳实践。
操作说明
| Task | 说明 | 所需技能 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
创建一个 Excel 文件作为记录。 |
示例行:
| 数据工程师 | ||||||||
将 Excel 工作表数据转换为 JSON。 |
| 数据工程师、Python 开发者 | ||||||||
将 JSON 文件上传到亚马逊 S3 存储桶。 |
| 应用程序开发人员 |
| Task | 说明 | 所需技能 |
|---|---|---|
创建一个托管区域。 |
您也可以使用基础设施即代码 (IaC) 工具,例如 AWS CloudFormation 将这些步骤替换为使用适当资源和属性的堆栈的模板。有关更多信息,请参阅 CloudFormation 文档HostedZone中的 AWS Route 53::。 | 云架构师、网络管理员、Python 技能 |
读取 Amazon S3 中的 JSON 数据。 |
| 应用程序开发者、Python 开发者 |
清理数据值并插入记录。 |
| 应用程序开发人员,Python 技能 |
问题排查
| 问题 | 解决方案 |
|---|---|
| 在两次通话之间 |
| 当您尝试使用 |
限制错误(超出速率限制) | 您已超过每秒 5 个 API 请求。使用抖动实现指数回退。有关更多信息,请参阅中的错误重试和指数退缩。 AWS |
记录无法解析 | 验证 VPC 是否与托管区域关联,并且已在 VPC 上启用 DNS 解析。 |
| 数据包含不间断空格 ( |
相关资源
参考
通过导入区域文件来创建记录(Route 53 文档)
更改资源记录集(Boto
3 文档) 支持的 DNS 记录类型(Route 53 文档)
教程和视频
使用 Amazon Route 53 进行 DNS 设计
附加信息
对于 NAPTR 和 SRV 记录,Excel 工作表中的Value字段必须包含连接成单个字符串的所有必需组件。在导出为 JSON 之前,使用 Excel 的 CONCAT 函数合并各个属性(顺序、首选项、标志、服务、正则表达式、NAPTR 的替换;SRV 的优先级、权重、端口、目标)。
如果您的迁移涉及超过 1,000 条记录,请将 JSON 文件分成批次,然后分别处理每个批次,以保持在 Route 53 API 限制范围内。使用该UPSERT操作时,每个ResourceRecord元素在每次请求的最大值 1,000 个元素之间计数两次。ChangeResourceRecordSets
附件
要访问与此文档相关联的其他内容,请解压以下文件:attachment.zip