[AWS Route53]購入したドメインでEC2インスタンスのwebサーバーにアクセスする手順 ~備忘録~

## はじめに
この記事はプログラミング初学者による備忘録用の記事であり、また、少しでも他の初学者のお役に立てればと思い書いています。

今回は、ドメインを購入後、EC2上のwebサーバーにドメイン名でアクセスする方法を学びましたので、すぐに復習できるよう記事にまとめておきたいと思います。

間違いなどがございましたら、ご指摘のほどよろしくお願い致します。

## ドメインとは
ドメインとは、文字列で構成されていてIPアドレスと同じ役割を果たすものです。

IPアドレスは、コンピューター向けのネットワーク上の住所であり、ドメインは人間向けのネットワーク上の住所となります。
**ドメインはグローバルIPアドレスと同様に一意であり、同じドメインは存在しません。**

## ドメインの構造
ドメインの構造は、ピリオドで区切られており、右から左の流れで区分けされています。

例えば、住所の表記は「○○府 ○○市 ○○区 ○○町」といったように、右に行くほど区分けが細かくなりますが、ドメインの場合は逆になります。
下記のドメインの場合、住所表記に当てはめると「jp府 co市 example区 www町」といったように右から左という方向で区分けされています。

``例``
![スクリーンショット 2021-08-24 17.41.04 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/52c5e532-e40d-7818-f2b8-e052fbc08f92.png)

## なぜドメインでアクセスできるのか
ドメインは文字列で構成されているため、人間にとって分かりやすいものですが、コンピュータ同士の接続ではIPアドレスが利用されるため、IPアドレスが必要になります。

そのため、ドメインを利用して接続する際は、ドメインをIPアドレスに変換するための**DNS**と呼ばれる仕組みが必ず使われます。

### DNSとは
DNS (ドメインネームシステム) は、人間が読み取れるドメイン名を機械が読み取れるIPアドレスに変換する仕組みであり、
IPアドレスとドメイン名の対応を管理することで、IPアドレスとドメインが紐付いた状態となっています。
また、DNSには**ネームサーバー**と**フルサービスリゾルバ**などの構成要素が存在します。

``ネームサーバー(DNSサーバー):``

ドメインとそれに紐付くIPアドレスが登録されている名前解決をするサーバーで、電話帳のようなものです。
ドメインの階層(ゾーン)ごとにネームサーバーが配置され、そのネームサーバーが配置された階層のドメインに関する情報を管理しています。

``フルサービスリゾルバ（キャッシュDNSサーバー）:``

フルサービスリゾルバは、名前解決をする際、同じ問い合わせを繰り返すといった非効率を避けるために、名前解決の際に得られた情報を内部にキャッシュとして保存し、再利用可能とします。

ドメインとIPアドレスの紐付けに関して、まず初めにキャッシュDNSサーバーが持つ既存のキャッシュに、ドメインに紐づくIPアドレスが存在するかを確認し、該当するIPアドレスがない場合、他のDNSサーバにドメインに紐付くIPアドレスの問い合わせをする仕組みになっています。

**※名前解決とは**
ドメイン名は、DNSの仕組みによってIPアドレスと紐づけられていて、クライアントパソコンにはリゾルバーというソフトウエアが稼働しており、DNSサーバーと通信してドメイン名からIPアドレスを調べる仕組みになっています。これを名前解決といいます。

## 購入したドメインを使いEC2インスタンス内のwebサーバーにアクセスする仕組みとは
お名前.comなどで購入したドメインでEC2インスタンス上のwebサーバーにアクセスできるようにする際に利用されるのが、AWSのDNSサービスである**Route53**です。

### Route53とは
AWSのDNSサービスであり、**ネームサーバーの役割**を果たします。

>**Amazon Route 53**は、可用性と拡張性に優れたクラウドのドメインネームシステム (DNS) ウェブサービスです。Amazon Route 53 は、www.example.com のような名前を、コンピュータが互いに接続するための数字の IP アドレス (192.0.2.1 など) に変換するサービスで、デベロッパーや企業がエンドユーザーをインターネットアプリケーションにルーティングする、きわめて信頼性が高く、コスト効率の良い方法となるよう設計されています。
``引用:``[Amazon Route 53](https://aws.amazon.com/jp/route53/)

``主な特徴``

**・高い可用性と信頼性**
AWS の高い可用性と信頼性を備えるインフラストラクチャを使用して構築されています。SLA100%

**・高速**
Amazon Route 53 は、世界中に存在するDNSサーバーのグローバルエニーキャストネットワークを使用し、ネットワークの状況に応じてユーザーを適切なエッジロケーションにルーティングします。ユーザーに最も近いエッジロケーションから応答を返す仕組みとなっている為、非常に高速な通信が行えるようになっています。

※エッジロケーション・・・Route53を提供する地域のこと

**・スケーラブル**
Route 53 は、ユーザーが一切介入することなく、大量のクエリを処理するために自動的にスケールするように設計されています。

**・フルマネージドサービス**
障害やバックアップに関する作業をAWS側が自動的にやってくれる為、DNSサーバーの設計・構築・管理等を行う必要がありません。

### Route53における基礎概念
**・ホストゾーン**
DNSリソースレコードの集合体のことを指し、DNSゾーンファイルに似ています。
通常のDNSの場合、階層(ゾーン)ごとにネームサーバーが分かれていて、そのゾーンに存在するリソースレコードをネームサーバーが管理している。
ゾーン内にあるリソースレコード全てが、Route53ではホストゾーンにあたります。

>ホストゾーンは、従来の DNSゾーンファイルと類似しています。シングルの親ドメイン名に属し、まとめて管理可能なレコードの集合を表します。ホストゾーン内のすべてのリソースレコードセットは、ホストゾーンのドメイン名をサフィックスとして持っていなければなりません。
``引用:``[Amazon Route53 よくある質問](https://aws.amazon.com/jp/route53/faqs/)

**・レコードセット**
DNSにおけるリソースレコードと同意であり、DNSにおいて、あるドメイン名やホスト名の設定を定義したひとまとまりのデータとされています。
<br>
**・ルーティングポリシー**
Route53がレコードセットに対してどのようにルーティングを行うかのルールを決めるものです。

レコードを作成するときは、Route53がクエリに応答する方法を決定するルーティングポリシーを選択します。
ルーティングポリシーに関する詳細な情報は[リンク先](https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/routing-policy.html)を確認してください。

**・ヘルスチェック**
特定のサーバー上のサービスに、作業を正常に実行できるかどうかを確認する方法です。

ヘルスチェックは、システムへ不均衡な損害をもたらす可能性やソフトウェアの一部がある時点でクラッシュする可能性などに対して、問題を自動的に検出して対応します。

## Route53を使いDNSを設定する手順
購入したドメインでwebサーバーにアクセスできるように設定します。
今回は購入したドメイン名を、``www.test-infra.com``と仮定します。

ドメインを使用してwebサーバーにアクセスする流れは下の図のようになります。

![スクリーンショット 2021-08-27 16.41.42 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/f28e60d5-4aa8-1773-9d55-66e79dc95c2e.png)



では、下記にて設定手順をまとめておきます。

### 1.Route53でホストゾーンを作成する
AWSサービス一覧からRoute53を選択後、ホストゾーン一覧画面でホストゾーンの作成を選択してホストゾーン作成画面に遷移します。

作成画面で**ドメイン名(購入済みのもの)**と**タイプ(パブリックホストゾーン)** を入力して作成を実行すると、作成したパブリックホストゾーンごとに、Route53は``ネームサーバー (NS) レコード``と``Start of Authority (SOA) レコード``を自動的に作成します。

![スクリーンショット 2021-08-26 16.51.47 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/1a796911-dec3-e281-a626-a39011b81648.png)

``補足``

**・NSレコードとは**
ドメインを管理するために、ホストゾーンの4つの正式なネームサーバーがリストされます。
基本的に、レコードのネームサーバーを追加、変更、または削除しないことが推奨されています。

※初期状態では、ドメインのネームサーバーは**Route53ではありません**。
下記コマンドを実行すると、購入先で自動的に設定されたネームサーバーが表示されます。

```
[ec2-user@ ~]$ dig ドメイン名 NS +short
dns1.xxxx.com.
dns2.xxxx.com.
```
この状態のままでは、上記のドメイン名にアクセス後、IPアドレスの問い合わせがあった際に、ドメインのネームサーバーが**xxxx.com.のネームサーバーがIPアドレスの情報を保持している**と答えてしまいます。
従って、ドメインを購入したサイト上で、購入したドメインのネームサーバーをRoute53に変更する必要があります。

**・SOAレコードとは**
ドメインについてのDNS情報を管理します。

### 2.購入先でドメインのネームサーバーを変更する
下記のような画面で、ネームサーバーの入力欄に、``Route53のNSレコードの4つの値を入力します。``

![スクリーンショット 2022-03-17 18.48.54（2）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/0e7be66a-65d5-0565-55e7-c6d9edd165f0.png)




### 3.作成したホストゾーンにAレコードを追加する
Route53に、**ドメインとEC2インスタンスのIPアドレスを紐付けるAレコードの登録**を行います。

ホストゾーン詳細画面からレコードを作成を選択してレコード作成画面に遷移します。

![スクリーンショット 2021-08-26 16.51.47 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/c5016fb0-a79e-6fd8-4892-82cd22ab1139.png)

遷移後、下のような作成画面で必要事項を入力してレコードを作成します。

![スクリーンショット 2021-08-26 17.19.57 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/adcd72e5-31a8-db1e-c6e3-c589640ad553.png)

**~項目の説明~**
``レコード名:``
ドメイン名のままアクセス可能にしたい場合は空欄のままにします。

``レコードタイプ:``
ドット形式10進表記のIPv4アドレスを使用して、ウェブサーバーなどのリソースにトラフィックをルーティングするためにAレコードを選択します。

その他のレコードタイプの詳細は、[リンク先](https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/ResourceRecordTypes.html#AFormat)を確認してください。

``値:``
接続するEC2インスタンスのパブリックIPアドレスを入力します。

~注意点~
通常のパブリックIPアドレスの場合、EC2インスタンスを停止して再起動した際に、別のパブリックIPアドレスが割り当てられるので、**ElasticIPアドレスを割り当てアクセスするIPアドレスを固定します。**

``エイリアス:``
IPアドレスの代わりにAWS専用の名前で紐づけるオプションですが、今回は使用しないので選択していません。

``TTL:``
フルリゾルバにドメイン名とIPアドレスが紐づいたデータをキャッシュしておく秒数を指定します。

``ルーティングポリシー:``
サーバーが複数存在する場合に選択します。
サーバーが一台の場合はシンプルルーティングを選択します。

作成を実行後、下のようにAレコードが追加されているとAレコードの作成は成功です。
![スクリーンショット 2021-08-26 17.30.17 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891113/f4767e89-f4ac-c6c1-a4b9-3df302b54d91.png)


これで、webブラウザにドメイン名を入力すると、EC2インスタンス(webサーバー)にアクセスすることができます。

### 補足
``注意点``
お名前.comでドメインを作成した場合、デフォルトの設定でお名前.comのネームサーバーにアクセスしてしまうので、お名前.comのサイトでRoute53のNSレコード4つを追加して、Route53のNSレコード(ネームサーバー)にアクセスするように設定します。

設置が完了しているかを確認する際は、ターミナルでEC2インスタンスにログインして``$ dig ドメイン名 NS +short``と入力するとRoute53のネームサーバーになっていることが確認できます。

## 参考文献
[Amazon Route 53 のドキュメント](https://docs.aws.amazon.com/ja_jp/route53/index.html)
[Amazon Route53 よくある質問](https://aws.amazon.com/jp/route53/faqs/)
[ヘルスチェックの実装](https://aws.amazon.com/jp/builders-library/implementing-health-checks/)
[Amazon Route 53 がパブリックホストゾーンに作成する NS レコードと SOA レコード](https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/SOA-NSrecords.html)