パブリックALB(HTTPS) → プライベートEC2構築

## はじめに
今日は、パブリックALB（Application Load Balancer）→プライベートEC2を使用して簡単なHTTPSサイトを作成してみます。
これは一般的に使用されるシステムです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1901067/3b901596-eb6b-59f1-b8c8-c10705d5d52e.png)
## 前提
ALBを構築する前に、次のリソースを作成しました
●　Route53パブリックホストゾーンを作成しました。
●　ACMのパブリックSSL証明書が発行されました。 (https://qiita.com/tannh/items/6314601fb2121e30da6b)
●　プライベートEC2インスタンスでApache WebServer(HTTP:80)も作成しました。(パブリックIPアドレスがありません)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1901067/db94dd56-85fb-d250-6ab3-36bace6b1b04.png)
## 手順

#### 1. ALBのセキュリティグループ作成
まず、ALBのセキュリティグループを作成する必要があります
ALBのセキュリティグループは、インターネットからALBのHTTPS：443およびHTTP：80ポートへの接続を許可します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1901067/77ab7b03-51b7-64f8-3995-d1fbe85886ec.png)

次に、EC2インスタンスのセキュリティグループがALBからの接続を許可していることを確認します。
ALBがEC2インスタンスに接続できない場合、ヘルスチェックは失敗し、クライアントはWebサイトのコンテンツを表示できなくなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1901067/7920c5df-7bac-4998-3827-c120dfa4b150.png)

#### 2. ALBのターゲットグループ作成
各ターゲットグループは、1 つ以上の登録されているターゲットにリクエストをルーティングするために使用されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1901067/f2216ed5-0519-58d6-5c35-d87340d65209.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1901067/4bee4f65-65c9-7fe3-1eb2-645455ed65ca.png)

EC2インスタンスをこのターゲットグループに配置します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1901067/b7987eab-3f7b-af1c-3cee-58731d85f637.png)

#### 3. ALB作成
これでALBの生成が開始されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1901067/b8ebcb42-fd22-97ec-a907-519cd9faeb7d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1901067/2001edd5-78be-5863-f04d-c99e8ccd5687.png)
パブリックALBの場合、少なくとも2つのパブリックアベイラビリティーゾーン(Availability Zones)を定義する必要があります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1901067/66904741-6856-8628-5f2d-dec6c7e2dc8e.png)
手順[1]と[2]で作成したセキュリティグループとターゲットグループを設定します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1901067/09480db7-47dc-5588-4f07-d4983f34be19.png)
ACM（ https://qiita.com/tannh/items/6314601fb2121e30da6b ）で発行されたSSL証明書を選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1901067/0c85bd86-737d-e1db-d01a-56269c1b834b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1901067/eb19b13f-2ac4-d0a0-47bd-f18d21b6aa9f.png)

#### 4. Route53でDNSレコード作成
事前に準備したRoute53 Hosted Zoneで、ALBのドメイン名を指すAレコード（エイリアス）を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1901067/1c9e0b51-752f-a7d7-4866-42440ff2eeff.png)

#### 5. 結果
ドメイン名を使用したALBへのHTTPS接続が成功しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1901067/ff778e72-f715-47e1-d50f-ce85b8a3df76.png)

#### 6. (Optional) HTTP：80にアクセスするときにリダイレクト設定
ユーザーがorigin.sample.linkのようなURLをブラウザに入力した場合、一部のブラウザはHTTP：80に接続します。
その後、接続エラーが発生します。
したがって、ユーザーがHTTP：80にアクセスすると、リダイレクトがHTTPS：443に設定されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1901067/a8d3f523-78ca-ee22-f0b2-0354e4bbaa8c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1901067/3374d1e9-3d67-ff59-fd15-91fabdbc6c1e.png)

## ドキュメント参照
[What is an Application Load Balancer?]
https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html

[Create an Application Load Balancer]
https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-application-load-balancer.html

[Create an HTTPS listener for your Application Load Balancer]
https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-https-listener.html

[Create a target group]
https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-target-group.html