こんにちは。koarakkoです。re:invent期間中にリリースしたサービスを紹介しております。
待ちに待った、ECS Blue Green Deploymentが標準対応しました。
前回のブログで、こちらのGitリポジトリのサンプルを基にBlue/Green Deploymentの記事を書かせていただきました。
前回のブログ:
AWS ECS Blue Green Deploymentのサンプルの挙動を解説します
この時は、Blue/Greenの切り替えをLambdaを利用して実現しておりましたが、Lambdaでの実装が不要になりました。
Blue/Green Deploymentに関する概要は前回のブログで記載したので、割愛します。
構成図
ユースケース
nginxなどのWebアプリケーションやAPIサーバなど、外から通信を受ける処理をするアプリケーションだと、すごく相性が良いと思います。
逆にマイクロサービスで、ひたすらバッチ処理を行うWokerのような振る舞いをするアプリケーションだと、切り替えのタイミングをアプリケーション側で調整する必要があるかと思います。
環境構築
ALBまたはNLBを事前に作成
切り替えロジックはロードバランサーのTarget groupを切り替えて行います。CLBは対応しておらずALBかNLBで対応していますので、今回はALBで検証をしたいと思います。
リスナーポートは、80と8080の2つを準備しておきます。
ALB作成時にターゲットグループを作成する必要があるので、こちらは、以下のように設定します。
- ターゲット種類: IP
- プロトコル: HTTP
- パス: /
CodeDeployに対するIAMロールの作成
Blue/Green Deploymentに利用するIAMロールを、以下の公式ドキュメントを参考に作成します。
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/codedeploy_IAM_role.html
ECSの設定
Deploymentの設定から、Blue/Green Deploymentを選択し、上記で作成したIAMロールを指定します。
ALBを選択します。
ここでリスナーポートの紐づけをします。
リスナーポート = Blue、 test listener port = Greenといった解釈になります。 |
CodeDeployにALBのターゲットグループを設定します。
Port80の設定:
Port8080の設定:
検証
上記で設定完了したので、Fargate上のnginxでBlue/Green Deploymentをしてみたいと思います。
現状はBlueの画面になっています。
デプロイを行うと、CodeDeployによる切り替えの処理が行われます。
デフォルトではBlue/Greenの切り替えはでFargateのサービスが更新されると、即切り替えが行われます。
そして、一定の時間経過すると、旧環境の退役処理を行います(下の図では1時間経過すると退役処理が行われます)
切り替え完了すると、新しい環境にアクセスできるようになります。
ロールバック機能で簡単に切り戻し
新しい環境に切り替えを行ったあと、アプリケーション側で問題が判明し、すぐに旧環境に戻さなくてはならないという場合も切り戻しができます。
CodeDeployのデプロイを停止してロールバック
を選択することで、旧環境にロールバックされます。
ロールバック後に確認してみると、旧環境に切り戻しされていることが確認できます。
最後に
今回CodeDeployでBlue/Green Deploymentが対応し、アプリケーションで問題があった際に、直ちに旧環境に戻すことが可能になりました。この機能でアプリケーションデプロイの負担を少しでも軽減できれば良いと思います。