DNSの基礎から実践まで!Route 53でドメインとAWSサービスを繋ぐ
こんにちは!現役エンジニアのakrです。
「【AWSプロフェッショナルへの道】現役エンジニアが贈るクラウド実践ガイド」の第5回をお届けします。前回はS3とCloudFrontを使って、サーバレスで高速な静的Webサイトを構築する方法を学びましたね。Webサイトが公開できたら、次は「example.com
」のような分かりやすい独自ドメインでアクセスできるようにしたいと思うはずです。
今回は、インターネットの住所録とも言えるDNS (Domain Name System) の基礎から、AWSが提供する高機能なDNSサービスであるRoute 53 (Amazon Route 53) を使って、取得したドメイン名とAWSの各種サービス(S3、CloudFront、EC2など)を連携させる方法を徹底的に解説します。
「DNSって仕組みが複雑そう...」と感じるかもしれませんが、ご安心ください。本記事では、DNSの基本的な役割から、Route 53の具体的な設定方法までを、ハンズオン形式で分かりやすく説明していきます。
1. DNSとは?インターネットの「住所録」を理解する
インターネット上の全てのコンピューターには、固有の「IPアドレス」が割り当てられています。例えば、前回のEC2インスタンスにはパブリックIPアドレスがあり、S3の静的WebサイトホスティングにもエンドポイントURLがありました。しかし、これらの数字の羅列や複雑なURLを人間が記憶して利用するのは非常に困難です。
そこで登場するのが「DNS (Domain Name System)」です。DNSは、人間が覚えやすい「ドメイン名」(例: google.com
, qiita.com
)と、コンピューターが認識する「IPアドレス」(例: 172.217.175.142
)を紐付けるシステムです。例えるなら、DNSはインターネット上の「電話帳」や「住所録」のような役割を果たしています。
DNSの仕組み(超基本)
-
ユーザーがブラウザにドメイン名を入力(例:
example.com
)。 - ブラウザは、DNSサーバー(DNSリゾルバー)に
example.com
のIPアドレスを問い合わせます。 - DNSサーバーは、階層構造になった世界中のDNSサーバーに順次問い合わせを行い、最終的に
example.com
を管理している「権威DNSサーバー」に到達します。 - 権威DNSサーバーは、
example.com
に対応するIPアドレスを返します。 - ブラウザはそのIPアドレスを使って、Webサーバーにアクセスし、Webサイトを表示します。
この一連のやり取りが、瞬時に行われることで、私たちはドメイン名だけでWebサイトにアクセスできるのです。
2. Route 53とは?AWSのDNSサービス
Amazon Route 53は、AWSが提供する高可用性かつスケーラブルなクラウドDNS Webサービスです。ドメイン名の登録、DNSレコードの管理、ヘルスチェックなど、DNSに関する様々な機能を提供します。その名前は、一般的なDNSサービスがポート53を使用することに由来しています。
Route 53の主な特徴
-
ドメイン登録:
example.com
のような独自ドメインを直接Route 53で取得・管理できます。 - DNSルーティング: ドメイン名とIPアドレスの紐付け(レコードセットの管理)を行います。高速で信頼性の高いDNS解決を提供します。
- トラフィックルーティング: ユーザーの地理的位置やリソースのヘルス状態に基づいて、トラフィックを複数のエンドポイントにルーティングできます(レイテンシーベースルーティング、ジオロケーションルーティング、フェイルオーバールーティングなど)。
- ヘルスチェックとフェイルオーバー: リソース(EC2、ELBなど)のヘルス状態を監視し、異常を検知した場合は健全なリソースにトラフィックを自動的に切り替えることができます。
- Private Hosted Zone: VPC内部でのみ利用可能なプライベートDNSサービスを提供します。これにより、プライベートIPアドレスを持つリソースに独自ドメインでアクセスできます。
今回は、主に「ドメイン登録」と「DNSルーティング(レコードセットの管理)」に焦点を当てて学習を進めます。
3. Route 53の主要な構成要素
Route 53でDNSを設定する際に登場する重要な要素を理解しましょう。
3.1. ホストゾーン (Hosted Zone)
「ホストゾーン」は、特定のドメイン名(例: example.com
)とそのサブドメイン(例: www.example.com
)のDNSレコードを格納するコンテナです。
- パブリックホストゾーンとプライベートホストゾーンの2種類があります。
- パブリックホストゾーン: インターネット上で解決可能なドメイン名を管理します。
- プライベートホストゾーン: VPC内部でのみ解決可能なドメイン名を管理します。オンプレミスのDNSサーバーと同じように、プライベートIPアドレスを持つリソースに名前解決を行いたい場合に利用します。
3.2. レコード (Record Set)
ホストゾーン内に作成する「レコード」は、ドメイン名とIPアドレスやその他の情報を紐付ける具体的なルールです。様々なタイプがあります。
主要なレコードタイプ:
-
Aレコード (Address Record): ドメイン名(例:
example.com
)をIPv4アドレス(例:192.0.2.1
)にマップします。最も基本的なレコードです。 - AAAAレコード (Quad-A Record): ドメイン名をIPv6アドレスにマップします。
-
CNAMEレコード (Canonical Name Record): あるドメイン名(例:
www.example.com
)を別のドメイン名(例:s3-website-us-east-1.amazonaws.com
)のエイリアスとして定義します。 - NSレコード (Name Server Record): そのドメインの権威DNSサーバーを指定します。ホストゾーンを作成すると自動的に割り当てられます。
- SOAレコード (Start of Authority Record): ドメインのゾーン転送情報や管理者のメールアドレスなどを定義します。ホストゾーンを作成すると自動的に割り当てられます。
- MXレコード (Mail Exchange Record): ドメインのメールサーバーを指定します。
- TXTレコード (Text Record): テキスト情報を格納します。SPFレコードやDKIMレコードなど、メール認証によく利用されます。
3.3. エイリアスレコード (Alias Record)
Route 53特有のレコードタイプで、特定のAWSリソース(ELB、CloudFrontディストリビューション、S3バケット、APIGatewayなど)にドメイン名をマッピングする際に使用します。
-
通常のCNAMEレコードとの違い:
-
ルートドメイン (Zone Apex) の設定が可能:
example.com
のようにサブドメインなしのルートドメインに対してもエイリアスレコードを設定できます。CNAMEレコードではルートドメインを設定できません。 - 料金: エイリアスレコードは、対象のAWSサービスへのDNSクエリに対して料金が発生しません。
- ヘルスチェック連携: エイリアスレコードは、対象のAWSリソースのヘルスチェック状態を自動的に引き継ぐことができます。
-
ルートドメイン (Zone Apex) の設定が可能:
独自ドメインをAWSサービスに割り当てる際は、可能な限りエイリアスレコードを使用することが推奨されます。
4. 実践!独自ドメインをCloudFrontに紐付けよう
前回の記事でS3とCloudFrontを使って静的Webサイトを公開しました。今回は、そのCloudFrontディストリビューションに独自ドメイン(例: your-qiita-website.com
)を割り当て、HTTPSでアクセスできるようにする手順を解説します。
事前準備
-
独自ドメインの取得: まず、任意のドメインレジストラ(お名前.com、GoDaddy、Amazon Route 53など)で独自ドメインを取得してください。今回は、Route 53でドメインを登録する前提で進めますが、他社で取得したドメインでも基本的な考え方は同じです。
- もしRoute 53でドメインを登録済みであれば、このステップはスキップできます。
-
SSL/TLS証明書の発行 (ACM): HTTPSでアクセスするために、SSL/TLS証明書が必要です。CloudFrontで利用する場合、証明書は必ずバージニア北部(
us-east-1
)リージョンで発行する必要があります。- AWSマネジメントコンソールで、リージョンを「バージニア北部」に変更します。
- 「ACM (AWS Certificate Manager)」サービスに移動します。
- 「証明書をリクエスト」をクリックし、「パブリック証明書をリクエスト」を選択します。
- 「ドメイン名を追加」で、取得した独自ドメイン名(例:
your-qiita-website.com
と*.your-qiita-website.com
)を入力します。*.your-qiita-website.com
を含めることで、www.your-qiita-website.com
など任意のサブドメインにも対応できます。 - 「DNS検証」を選択し、リクエストを送信します。
- ステータスが「保留中の検証」になったら、ACMの画面に表示されるCNAMEレコードの情報を控えます。
- Route 53にドメインのホストゾーンがある場合、「Route 53 でレコードを作成」ボタンをクリックすると、自動的にRoute 53にCNAMEレコードが作成され、検証プロセスが進みます。
- 検証が成功すると、ステータスが「発行済み」に変わります。これには数分から数十分かかる場合があります。
4.1. Route 53でホストゾーンを作成(ドメインを他社で取得した場合)
Route 53でドメインを取得していれば、自動的にホストゾーンが作成されています。もし他社で取得したドメインを使う場合は、Route 53にそのドメインのホストゾーンを作成します。
- AWSマネジメントコンソールで「Route 53」サービスに移動します。
- 左のナビゲーションペインから「ホストゾーン」を選択し、「ホストゾーンを作成」をクリックします。
-
ドメイン名: 取得した独自ドメイン名(例:
your-qiita-website.com
)を入力します。 - タイプ: 「パブリックホストゾーン」を選択します。
- 「ホストゾーンを作成」をクリックします。
- 作成されたホストゾーンには、NSレコードとSOAレコードが自動で作成されます。NSレコードに表示されているネームサーバーのリスト(例:
ns-xxx.awsdns-xx.org
など4つ)を控えます。 - 重要: 取得したドメインのドメインレジストラ(お名前.comなど)の管理画面で、ネームサーバーの設定を、Route 53で表示された4つのネームサーバーに必ず変更してください。 これにより、このドメインのDNS解決がRoute 53で行われるようになります。この反映には数時間〜最大48時間かかることがあります。
4.2. CloudFrontディストリビューションの設定更新
前回の記事で作成したCloudFrontディストリビューションに、独自ドメインとSSL/TLS証明書を設定します。
- AWSマネジメントコンソールで「CloudFront」サービスに移動します。
- 対象のディストリビューションを選択し、「編集」をクリックします。
-
代替ドメイン名 (CNAME):
- 「項目を追加」をクリックし、独自ドメイン名(例:
your-qiita-website.com
)と、必要であればwww.your-qiita-website.com
などを追加します。
- 「項目を追加」をクリックし、独自ドメイン名(例:
-
カスタムSSL証明書:
- 「ACMで証明書をリクエスト」または「証明書をインポート」を選択します。
- ドロップダウンリストから、先ほどバージニア北部リージョンで発行したSSL/TLS証明書を選択します。
- 「変更を保存」をクリックします。
- この変更のデプロイには、再度10分〜20分かかる場合があります。ステータスが「デプロイ済み」になるまで待ちましょう。
4.3. Route 53でエイリアスレコードを設定
最後に、独自ドメイン名がCloudFrontディストリビューションを指すように、Route 53でエイリアスレコードを設定します。
- AWSマネジメントコンソールで「Route 53」サービスに移動します。
- 左のナビゲーションペインから「ホストゾーン」を選択し、あなたの独自ドメインのホストゾーン(例:
your-qiita-website.com
)をクリックします。 - 「レコードを作成」をクリックします。
- ルーティングポリシー: 「シンプルルーティング」のまま進めます。
- 「シンプルルーティングの定義」をクリックし、「定義を追加」をクリック。
-
レコード名: ルートドメイン(例:
your-qiita-website.com
)の場合は空欄、www.your-qiita-website.com
のようにサブドメインを設定する場合はwww
と入力します。 - レコードタイプ: 「A - IPv4 アドレス」を選択します。
- エイリアス: 「エイリアスを有効にする」にチェックを入れます。
- Route traffic to: テキストボックスをクリックし、「CloudFront ディストリビューションへのエイリアス」を選択後、ドロップダウンリストからあなたのCloudFrontディストリビューションを選択します。
- 「シンプルルーティングの定義を作成」をクリック。
-
レコード名: ルートドメイン(例:
- 「レコードを作成」をクリックします。
これで、https://your-qiita-website.com
または https://www.your-qiita-website.com
で、あなたのWebサイトにアクセスできるようになります!
5. その他のRoute 53活用例
Route 53は、静的Webサイトの公開以外にも様々な場面で活用できます。
-
EC2インスタンスへのドメイン割り当て:
- EC2のELB(Elastic Load Balancing)を使用している場合は、ELBに対してAレコードのエイリアスを設定します。
- ELBを使わず、EC2インスタンスに直接アクセスさせる場合は、インスタンスにElastic IPを割り当て、そのEIPに対してAレコードを作成します。
-
Private Hosted Zone:
- VPC内のプライベートIPアドレスを持つデータベースや内部アプリケーションに、分かりやすいドメイン名でアクセスしたい場合に利用します。例えば、
my-db.internal
のようなドメイン名でプライベートIPを持つRDSにアクセスできます。
- VPC内のプライベートIPアドレスを持つデータベースや内部アプリケーションに、分かりやすいドメイン名でアクセスしたい場合に利用します。例えば、
-
高度なトラフィックルーティング:
- フェイルオーバールーティング: プライマリリソースがダウンした場合に、セカンダリリソースに自動的にトラフィックを切り替えます(DR対策)。
- レイテンシーベースルーティング: ユーザーに最も近いリージョンのリソースにトラフィックをルーティングし、レイテンシーを低減します。
- ジオロケーションルーティング: ユーザーの地理的な場所に基づいて、特定のリージョンのリソースにトラフィックをルーティングします。
- 重み付けルーティング: 複数のリソースにトラフィックを分散させ、トラフィックの割合を制御します(A/Bテストなど)。
これらの高度なルーティングポリシーは、大規模なアプリケーションやグローバルサービスを構築する際に非常に強力な機能となります。
まとめ
今回は、インターネットの重要な基盤であるDNSの基礎から、AWSのDNSサービス「Route 53」を使った実践的なドメイン設定までを学びました。
- DNSは、ドメイン名とIPアドレスを紐付ける「インターネットの住所録」です。
- Route 53は、AWSのDNSサービスで、ドメイン登録、DNSルーティング、ヘルスチェックなど多機能を提供します。
- ホストゾーン とレコード(特にエイリアスレコード) がRoute 53の主要な構成要素です。
- 実際に独自ドメインをCloudFrontディストリビューションに紐付け、HTTPSでアクセスできるように設定する手順を実践しました。
これで、皆さんのWebサイトは「https://your-qiita-website.com
」のような、よりプロフェッショナルな見た目になりましたね!DNSは普段意識しない部分ですが、クラウドサービスを構築・運用する上では必要不可欠な知識です。ぜひ、今回のハンズオンを通じて、その仕組みを体感してください。
この記事が皆さんのAWS学習の一助となれば幸いです。
もしこの記事が役に立ったと感じたら、ぜひ「いいね」👍をお願いします!励みになります!