

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# DNS レコードを Amazon Route 53 プライベートホストゾーンに一括で移行する
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone"></a>

*Ram Kandaswamy、Amazon Web Services*

## 概要
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-summary"></a>

ネットワークエンジニアやクラウド管理者は、ドメインネームシステム (DNS) レコードを Amazon Route 53 のプライベートホストゾーンに追加する効率的で簡単な方法を必要としていました。Microsoft Excel ワークシートのエントリを Route 53 コンソールの適切な場所に手動でコピーする方法は、手間がかかり、エラーが発生しやすくなります。このパターンは、複数のレコードを追加するのに必要な時間と労力を削減する自動化されたアプローチについて説明します。また、複数のホストゾーンを作成する手順を繰り返すこともできます。　

このパターンでは、レコードの保存に Amazon Simple Storage Service (Amazon S3) を使用します。データを効率的に操作するため、このパターンでは JSON 形式が使用されます。これは、シンプルさと Python ディクショナリ (`dict` データ型) のサポート機能が理由です。

**注記**  
システムからゾーンファイルを生成できる場合は、代わりに [Route 53 インポート機能](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating-import.html)の使用をご検討ください。

## 前提条件と制限事項
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-prereqs"></a>

**前提条件**
+ プライベートホストゾーンのレコードを含む Excel ワークシート　
+ A レコード、 名前付け権限ポインタ (NAPTR) レコード、SRV レコードなど、さまざまな種類の DNS レコードを理解していること (「[サポートされる DNS レコードタイプ](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/ResourceRecordTypes.html)」を参照)
+ Python 言語とそのライブラリを理解していること

**制限事項**
+ このパターンは、すべてのユースケースシナリオを網羅しているわけではありません。例えば、[change\$1resource\$1record\$1sets](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.change_resource_record_sets) 呼び出しでは API の使用可能なプロパティがすべて使用されるわけではありません。
+ Excel ワークシートでは、各行の値は固有であると想定されます。各完全修飾ドメイン名 (FQDN) の複数の値が同じ行に表示されることが予想されます。　 そうでない場合は、このパターンで提供されるコードを修正して、必要な連結を実行する必要があります。
+ このパターンでは、AWS SDK for Python (Boto3) を使用して、Route 53 サービスを直接呼び出します。コードを拡張して、`create_stack` および `update_stack` コマンドに AWS CloudFormation ラッパーを使用し、JSON 値を使用してテンプレートリソースを設定することができます。

## アーキテクチャ
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-architecture"></a>

**テクノロジースタック**
+ トラフィックをルーティングするための Route 53 プライベートホストゾーン
+ 出力 JSON ファイルを保存するための Amazon S3

![\[DNS レコードを Route 53 プライベートホストゾーンに一括移行します。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/a81c29ea-f0c5-4d4a-ba87-93111a0f1ee9/images/2ada844b-4147-4f9f-8883-d22605aa42d8.png)


このワークフローは、前の図と「*エピック*」セクションで説明したように、以下のステップで構成されています。

1. レコードセット情報を含む Excel ワークシートを S3 バケットにアップロードします。

1. Excel データを JSON 形式に変換する Python スクリプトを作成して実行します。

1. S3 バケットのレコードを読み取り、データをクリーンアップします。

1. プライベートホストゾーンにレコードセットを作成します。

## ツール
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-tools"></a>
+ [Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) — Amazon Route 53 は、ドメイン登録、DNS ルーティング、ヘルスチェックを処理する、可用性が高くスケーラブルな DNS ウェブサービスです。
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) — Amazon Simple Storage Service (Amazon S3) は、オブジェクトストレージサービスです。Simple Storage Service (Amazon S3) を使用すると、いつでもウェブ上の任意の場所から任意の量のデータを保存および取得できます。

## エピック
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-epics"></a>

### データ自動化の準備
<a name="prepare-data-for-automation"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| レコード用の Excel ファイルを作成します。 | 現在のシステムからエクスポートしたレコードを使用して、完全修飾ドメイン名 (FQDN)、レコードタイプ、有効期間 (TTL)、値など、レコードに必要な列を含む Excel ワークシートを作成します。　 NAPTR レコードと SRV レコードの場合、値は複数のプロパティの組み合わせなので、Excel の `concat` メソッドを使用してこれらのプロパティを組み合わせてください。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone.html) | データエンジニア、Excel のスキル | 
| 作業環境を確認します。 | IDE で Python ファイルを作成し、Excel 入力ワークシートを JSON 形式に変換します。(IDE の代わりに、Amazon SageMaker ノートブックを使用して Python コードを編集することもできます。)Python のバージョン 3.7 以降を使用していることを確認してください。<pre> python3 --version</pre>**pandas** パッケージをインストールします。<pre> pip3 install pandas --user</pre> | AWS 全般 | 
| Excel ワークシートのデータを JSON に変換します。　 | Excel から JSON に変換し、次のコードを含む Python ファイルを作成します。<pre>import pandas as pd<br />data=pd.read_excel('./Book1.xls')<br />data.to_json(path_or_buf='my.json',orient='records')</pre>ここで `Book1` は Excel ワークシートの名前、`my.json` は出力 JSON ファイルの名前です。 | データエンジニア、Python スキル | 
| S3 バケットに JSON ファイルをアップロードします。 | S3 バケットに `my.json` ファイルをアップロードします。詳細については、Amazon S3 ドキュメントの「[バケットの作成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)」を参照してください。 | アプリ開発者 | 
| FQDNName | RecordType | 値 | TTL | 
| something.example.org | A | 1.1.1.1 | 900 | 

### レコードを挿入します
<a name="insert-records"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| プライベートホストゾーンを作成します。 | [create\$1hosted\$1zone](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.create_hosted_zone) API と次の Python サンプルコードを使用して、プライベートホストゾーンを作成します。パラメータ `hostedZoneName`、`vpcRegion`、および `vpcId` をユーザー自身の値に置き換えてください。<pre>import boto3<br />import random<br />hostedZoneName ="xxx"<br />vpcRegion = "us-east-1"<br />vpcId="vpc-xxxx"<br />route53_client = boto3.client('route53')<br />response = route53_client.create_hosted_zone(<br />        Name= hostedZoneName,<br />        VPC={<br />            'VPCRegion: vpcRegion,<br />            'VPCId': vpcId<br />        },<br />        CallerReference=str(random.random()*100000),<br />        HostedZoneConfig={<br />            'Comment': "private hosted zone created by automation",<br />            'PrivateZone': True<br />        }<br />    )<br /> print(response)</pre>AWS CloudFormation などの Infrastructure as Code (IaC) ツールを使用すれば、適切なリソースとプロパティを含むスタックを作成するテンプレートでこれらの手順を置き換えることもできます。 | クラウドアーキテクト、ネットワーク管理者、Python のスキル | 
| Amazon S3 から詳細をディクショナリとして取得します。 | 以下のコードを使用して S3 バケットから読み取り、JSON 値を Python ディクショナリとして取得します。 <pre>fileobj = s3_client.get_object(<br />        Bucket=bucket_name,<br />        Key='my.json'<br />        )<br />    filedata = fileobj['Body'].read()<br />    contents = filedata.decode('utf-8')<br />    json_content=json.loads(contents)<br />    print(json_content)</pre>`json_content` には、Pythonディクショナリが含まれます。 | アプリ開発者、Python のスキル | 
| スペースと Unicode 文字のデータ値を消去します。 | データが正しいことを確認するための安全対策として、`json_content` コードを使用して値を削除してください。このコードでは、各文字列の先頭と末尾のスペース文字が削除されます。　 また、`replace` メソッドを使用して (改行しない) ハードスペース (`\xa0` 文字) を削除します。<pre>for item in json_content:<br />    fqn_name = unicodedata.normalize("NFKD",item["FqdnName"].replace("u'", "'").replace('\xa0', '').strip())<br />    rec_type = item["RecordType"].replace('\xa0', '').strip()<br />    res_rec = {<br />                 'Value': item["Value"].replace('\xa0', '').strip()<br />                }</pre> | アプリ開発者、Python のスキル | 
| レコードを挿入します | `for` ループの一部として次のコードを使用します。<pre>change_response = route53_client.change_resource_record_sets(<br />            HostedZoneId="xxxxxxxx",<br />            ChangeBatch={<br />                'Comment': 'Created by automation',<br />                'Changes': [<br />                    {<br />                        'Action': 'UPSERT',<br />                        'ResourceRecordSet': {<br />                            'Name': fqn_name,<br />                            'Type': rec_type,<br />                            'TTL': item["TTL"],<br />                            'ResourceRecords': res_rec<br />                        }<br />                    }<br />                ]<br />            }<br />    )</pre>ここで `xxxxxxx` は、このエピックの最初のステップであるホストゾーン ID です。 | アプリ開発者、Python のスキル | 

## 関連リソース
<a name="migrate-dns-records-in-bulk-to-an-amazon-route-53-private-hosted-zone-resources"></a>

**リファレンス**
+ 「[ゾーンファイルをインポートしてレコードを作成する](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating-import.html)」 (Amazon Route 53 ドキュメント)
+ 「[create\$1hosted\$1zone メソッド](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.create_hosted_zone)」 (Boto3 ドキュメント)
+ 「[change\$1resource\$1record\$1sets メソッド](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.change_resource_record_sets)」 (Boto3 ドキュメント)

**チュートリアルと動画**
+ 「[Python チュートリアル](https://docs.python.org/3/tutorial/)」 (Python ドキュメント)
+ 「[Amazon Route 53 を使用した DNS 設計](https://www.youtube.com/watch?v=2y_RBjDkRgY)」 (YouTube ビデオ、*AWS オンライン Tech Talks*)