独自ドメインのホスト名でEC2上のページにアクセスする

# はじめに
AWSでのドメインの取得とDNSレコードの設定を勉強した際のまとめです。

# 概要
AWSで取得した独自ドメインのホスト名をEC2インスタンスに割当て、EC2上にホスティングしたサイトにアクセスすることが目的です。
独自ドメインのホスト名の割当てを行う際にはRoute 53のDNSレコードの設定を行う必要があります。
参考 : Route 53を用いた名前解決の流れ
https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/welcome-dns-service.html

具体的に必要な手順は以下になります。

1. EC2(Webサーバ)の立ち上げ
2. EC2にElastic IPを設定
3. ドメインの取得
4. DNSレコードの設定
5. 設定の確認

# 利用料金に関して
今回以下の部分でAWSの課金が発生します。

 - ドメインの取得(ドメインによって異なります。ドメイン名の取得の項を参照してください。)
 - Route 53のホストゾーン利用 (0.50 USD/月)
 - ホスト名のクエリ (0.400 USD/100万クエリ)
 
参考 : Route 53料金表
https://aws.amazon.com/jp/route53/pricing/

# 手順の解説
### EC2(Webサーバ)の立ち上げ
EC2の立ち上げはCloudFormatoinを利用しています。
前回書いた記事(https://qiita.com/tyoshitake/items/c5176c0ef4de8d7cf5d8 )のテンプレートを修正して利用しています。
EC2インスタンスのUserDataプロパティを修正しており、修正後のコードは以下のようになります。

```yaml
UserData: !Base64 |
        #!/bin/bash
        
        # Appachのインストール
        yum install -y httpd

        # アクセスするページの作成
        echo '<p>Hello!</p>' > /var/www/html/index.html

        # Appachの起動
        systemctl start httpd.service
```
ユーザーデータ部分で

- apacheのインストール
- アクセス時に表示するページの作成
- apacheの起動

を行っています。

### EC2にElastic IPを設定
この操作はテンプレートに記述して実行することも可能ですが、今回は手動で行いたいと思います。
EIPはパブリックかつ固定のIPアドレスです。
参考 : Elastic IP
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html

まずマネージメントコンソールでEC2サービスにアクセスします。
次にEC2のページ左側のメニューからElastic IP(EIP)を選択します。
<img width="1440" alt="スクリーンショット 2019-06-01 23.15.47 fig1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/380830/8bd312fe-2464-140b-e5d8-6fb158c00d9c.png">


EIPのメニューから「新しいアドレスの割当て」⇒「割当て」をクリックすると新しいアドレスの作成完了ページに遷移し、EIPの作成が完了します。
<img width="1440" alt="スクリーンショット 2019-06-01 23.18.53 fig2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/380830/5d46996e-688e-9ec5-7567-08911278700e.png">

次に作成したEIPをEC2インスタンスに関連付けます。
EC2のページ左側のメニューのElastic IPをクリックすると先程作成したEIPが表示されるので、選択した状態でページ上部のアクションボタンをクリックするとメニューが表示されます。ここで表示されるメニューの「アドレスの関連付け」をクリックします。
<img width="1440" alt="スクリーンショット 2019-06-01 23.19.06 fig3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/380830/c1bb3adc-1f2f-1fc9-4ff2-be763b828cff.png">


アドレスを関連付ける対象を選択する画面に移るので、以下のように選択します。

- リソースタイプ ⇒ 「インスタンス」
- インスタンス ⇒ EIPを関連付けるEC2インスタンス
- プライベートIP ⇒ EIPを関連付けるEC2インスタンスのプライベートIP

選択した後は画面下の関連付けボタンをクリックします。これでEIPの関連付けが行われました。
(EIPをEC2に関連付けることで、EC2に設定していたパブリックIPは開放され使えなくなります。)
**注意点:作成したEIPは、関連付けを行わない、または関連付けたインスタンスが停止している場合は課金が発生するので注意が必要です。**

<img width="1440" alt="スクリーンショット 2019-06-01 23.19.44 fig4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/380830/52ce3477-2169-a44d-b932-f8cb9a3c97ce.png">


### ドメインの取得
次にドメインの取得を行います。
基本的にAWSの画面に従って進めることでメインを取得できます。
マネージメントコンソールからRoute 53のページにアクセスします。
遷移先のページ左側のメニューから「登録済みドメイン」を選択し、ページ上部の「ドメインの登録」をクリックします。
<img width="1440" alt="スクリーンショット 2019-06-01 23.21.39 fig5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/380830/60170680-0456-226c-29ac-070236eeebe7.png">


ドメイン名の選択画面に移るので、希望のドメイン名とトップレベルドメインを選択します。
希望のドメイン名を入力したらチェックボタンをクリックし、利用可能か確認します。
トップレベルドメインは多数の中から選択可能で、取得価格も異なります。
参考 : TLD価格表($/年)
https://d32ze2gidvkk54.cloudfront.net/Amazon_Route_53_Domain_Registration_Pricing_20140731.pdf

今回取得価格が最も安かったためme.ukを選択しました($8.00/年)。
取得したドメインはtekito.me.uk.です。
<img width="1440" alt="スクリーンショット 2019-06-01 23.38.33 fig6.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/380830/44a159b3-b1a7-f588-d031-e5d6a1ddcb3b.png">


ドメイン選択後ページ下部の「続行」ボタンをクリックするとドメイン取得に必要な連絡先入力画面になります。
**個人でドメインを作成する場合は連絡先入力画面下部にあるプライバシー保護を有効化しておきましょう。**
必要な項目を入力して最終確認画面に遷移します。

確認画面下部にはドメインの自動更新の有無の選択と規約への同意に関するチェックボックスがあるので、選択して購入を確定します。
今回は勉強目的のドメインなので、自動更新は無効としました。

以上の作業終了後ドメインが利用可能になるまで若干時間がかかります(進捗状況はRoute 53のダッシュボードで確認できます。実際の作業時は数十分程度かかりました)。
また、連絡先のメールアドレスの確認のメールが後ほど送られてくるので登録したアドレスの有効化を行いましょう。登録したメールアドレスの有効化を行わないとドメインが使えなくなります。
以上でドメインの取得は完了です。

### DNSレコードの設定
Route 53のパブリックホストゾーンに取得したドメインのホスト名とEIPの設定を行います。
これを行うことで取得したドメインのホスト名の名前解決が可能となり、ホスト名を用いたアクセスを行うことができます。
まずRoute 53のページに移動し画面左メニューの「ホストゾーン」を選択します。
ドメイン登録時に自動で作成されたホストゾーンがあるので選択して「レコードセットに移動」をクリックします。
<img width="1440" alt="スクリーンショット 2019-06-02 12.35.03 fig7.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/380830/06a3e44c-7468-b77e-f854-a3ed6651ccb8.png">


レコードセットの画面では作成したドメインに関するDNSレコードが表示されています(すでにあるレコードは登録時に自動作成されたものです)。

DNSレコードにはいくつか種類があるのですが、今回関係するのは以下のレコードです。

- Aレコード : ホスト名とIPアドレス(IPv4)の対応を記したレコード。

参考 : AWSでサポートしているDNSレコード種類
https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/ResourceRecordTypes.html

画面上部の「レコードセットの作成」をクリックし、レコードの設定に進みます。
<img width="1440" alt="スクリーンショット 2019-06-02 12.35.27 fig8.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/380830/daef08b2-d47f-5a67-83ff-b8cd1f054e2d.png">


アクセス先のIP(EC2のEIP)とホスト名の関係をAレコードとして設定します。
画面右側の設定画面の項目に以下の設定を行います。

- 名前: www.tekito.me.uk.
- タイプ: A - IPv4 address
- エイリアス: いいえ
- 値: (EC2インスタンスに関連付けたEIP)

入力部下の「作成」ボタンを押すことでAレコードの設定が完了します。
<img width="1440" alt="スクリーンショット 2019-06-02 12.36.08 fig9.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/380830/f653c2c4-0feb-8a6e-508d-a37dd1f3b5fc.png">


# 設定の確認
設定したホスト名でページにアクセスできることを確認します。
レコードの設定を行ってからアクセスできるようになるまで数分程度かかりました。
<img width="1440" alt="スクリーンショット 2019-06-02 12.54.57 fig10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/380830/6bd83d36-020d-49e3-e8d5-102191ffdf4d.png">

# おわりに
- ドメインの取得が思っていたよりも簡単にできて驚きました。
- Aレコード以外のDNSレコードについても今後勉強しておきたいと思います。

# 参考
Route 53の料金体系
https://aws.amazon.com/jp/route53/pricing/

ドメインの登録
https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/registrar.html

ホストゾーン設定
https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/AboutHZWorkingWith.html