今さら聞けないAWSでロードバランサーを使ったWEBサイト構築手順(DNSとSSL証明書編)

AWSでロードバランサーを使ったWEBサイト構築手順を記載していきます。
私自身つい1年前まではオンプレばかりでAWSをほとんど触ったことがなかったのですが、オンプレ時代にAWSで躓いたところを中心に丁寧に解説できればと思いこの記事を作成しました。

## 今回のやりたいこと
・ロードバランサー配下にWEBサーバーを配置して基本的なWEBサイトを作る
・SSL証明書はACM(AWS Certificate Manager)を使って無料で発行する
・WEBサーバーは外部から直接SSHできないようにするがApacheのパッケージは取得できるようにする
・最終的にブラウザでWEBサイト(独自ドメイン)が閲覧できるようにする

## 構成図
以下のような構成を想定しています。
![ksawada1979dns_SSL.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/186b0c10-782d-e594-5bff-37862327e130.png)

そして今回のDNSとSSL証明書編では赤枠部分の解説をしていきます。

丁寧に解説していくと長くなるので
・DNSとSSL証明書編
・ネットワーク編
・サーバー編
・ロードバランサー編
の4つに分けて解説していきます。わざわざ分けるのは私自身が長文になると読むのが嫌になるので分けます。

## ドメイン取得
まず独自ドメインを取得します。
今回の例ではksawada1979.comというドメインを取得します。
ドメインの取得は「お名前.com」などで取得してください。どこで取得しても問題ありません。

## DNS設定
次に取得したドメインをRoute 53に登録します。

AWSマネジメントコンソールのRoute53に移動します。
「ホストゾーン」→「ホストゾーンの作成」をクリックします。
![route53_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/389352f3-27ec-848d-90b9-b2f3db12676b.png)

次に取得したドメイン名を入力し「パブリックホストゾーン」を選択し「ホストゾーンの作成」をクリックします。
![route53_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/a5b8af68-a79f-db36-a740-f6c171985746.png)

無事にホストゾーンが作成されたことを確認します。
この時赤枠で囲われているNSレコード4つを後で使用するので控えます。
以下の画面ショットの例は私の環境で表示されたNSレコードですので、そのまま使用せずに実際に表示されたNSレコードを使用してください。
![route53_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/28de6f15-77c4-0d3f-a601-d359bdb19b50.png)

上記でAWS側の設定は完了ですが、実はこの時点でksawada1979.comというドメインはAWSの設定を見てくれていません。
そのためにドメイン側に設定が必要になります。

## ドメイン側の設定
ドメイン側でネームサーバーの設定を行います。
仮にお名前.comでドメインを取得した場合を例に出しますがお名前.com側でネームサーバー設定が必要になります。
画面は「お名前.com」の画面になります。ネームサーバーの設定を選択します。
お名前.com以外でも同様にネームサーバー設定画面がありますので、ネームサーバー画面に移動します。

![Route53_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/0052e8b1-1984-58a8-10b8-174921a7ed4d.png)

次にネームサーバーを入力します。「他のネームサーバーを利用」を選択してホストゾーン作成時に表示された4つのNSレコードを入力します。
最後の.(ドット)は入力不要です。
![Route53_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/961db69f-c322-73f9-cb78-d436fa9c8d09.png)
以上でドメイン側の設定は完了です。これでksawada1979.comというドメインはAWSの設定を見るようになります。

## SSL証明書の発行
AWS Certificate Manager(ACM)を利用してSSL証明書の発行をしていきます。
ACMは無料で利用可能な上に、自動的にローテーションして更新してくれるために、年に１度証明書の発行し直しと適用作業の必要がなく非常に便利です。
元オンプレ住民としてこのあたりは地味ですが楽だなーと痛感します。

では、SSL証明書を発行していきましょう。
まずAWSマネジメントコンソールから「AWS Certificate Manager」のページへ移動します。
移動したら「証明書一覧」→「リクエスト」をクリックします。
![acm_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/fe8252fd-4d35-16b4-9184-35ff5e9264fb.png)

次に「パブリック証明書をリクエスト」を選択して「次へ」をクリックします。
![acm_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/9179e84c-e90b-a68f-1f2a-129ea4207dbc.png)

次に「ドメイン名」を入力し、「DNS検証」を選択して「リクエスト」をクリックします。
![acm_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/83a52082-5d50-fbc2-c4ce-7e154ebd3444.png)

証明書が作成されますがステータスが「保留中の検証」であることを確認します。
ここでは証明書IDの赤枠で囲われているID部分をクリックします。
![acm_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/c2a952d6-0357-ad53-3720-533125df4c08.png)

自動的に値が入力された画面になりますので「Route 53でレコードを作成」をクリックします。
![acm_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/95a68b91-961a-e2b1-795d-da9cc7597850.png)

次に以下のような画面が表示されますので「レコードを作成」をクリックします。
![acm_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/5578c04f-0df3-1000-3be0-eda4e5eb4609.png)

レコードが正常に作成されたことを確認します。
![acm_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/5aac17b0-c6c6-a0d7-aa57-eba30dbbc1d1.png)

最後に発行したSSL証明書が「発行済み」となっていることを確認します。
![acm_08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/c61f3fc4-2d9d-1a40-8453-963e471cac5f.png)

## ACMで発行したSSL証明書の注意点
注意点があります。
今回の構成ですと発行したSSL証明書はロードバランサーに適用します。
そしてACMで発行したSSL証明書はEC2には適用できません。さらに言うと発行した証明書をエクスポートすることができません。

そのため以下のような状態になります。
インターネットからロードバランサーまではhttps通信
ロードバランサーからWEBサーバー間はhttp通信
![ksawada1979_acm.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101744/7b9209bc-3c2c-3558-bccd-4c3b6ca3f1ff.png)

WEBサーバーを利用するユーザからはhttpsでアクセスするために上記の流れになっていることは表向きわかりませんが、内部的には上記のような動きをしています。
ロードバランサーからWEBサーバー間はhttp通信でも大丈夫なの？と思われる方もいるかもしれませんが、そこはVPC内なので安全であるという設計になります。
作成しようとしているシステムのセキュリティ要件が厳しくてVPC内でもhttps通信でないとダメという場合はACMの使用は見送った方が良いです。

VPC内でもhttps通信が必要な場合はACMでSSL証明書を発行するのではなくGMOなどのSSL証明書を発行しているサイトで別途購入して、EC2に適用する必要があります。

以上でDNS&SSL証明書編は終了です。
ネットワーク編に続きます。