ECS FargateでBlue/Greenデプロイ設定

`AWS Fargate`でサポートされてるBlue/Greenデプロイを設定します。
`CloudFormation`で全て設定したいのですが、対応中のステータス（2020/1/12現在）なので、`CloudFomation`とマネジメントコンソールで実施します。
https://github.com/aws/containers-roadmap/issues/130

※以下の手順を実行すると、`AWS`のサービス利用料が発生します。
※`VPC`、`Subnet`、`Security Group`などの`NetWork`周りの設定は完了しているものとします。
※Blue/Greenデプロイについては、以下参照

[Blue-Green Deploymentにおける注意点](https://dev.classmethod.jp/cloud/operation-blue-green-deployment/ "Blue-Green Deploymentにおける注意点")
[ALBでEC2を利用しBlue Green Deployを試してみる](https://qiita.com/takeshi_hirosue/items/b1a101c9808403c6e9e1 "ALBでEC2を利用しBlue Green Deployを試してみる")

## `Fargate`スタック作成（※`Service`以外）

`CloudFormation`で作成します。
以下のファイルを`AWS CLI`かマネジメントコンソールで以下の2点を確認の上、実行してください。

1.`Application Load Balancer`用の`Subnet`を2つ以上選択すること
2. セキュリティグループはWeb閲覧可能なセキュリティグループを選択すること

https://github.com/Thirosue/cross-accout-deploy-sample/blob/master/provisioning/fargate.yaml

![cfn.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73176/3cefffa9-25d6-4a75-20fd-fff06f1e21a0.jpeg)

## `Service`作成（Blue/Greenデプロイ設定）

マネジメントコンソールで以下手順で作成します。

##### 1. クラスター画面からサービスを新規作成します。

<img width="1079" alt="step1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73176/cb347d93-ea77-1816-3c72-bea8bf8fbf8b.png">

##### 2. `Fargate`を選択し、Blue/Greenデプロイを選択します。

> `CodeDeploy`のサービスロールは`CloudFormation`で作成済のものを選択します。

![step2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73176/9e6267e8-f160-f540-ed9c-36902236afa3.jpeg)

##### 3-1. `NetWork`設定をします

+ サービスのセキュリティグループは、`Application Load Balancer`からヘルスチェックが到達するものを選択（InBoundの`172.16.0.0/16`許可など）
+ 本番ワークロードでは3つ以上の`Subnet`の指定を推奨（以下参照）

https://www.itmedia.co.jp/news/articles/1908/28/news127_3.html

![step3_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73176/98677bd2-87f5-4ee0-e777-492ae566a805.jpeg)

##### 3-2.ロードバランサー設定

> `CloudFormation`で作成済のものを選択し、「ロードバランサーに追加」ボタンを押下する。

<img width="911" alt="step3_2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73176/1a973fc8-ab91-ea67-b324-8dbcdd96b5dd.png">

##### 3-4.ポート設定

> サンプルアプリケーションは、Webアプリなので、80と8080などを設定する。

<img width="881" alt="step3_3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73176/7f5ebe21-5f95-a77f-c516-27737d8c2fa2.png">

##### 3-5.ターゲットグループ設定

> サンプルアプリケーションはドキュメントルートでヘルスチェック可能であるため、デフォルトのまま進む。

<img width="918" alt="step3_4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73176/78441a08-8200-b48b-a0de-a25d5b8e3d5f.png">

##### 4-1.オートスケール設定（Step1）

> `CloudFormation`で作成済のロールを選択する。

<img width="891" alt="step4_1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73176/2a6928ae-a67d-5103-73cc-b1330ad074ca.png">

##### 4-2.オートスケール設定（Step2）

> ターゲット追跡ではなく、旧来から存在するステップスケーリングで設定する。アラームは`CloudFormation`で作成済のアラームをそれぞれ選択する。

<img width="917" alt="step4_2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73176/2f354af0-5589-8745-9a68-53b1d3844f54.png">

以上を設定し、サービスの作成を実施すると、`Service`（Blue/Greenデプロイ設定）が作成される。

#### サービス稼働確認

> ELBのEndpointをブラウザで開くと、`Vue`のサンプルアプリケーションが表示される。

<img width="629" alt="スクリーンショット 2020-01-12 13.27.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73176/aa4dc961-d708-590f-a9d5-f47b531406e0.png">

## `CodeDeploy`でデプロイ設定編集

「トラフィックの再ルーティング」および「元のリビジョンの終了」について、ワークロードに応じて修正する。

> 以下は、元のリビジョンの終了時間を「なし」に設定変更した例（開発ワークロードを想定）

<img width="823" alt="deploy.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73176/336a7969-e297-0f36-a750-565c09c0fcb8.png">

## 最後に

`CloudFormation`対応待ち遠しい。。。。