本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將大量 DNS 記錄遷移至 Amazon Route 53 私有託管區域
Ram Kandaswamy,Amazon Web Services
摘要
此模式會自動將 DNS 記錄大量遷移到 Amazon Route 53 託管區域。它使用 Python 指令碼搭配適用於 Python 的 AWS SDK (Boto3),從存放在 Amazon Simple Storage Service (Amazon S3) 中的 JSON 檔案讀取記錄資料,並使用 Route 53 API 以程式設計方式建立記錄。
如果您的來源系統匯出標準 BIND 區域檔案,Route 53 原生匯入功能或 cli53
當您需要將大量 DNS 記錄從現有系統遷移到 Route 53 託管區域,而無需透過主控台手動建立每個記錄時,請使用此模式。
先決條件和限制
先決條件
作用中的 AWS 帳戶
Excel 工作表,其中包含託管區域記錄,其中包含完整網域名稱 (FQDN)、記錄類型、存留時間 (TTL) 和值的資料欄
Python 3.12 或更新版本 (請參閱下載 Python
) 已安裝 pandas Python 程式庫 (
pip3 install pandas)熟悉 DNS 記錄類型,例如 A、NAPTR 和 SRV 記錄 (請參閱支援的 DNS 記錄類型)
熟悉 Python 語言及其程式庫
限制
此模式不會使用
change_resource_record_setsAPI 呼叫的所有可用屬性。根據您的使用案例視需要擴展程式碼。在 Excel 工作表中,假設每一列中的值是唯一的。每個 FQDN 的多個值預期會出現在相同的資料列中。如果不是這種情況,請修改程式碼來串連相同 FQDN 的多個值。
此模式使用 Boto3 直接呼叫 Route 53 API。 Boto3 您可以增強程式碼以使用
create_stack和update_stack命令的 AWS CloudFormation 包裝函式,並使用 JSON 值填入範本資源。如果您的來源系統可以 BIND 區域檔案格式匯出記錄,請考慮改用 Route 53 匯入功能。
有些 AWS 服務無法全部使用 AWS 區域。如需區域可用性,請參閱 AWS依區域列出的 服務
。如需特定端點,請參閱服務端點和配額頁面,然後選擇服務的連結。
Architecture

使用者將具有 DNS 記錄資料的 Excel 工作表上傳至 Amazon S3 儲存貯體。
在本機 (或在 IDE 中,例如 Kiro) 執行的 Python 指令碼會使用 Boto3 從 Amazon S3 儲存貯體讀取 JSON 檔案。
指令碼會處理記錄並呼叫 Route 53
change_resource_record_setsAPI 操作,以在託管區域中建立記錄。
工具
AWS 服務
其他工具
Kiro — 具有代理式 AI 功能的 IDE,用於開發和執行 Python 遷移指令碼。如需詳細資訊,請參閱 Kiro
。 pandas — Python 資料分析程式庫,用於將 Excel 工作表轉換為 JSON 格式。
最佳實務
在針對所有記錄執行指令碼之前,先使用 5-10 筆記錄的小子集進行測試,以驗證資料格式和正確的記錄建立。
使用
UPSERT動作,而非CREATE。如果記錄不存在,則UPSERT動作會建立記錄,如果記錄不存在,則會對其進行更新。這可讓指令碼具有等冪性且安全地重新執行。將您的變更批次處理,以保持在
ChangeResourceRecordSets請求限制內。當您使用UPSERT動作時,每個ResourceRecord元素會計入最多 1,000 個元素。插入前驗證資料。確認 FQDNs以句點 (
.) 結尾、TTL 值為正整數,以及記錄類型符合支援的 DNS 記錄類型。在您進行大量變更之前,請先備份現有的記錄
。使用 匯出目前的託管區域記錄 list_resource_record_sets,以提供轉返點。實作具有指數退避的重試邏輯,以處理 Route 53 API 速率限制。如需詳細資訊,請參閱錯誤重試和指數退避 AWS。
遵循最低權限原則,並授予執行任務所需的最低許可。如需詳細資訊,請參閱《 AWS Identity and Access Management (IAM) 文件》中的授予最低權限和安全最佳實務。
史詩
| 任務 | 說明 | 所需的技能 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
為您的記錄建立 Excel 檔案。 |
範例資料列:
| 資料工程師 | ||||||||
將 Excel 工作表資料轉換為 JSON。 |
| 資料工程師,Python 開發人員 | ||||||||
將 JSON 檔案上傳至 Amazon S3 儲存貯體。 |
| 應用程式開發人員 |
| 任務 | 說明 | 所需的技能 |
|---|---|---|
建立託管區域。 |
您也可以使用基礎設施做為程式碼 (IaC) 工具,例如 AWS CloudFormation ,將這些步驟取代為使用適當資源和屬性建立堆疊的範本。如需詳細資訊,請參閱 CloudFormation 文件中的 AWS Route 53::HostedZone。 | 雲端架構師、網路管理員、Python 技能 |
從 Amazon S3 讀取 JSON 資料。 |
| 應用程式開發人員、Python 開發人員 |
清除資料值並插入記錄。 |
| 應用程式開發人員、Python 技能 |
疑難排解
| 問題 | 解決方案 |
|---|---|
| 在 |
| 當您嘗試使用 |
調節錯誤 (超過速率限制) | 您已超過每秒五個 API 請求。使用抖動實作指數退避。如需詳細資訊,請參閱錯誤重試和指數退避 AWS。 |
記錄未解析 | 確認 VPC 與託管區域相關聯,且已在 VPC 上啟用 DNS 解析。 |
| 資料包含非中斷空格 ( |
相關資源
參考
透過匯入區域檔案建立記錄 (Route 53 文件)
create_hosted_zone
(Boto3 文件) change_resource_record_sets
(Boto3 文件) 支援的 DNS 記錄類型 ( Route 53 文件)
教學課程和影片
使用 Amazon Route 53 的 DNS 設計
其他資訊
對於 NAPTR 和 SRV 記錄,Excel 工作表中的 Value 欄位必須包含串連為單一字串的所有必要元件。在匯出至 JSON 之前,使用 Excel 的 CONCAT 函數合併個別屬性 (訂單、偏好設定、旗標、服務、regexp、取代 NAPTR; 優先順序、權重、連接埠、SRV 目標)。
如果您的遷移涉及超過 1,000 個記錄,請將 JSON 檔案分割為批次,並分別處理每個批次,以保持在 Route 53 API 限制內。當您使用 UPSERT動作時,每個ResourceRecord元素會計入每個ChangeResourceRecordSets請求的 1,000 個元素上限兩次。
附件
若要存取與本文件相關聯的其他內容,請解壓縮下列檔案: attachment.zip