翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
DNS レコードを Amazon Route 53 プライベートホストゾーンに一括で移行する
Ram Kandaswamy、Amazon Web Services
概要
このパターンは、DNS レコードの Amazon Route 53 ホストゾーンへの一括移行を自動化します。 AWS SDK for Python (Boto3) で Python スクリプトを使用して、Amazon Simple Storage Service (Amazon S3) に保存されている JSON ファイルからレコードデータを読み取り、Route 53 API を使用してプログラムでレコードを作成します。
ソースシステムが標準の BIND ゾーンファイルをエクスポートする場合、Route 53 ネイティブインポート機能または cli53
このパターンは、コンソールを使用して各レコードを手動で作成することなく、既存のシステムから Route 53 ホストゾーンに多数の DNS レコードを移行する必要がある場合に使用します。
前提条件と制限事項
前提条件
アクティブな AWS アカウント
完全修飾ドメイン名 (FQDN)、レコードタイプ、有効期限 (TTL)、および値の列を含むホストゾーンレコードを含む Excel ワークシート
Python 3.12 以降 (Python のダウンロード
を参照) pandas Python ライブラリがインストールされている (
pip3 install pandas)A、NAPTR、SRV レコードなどの DNS レコードタイプに精通している (「サポートされている DNS レコードタイプ」を参照)
Python 言語とそのライブラリを理解していること
制限事項
このパターンでは、
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 ワークシートを Amazon S3 バケットにアップロードします。
ローカル (または Kiro などの IDE) で実行されている Python スクリプトは、Boto3 を使用して Amazon S3 バケットから JSON ファイルを読み取ります。
このスクリプトはレコードを処理し、Route 53
change_resource_record_setsAPI オペレーションを呼び出して、ホストゾーンにレコードを作成します。
ツール
AWS サービス
その他のツール
Kiro — エージェント AI 機能を備えた IDE。Python 移行スクリプトの開発と実行に使用されます。詳細については、「Kiro
」を参照してください。 pandas — Excel ワークシートを JSON 形式に変換するために使用される Python データ分析ライブラリ。
ベストプラクティス
すべてのレコードに対してスクリプトを実行する前に、5~10 個のレコードの小さなサブセットでテストし、データのフォーマットと正しいレコードの作成を検証します。
の代わりに
UPSERTアクションを使用しますCREATE。UPSERTアクションは、レコードが存在しない場合は作成し、存在しない場合は更新します。これにより、スクリプトはべき等で、再実行しても安全になります。ChangeResourceRecordSetsリクエスト制限内に収まるように変更をバッチ処理します。UPSERTアクションを使用すると、各ResourceRecord要素は 1,000 要素の最大数に 2 回カウントされます。挿入前にデータを検証します。FQDNsピリオド (
.) で終わること、TTL 値が正の整数であること、およびレコードタイプがサポートされている DNS レコードタイプと一致することを確認します。一括変更を行う前に、既存のレコードをバックアップ
します。を使用して現在のホストゾーンレコードをエクスポート list_resource_record_setsし、ロールバックポイントを指定します。Route 53 API レート制限を処理するには、エクスポネンシャルバックオフを使用して再試行ロジックを実装します。詳細については、「エラーの再試行とエクスポネンシャルバックオフ AWS」を参照してください。
最小特権の原則に従い、タスクの実行に必要な最小限の権限を付与します。詳細については、 AWS Identity and Access Management (IAM) ドキュメントの「最小特権の付与」と「セキュリティのベストプラクティス」を参照してください。
エピック
| タスク | 説明 | 必要なスキル | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
レコード用の Excel ファイルを作成します。 |
行の例:
| データエンジニア | ||||||||
Excel ワークシートのデータを JSON に変換します。 |
| データエンジニア、Python 開発者 | ||||||||
JSON ファイルを Amazon S3 バケットにアップロードします。 |
| アプリ開発者 |
| タスク | 説明 | 必要なスキル |
|---|---|---|
ホストゾーンの作成。 |
などの Infrastructure as Code (IaC) ツールを使用して AWS CloudFormation 、これらのステップを、適切なリソースとプロパティを持つスタックを作成するテンプレートに置き換えることもできます。詳細については、 CloudFormation ドキュメントのAWS 「Route 53::HostedZone」を参照してください。 | クラウドアーキテクト、ネットワーク管理者、Python のスキル |
Amazon S3 から JSON データを読み取ります。 |
| アプリケーション開発者、Python 開発者 |
データ値をクリーンアップし、レコードを挿入します。 |
| アプリ開発者、Python のスキル |
トラブルシューティング
| 問題 | ソリューション |
|---|---|
|
|
| このエラーは、 |
スロットリングエラー (レート制限超過) | 1 秒あたり 5 つの 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フィールドには、1 つの文字列に連結されたすべての必須コンポーネントが含まれている必要があります。Excel の CONCAT 関数を使用して、JSON にエクスポートする前に、個々のプロパティ (順序、設定、フラグ、サービス、regexp、NAPTR の置き換え、優先度、重み、ポート、SRV のターゲット) を結合します。
移行に 1,000 を超えるレコードが含まれる場合は、JSON ファイルをバッチに分割し、各バッチを個別に処理して Route 53 API の制限内に収めます。UPSERT アクションを使用すると、各ResourceRecord要素はChangeResourceRecordSetsリクエストごとに 1,000 要素の最大数に 2 回カウントされます。
アタッチメント
このドキュメントに関連する追加コンテンツにアクセスするには、次のファイルを解凍してください。「attachment.zip」