ECSブルーグリーンデプロイメントをゼロから構築する。（その４：ELBの作成とレコード作成）

# はじめに
前回までは、ブルーグリーンデプロイメントの設定を行う前の事前準備を行ってきました。

いよいよ今回からブルーグリーンデプロイメントの設定を行っていきます。

- 【前】[ECSブルーグリーンデプロイメントをゼロから構築する。（その３：事前準備、コンテナイメージ作成）](https://qiita.com/sakai00kou/items/fc51cead539f2917bfb6)
- 【次】[ECSブルーグリーンデプロイメントをゼロから構築する。（その５：ECSとCodeDeployの作成）](https://qiita.com/sakai00kou/items/7f3e2f3027573783b0c7)

# ブルーグリーンデプロイメントの設定
今回より本格的にブルーグリーンデプロイメントの設定を行っていきますが、ブルーグリーンデプロイメントは、複数の設定が絡み合うため、設定が複雑です。

そのため、どこか一つ設定を間違えると、エラーとなったり、再度作り直さないといけなくなったりするため、設定する順序が重要となります。
※そのため、私はいつもどこかで詰まっていました・・・

# ELBの設定
以下再掲となりますが、`ELB`の設定にはユーザからのアクセスを待ち受けたり、負荷分散のルール等を設定するための「**ロードバランサー**」の設定と、負荷分散先となるインスタンスやタスクの指定やターゲットへのヘルスチェック等を設定するための「**ターゲットグループ**」の設定を行う必要があります。

以下の図でいうと真ん中の`ELB`が「**ロードバランサー**」の設定、Blue Group、　Green Groupと書かれている部分が「**ターゲットグループ**」の設定となります。

![blue_green_deploy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/3c1c3f64-04ae-db54-d6ec-153cbe6c6077.png)

今回、`ELB`では、HTTPS:443とHTTPS:4430ポートで待ち受けを行い、`Fargate`では　HTTP:80で待ち受けを行うよう設定していこうと思います。

- [ターゲットグループ作成](#ターゲットグループ作成)
- [ロードバランサー作成](#ロードバランサー作成)

## ターゲットグループ作成
ブルーグリーンデプロイメントによるデプロイは`ELB`に２つのターゲットグループを指定して、デプロイ時に一方のターゲットグループへのルーティングを切り替えることで安全にデプロイを行う機能となることから、ターゲットグループを２つ作成します。

「**EC2ダッシュボード**」より「**ロードバランシング**」の「**ターゲットグループ**」→「**ターゲットグループの作成**」を選択します。

また、ターゲットグループは名前以外は同じ設定となるため、以下表を参考に２つ作成します。

|項目|設定|備考|
|:--|:--|:--|
|ターゲットタイプの選択|IPアドレス|Fargateの場合、IPアドレスを選択|
|ターゲットグループ名|blue-green-blue-tg|任意の名前を指定<br>２つ目はblue-green-green-tgとする|
|プロトコル：ポート|HTTP：80||
|IPアドレスタイプ|IPv4||
|VPC|blue-green-vpc|その１で作成したVPCを選択|
|プロトコルバージョン|HTTP1|今回はテストのためHTTP1を指定|
|ヘルスチェックプロトコル|HTTP||
|ヘルスチェックパス|/index.html|その３で仕込んだindex.htmlを指定|
|ヘルスチェックの詳細設定|※デフォルトのまま|今回はデフォルトのまま|
|タグ|空欄|今回はデフォルトのまま|
|ステップ1：ネットワークを選択する|blue-green-vpc|その１で作成したVPCを選択|
|ステップ2：IPを指定してポートを定義する|未指定|まだターゲットが存在しないので空欄でOK|
|ステップ3：グループに含めるIPターゲットを確認する|※指定不可|まだターゲットが存在しないので空欄でOK|

## ロードバランサー作成
ロードバランサーを作成して、リスナールール、先程作成したターゲットグループを紐づけます。

|項目|設定|備考|
|:--|:--|:--|
|ロードバランサータイプ|Application Load Balancer|今回はALBを作成|
|ロードバランサー名|blue-green-elb|任意の名前を指定|
|スキーム|インターネット向け||
|IPアドレスタイプ|IPv4||
|VPC|blue-green-vpc|その１で作成したVPCを選択|
|マッピング|blue-green-subnet-public1-ap-northeast-1a<br>blue-green-subnet-public2-ap-northeast-1c|外部からのアクセスを受けるため、パブリックサブネットを指定|
|セキュリティグループ|blue-green-test-elb-sg|その３で作成したELB用セキュリティグループを指定|
|リスナーとルーティング|HTTPS:443<br>HTTPS:4430|※以下で紹介|
|セキュリティポリシー|ELBSecurityPolicy-TLS13-1-2-2021-06(推奨)|推奨を指定|
|Certificate source|ACMから|その２で作成したACMを指定するために指定|
|Certificate (from ACM)|*.aws.example.com|その２で作成したACMを指定|
|アドオンサービス|チェックなし|デフォルトのままチェックなし|
|ロードバランサータグ|空欄|今回は未設定|

リスナールールについては、本番通信用のリスナールール（HTTPS:443）とテスト通信用のリスナールール（HTTPS:4430）の２つを指定する必要があるので、以下のように指定します。

２つ目のリスナールールは「**リスナーの追加**」を押下して作成してください。

:::note info
その３のセキュリティグループ作成で指定したテスト通信用のポート番号を指定してください（今回は4430番ポート）
:::

![Monosnap_20231112_145342.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/982b70fe-72f2-6da7-622b-676c81b7aa13.png)

以下リスナーとルーティング部分を抜き出して表に示します。

|項目|リスナー1設定|リスナー2設定|備考|
|:--|:--|:--|:--|
|プロトコル|HTTPS|HTTPS|どちらもHTTPSを指定|
|ポート|443|4430|それぞれのポートを指定|
|デフォルトアクション|blue-green-blue-tg|blue-green-green-tg|別々のターゲットグループを指定|
|リスナータグ|空欄|空欄|今回は未設定|

リスナールールに指定するターゲットグループはブルーグリーンデプロイ実行時に`CodeDeploy`により書き換わるため、リスナールール1、リスナールール2でそれぞれ別々のターゲットグループが指定できていればOKです。

なお、２つのリスナールールどちらも同じターゲットグループを指定すると、ECSサービス作成時にエラーとなるため、別々のターゲットグループを指定するようにしてください。

# レコードの作成
ロードバランサーを作成したことで、その２で作成した`Route53`のホストゾーンに、ロードバランサーにアクセスするためのレコードを追加できるようになったため、「**Route 53**」ダッシュボードの「**ホストゾーン**」より、その２で作成したホストゾーンを選択→「**レコードを作成**」でレコード作成します。

「**エイリアス**」を有効にすると、選択ボックスから選ぶだけでレコードが指定できるため、以下のように指定して「**レコードを作成**」で作成します。

なお、今回レコード名は「**www**」としましたが、任意のレコード名を指定してください。

![Monosnap_20231112_183031.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/0af07212-9abb-3281-97d1-d7a2d7473795.png)

# おわりに
今回はブルーグリーンデプロイメント用の`ELB`の作成と、外部からアクセスする際に使用するレコードの作成を行いました。

次回はブルーグリーンデプロイメントの設定としては最後となる`ECS`の設定を行っていきます。