AWSのサービスでドメインを取得しALBでSSLで接続出来るようにする

## 概要
表題の通りですが、AWSのサービスのみで独自ドメインの取得を行いALBで公開を行います。
なお公開するWebサービスはSSLで接続可能にしますので、[AWS Certificate Manager](https://aws.amazon.com/jp/certificate-manager/) で証明書の取得も行います。

## 前提条件
[ALB（Application Load Balancer）](https://aws.amazon.com/jp/elasticloadbalancing/applicationloadbalancer/) が作成されている必要があります。

※以前、[ALB（Application Load Balancer）でWebサービスを冗長化する](http://qiita.com/keita-nishimoto/items/e19ef9f33249828fa94a) という記事を書きました。参考になれば幸いです。

## ドメインの登録を行う

### Route53のドメイン登録画面に遷移する
マネジメントコンソールからRoute53サービスの "Domain registration" に進みます。

![domain-step1.png](https://qiita-image-store.s3.amazonaws.com/0/71899/c634341a-5148-b2d2-e7ce-3a18f1c75d6a.png)

"Register Domain"を選択します。

![domain-step2.png](https://qiita-image-store.s3.amazonaws.com/0/71899/50c48f86-a201-1913-a74f-d2ee8a435188.png)

### 取得しようと思っているドメイン名が利用可能かどうかをチェックする

希望のドメイン名を入力し、"Check"を選択します。
トップドメインによって必要な登録料が変わってきます。
今回は検証用なので比較的易い.netを選択しました。

![domain-step3.png](https://qiita-image-store.s3.amazonaws.com/0/71899/ef718d90-8ed9-bab0-2a29-577d66f658ee.png)

"Add to cart" を押して次の手続きに進みます。

### 必要事項を入力

必要事項を入力します。

![domain-step4.png](https://qiita-image-store.s3.amazonaws.com/0/71899/5f671667-506d-b2cc-4776-32c2b09d7b26.png)

デフォルトでチェックが入っていますが、"Hide contact information if the TLD registry, and the registrar, allow it" にチェックが入っているか確認を行います。

※ここにチェックが入っていると、whoisでドメインの管理情報が照会された時に、登録者であるAmazonの情報が表示されプライバシーを保護できます。

![domain-step5.png](https://qiita-image-store.s3.amazonaws.com/0/71899/83140cc9-beb1-ace4-4e8d-b23b2059d69e.png)

### 確認画面

"I have read and agree to the AWS Domain Name Registration Agreement" にチェックを入れて "Complete Purchase" をクリックします。

以上でドメインの申請は完了となります。

![domain-step7.png](https://qiita-image-store.s3.amazonaws.com/0/71899/40ce9234-7858-a14f-19ff-5da863467aab.png)

登録完了後しばらくすると、ドメイン登録時に入力したメールアドレスに「Verify your email address or your domain "登録したドメイン名" will be suspended」 というタイトルのメールがAWSから届きます。

リンク内のURLをクリックしメールアドレスの検証を完了させましょう。

## サブドメインの設定を行う
私が公開作成しようと思っているサービスは複数のサブドメインから成り立つ構成なので、サブドメインの登録を行い既に起動しているALBに対し任意のサブドメインを割り当てます。

Route53の「Hosted zones」を選択し先程登録したドメインを選択します。

![subdomain-step1.png](https://qiita-image-store.s3.amazonaws.com/0/71899/d06c49c9-4a41-0000-4f87-668cff5deb7c.png)

「Create Record Set」を選択し新規レコードを作成します。

![subdomain-step2.png](https://qiita-image-store.s3.amazonaws.com/0/71899/8872dbb7-f9ed-df49-5730-3d0821aad519.png)

```text:入力情報
Name： 登録したいサブドメイン名
Type： A - IPv4 addressを選択
Alias： Yesを選択
Alias Target： ALB（Application Load Balancer） を選択
```

![subdomain-step3.png](https://qiita-image-store.s3.amazonaws.com/0/71899/e88a6e7a-b775-01ff-65be-6394ed640d68.png)

「Create」を選択してから、しばらく待つと登録したサブドメインでALB（Application Load Balancer）にアクセス出来る事が確認出来るかと思います。

## Certificate Managerで証明書を作成する

無料のSSL証明書を取得します。
証明書の更新が自動で料金も無料と魅力的ですが、いくつか制限があるので注意が必要です。
今回、私が利用する条件的には十分だったので問題はありませんでしたが、これらの条件のうちどれかが必須要件だった場合は別の手段で証明書を取得する必要があります。

- AWS上の一部のサービスでしか使えない
    - [CloudFront](https://aws.amazon.com/jp/cloudfront/)
    - [ELB](https://aws.amazon.com/jp/elasticloadbalancing/)
    - [ALB](https://aws.amazon.com/jp/elasticloadbalancing/applicationloadbalancer/)
    - [API Gateway](http://dev.classmethod.jp/cloud/aws/amazon-api-gateway-integrates-acm/)
- EV SSL証明書としては利用出来ない

### 証明書の作成リクエストを送る
マネジメントコンソールから東京リージョンのCertificate Managerサービスにアクセスします。

![CertificateManager-step1.png](https://qiita-image-store.s3.amazonaws.com/0/71899/f9490e29-5b00-cb9d-bfb9-72f9653afeed.png)

「今すぐ始める」から証明書のリクエストを開始します。
今回は複数のサブドメインで運用を行うのでワイルドカード証明書を取得します。

```*.hoge.net``` のように取得したドメインを入力します。

![CertificateManager-step2.png](https://qiita-image-store.s3.amazonaws.com/0/71899/6d6423a2-cc4c-70c8-67a7-1dd6f604c5b4.png)

![CertificateManager-step3.png](https://qiita-image-store.s3.amazonaws.com/0/71899/50db0363-2601-bb7b-c11d-fe617573e739.png)

「確定とリクエスト」をクリックすると、ドメイン登録時に登録したメールアドレス宛に 「Certificate approval for Requestしたドメイン名」というタイトルのメールが送信されてきますので本文内のリンクから手続きに進みます。

![CertificateManager-step5.png](https://qiita-image-store.s3.amazonaws.com/0/71899/ff35a14d-ad27-e552-22f6-9ad587d6ac06.png)

"I Approve" をクリックすると手続きは完了となります。

![CertificateManager-step5.png](https://qiita-image-store.s3.amazonaws.com/0/71899/4b545a15-20d2-a211-e6a6-c2015568a73b.png)

![CertificateManager-step6.png](https://qiita-image-store.s3.amazonaws.com/0/71899/026f8d28-d3b5-a18f-ac82-4bf85bd0e2c2.png)

## ALB（Application Load Balancer）に作成した証明書を適応する

マネジメントコンソールからEC2サービス → ロードバランサーから証明書を適応するロードバランサーを選択します。

![alb-step1.png](https://qiita-image-store.s3.amazonaws.com/0/71899/a5b71a93-7725-c6c5-8eba-b9e8ab826d02.png)

「リスナーの追加」から以下の内容を入力します。

```text
プロトコル: HTTPS（セキュア HTTP）
デフォルトターゲットグループ: 作成済のターゲットグループ
AWS 証明書マネージャ (ACM) から、既存の証明書を選択する
```

![alb-step2.png](https://qiita-image-store.s3.amazonaws.com/0/71899/aa520df8-910e-57bf-6209-33b77c4f667c.png)

しばらくすると対象のロードバランサーにHTTPSでアクセス出来る事が確認出来るハズです。

ちなみに私の場合はHTTPSアクセスが確認出来次第、HTTPのリスナーは削除するようにしました。

## 最後に
AWSのサービスを利用すると非常に簡単にSSLでWebサイトの公開が可能です。

EV SSLが必須の場合この方法は使えませんが、ちょっとしたサービスを作るのであれば良い選択肢だと思います。

最後まで読んで頂きありがとうございました。