こんにちは!今日は先日ECS 組み込みのB/G デプロイがリリースされたとのことなので、試してみます!これまではCode Deploy を使用して、デプロイはできたかと思うのですが、ECS 内部でそれができるということでこれはやってみなければと思い、ブログも書いてみました!

前回ECS でLaravel の環境を構築したので、そのtask を使って今回はやってみようと思います!まだチェックしてない方はぜひチェックしてみてください。
今回の環境
今回はBlue Green デプロイの環境を作成するので、遷移図を示したいと思います!
Blue 環境のみの場合
これが最初の状態です。Blue 環境のみ存在して、Green 環境はデプロイが発生していないので、ない状態です。トラフィックもBlue のみです。

B/G デプロイ発動
Green 環境が作成されました。まだトラフィックはBlue のみですね。

B/G デプロイ完了
問題なくデプロイが完了したら、トラフィックの切り替えも実施されます。もちろんこれもECS 側で自動で実施してくれます。これでダウンタイムなしのデプロイが完了したことになります!

フローについて
ざっくりにはなりましたが、上のフローでECS のB/G デプロイが進んでいきます。
この設定も書いていきます!
B/G デプロイ手順
前提条件
- クラスターを作成していること
- タスク定義を作成していること
- ECR にイメージをデプロイしていること
上の前提条件を基に進めていきます
サービスの作成

デプロイオプション
今回ローリングアップデートではなく、ブルー/グリーンを選択します。ベイク時間は検証なので、5分にしていますが、適宜調整してください。今回はLambda のデプロイライフサイクルはなしで作成します。

ALB の作成
今回はECS 上でALB も作成します。ALB でターゲットグループなどを変更するRole を作成する必要がありますので、今回は「AmazonEC2ContainerServiceRole」・「AmazonECSInfrastructureRolePolicyForLoadBalancers」というマネージドのポリシーをRole に紐づけています。

リスナー
本番環境用のリスナールールとテスト用のリスナールールというのを作成することができます。

ターゲットグループ作成
B/G デプロイが走った時に紐づくターゲットグループも作成してあげます。

作成
ここまで設定できたら、作成ボタンをおします!そうするとCloudformation でリソースが作成され始めます。5分ほど時間がかかるみたいなので、少し待機時間です。
リソース作成
ロードバランサーが作成されたりします。Laravel の画面が表示されたら準備は完了です。

ターゲットグループもblue とgreen のターゲットグループが作成されていますね。blue とgreen の両方が紐づけられる状態になります。

B/G デプロイ開始
タスク定義の定義を少し変更して、デプロイしていきます!今回先ほど一回デプロイしたので、Green からBlue に変更していきます!

Blue のtarget グループにコンテナ紐づけ
コンテナはBlue 環境もGreen 環境も存在している状況ですが、この時点ではトラフィックはまだGreen のtg に流れています。いわゆるベイク時間です。今回は5分間指定してます。

Green 環境削除
ベイク時間が完了すると、Green 環境の削除が開始されます。そして、再度Steady state という表示がでれば、問題なく切り替えが完了しています。

B/G デプロイ完了
大体8分くらいで完了していますね。ALB のA レコードのDNS にアクセスした時にLaravel の画面も見えれば、コンテンツ表示も大丈夫ことが確約できますね!

まとめ
ECS 内でB/G デプロイの機能が備わることによって、デプロイも楽になりそうですね!
コメント