ECS 組み込みのB/G デプロイの挙動を確認してみる
こんにちは!今日は先日ECS 組み込みのB/G デプロイがリリースされたとのことなので、試してみます!これまではCode Deploy を使用して、デプロイはできたかと思うのですが、ECS 内部でそれができるということでこれはやってみなければと思い、ブログも書いてみました!
前回ECS でLaravel の環境を構築したので、そのtask を使って今回はやってみようと思います!まだチェックしてない方はぜひチェックしてみてください。
http://blog.dev-tansanken.com/laravel-ecs-environment-setup-for-beginners/
今回の環境
今回は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 デプロイの機能が備わることによって、デプロイも楽になりそうですね!
参考サイト
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/alb-resources-for-blue-green.html