CodeDeploy のデプロイ方式に Blue/Green Deployment が追加されました

こんにちは、藤本です。
先日、CodeDeploy に Blue/Green デプロイ機能が追加されました。
早速触ってみましたのでご紹介します。
概要
CodeDeploy は今までデプロイ方式にインプレイスデプロイのみを提供していました。インプレイスデプロイは既存のインスタンスにアプリケーションを上書きすることで、高速なデプロイを実現していました。しかし、アプリケーションを上書きすることで、いざ、デプロイしたアプリケーションにバグが内在していて、前のバージョンのアプリケーションに切り戻したい時は再度アプリケーションをデプロイする必要があり、切り戻しに時間がかかっていました。デプロイメントグループを分けることで Blue/Green デプロイを実現することができていましたが、事前作業や、切替作業が必要である程度の手作業、もしくは自動化するには作り込みが必要でした。
そこで今回のリリースです。デプロイ方式に Blue/Green デプロイを選択できるようになりました。Blue/Green デプロイにより、リリース後のバグがあった際も発覚時にも早急な切り戻しが可能となりました。AutoScaling はもちろん、AutoScaling じゃないアプリケーションも Blue/Green デプロイができます。
CodeDeploy による Blue/Green デプロイ
CodeDeploy に実装された Blue/Green デプロイの方式を説明します。今回は Auto Scaling バージョンで説明します。
0. 新しいバージョンのアプリケーションをデプロイ(CodeDeploy のリリース操作)
1. 現環境の Auto Scaling Group を新環境用の Auto Scaling Group としてコピー
2. 新環境のインスタンスがアプリケーションデプロイ処理
3. ELB に新環境のインスタンス追加
4. ELB から現環境のインスタンスを切り離し
5. 現環境の Auto Scaling Group を削除
Elastic Beanstalk を既にご利用の方は見たことある流れだと思います。Elastic Beanstalk のデプロイ方式でいう Immutable となります。Elastic Beanstalk の制約で Elastic Beanstalk を採用できない環境でも CodeDeploy で Blue/Green デプロイを実施できるようになりました。できれば、URL Swap や Route 53 切り替えも実装してほしいです。
試してみた
それでは早速、CodeDeploy の Blue/Green デプロイを試してみましょう。今回はドキュメントのワークフローを試してみます。
ワークフローでは以下の手順で CodeDeploy による Blue/Green デプロイを体験することができます。
1.Get started
2.Choose a deployment type
3.Create blue/green deployment
4.Monitor the blue/green deployment
5.Refresh the web application window
6.Clean up sample resources
1. Get started
マネジメントコンソールへ接続し、CodeDeploy の画面へ遷移します。「Get Started Now」を選択します。
CodeDeploy はサンプルアプリケーションを用意しています。手元に試せる環境がない、あっても試すために CodeDeploy 用の設定をするのが非常に手間だ、という方はまずはこちらのサンプルアプリケーションで試してみるのがいいと思います。
「Sample deployment」を選択し、「Next」をクリックします。
2. Choose a deployment type
「Blue/green deployment」を選択し、「Next」をクリックします。
3. Create blue/green deployment
3.1. サンプルアプリケーションデプロイ(Blue)
サンプルアプリケーションの設定値を入力します。サンプルアプリケーションは CloudFormation によって構築されます。ここで入力した設定値は CloudFormation のパラメータに利用されます。
| パラメータ名 | 説明 | デフォルト値 |
|---|---|---|
| Application name | 新規作成する CodeDeploy のアプリケーション名 | BlueGreenDemoApplication |
| Deployment group name | 新規作成する CodeDeploy の Deployment Group 名 | BlueGreenDemoFleet |
| Auto Scaling group name | 新規作成する Auto Scaling Group 名 | BlueGreenAutoScalingGroup |
| Load balancer name | 新規作成する ELB 名 | BlueGreenLoadBalancer |
| Service role name | 新規作成する CodeDeploy の IAM Role 名 | BlueGreenCodeDeployServiceRole |
| Key pair name | EC2 に設定するキーペアをプルダウンから選択 | - |
今回はキーペアだけ選択し、その他は全てデフォルト設定とします。「Launch Environment」をクリックし、サンプルアプリケーションの環境作成を開始します。
裏では、CloudFormation Stack が作成され、IAM Roleや、VPC、ELB、AutoScaling(3つの EC2 インスタンス)、CodeDeploy が作成されます。
サンプルアプリケーションの環境作成が完了すると、「Congratulations! Your environment is ready.」のメッセージが表示されます。
Webブラウザから記載された URL を開き、サンプルアプリケーションに接続可能なことを確認します。
現在は青の背景の WebUI です。
3.2. Green のリリース
続いて、Blue/Green デプロイを実行します。「Start blue/green deployment」をクリックします。
4. Monitor the blue/green deployment
デプロイが開始されます。上で記載した流れでデプロイが実施されます。
デプロイ完了を待ちます。
新環境が作成され、
ELB に新環境が追加され、
ELB から現環境が切り離され、
現環境の EC2インスタンス(Auto Scaling Group)が削除されます。
5. Refresh the web application window
デプロイされたアプリケーションを確認します。Webブラウザを再表示します。
緑の背景の WebUI に変更されました。
サンプルアプリケーションでは Blue/Green デプロイがボタン一つで実行されましたが、実際にどのようなオペレーションが必要なのかも確認してみましょう。
CodeDeploy のアプリケーション画面から、サンプルアプリケーションを開きます。既存の Deployment Group を選択し、「Action」 - 「Deploy new revision」を選択します。
Revision location に S3のパスを入力します。今回は最初にデプロイされた青背景のアプリケーションのzipファイルを選択します。
その他、Deployment configuration は一括でいいと思うので、AllAtOnce を選択します。必要に応じて、Rollback の設定を修正します。「Deploy」をクリックします。
新バージョンのデプロイを開始します。
これだけです。簡単ですね!
6. Clean up sample resources
作成したリソースを削除します。Auto Scaling Group、CloudFormation Stack、CodeDeploy のアプリケーションを削除します。放置しているとコストが掛かり続けますので忘れずに削除しましょう。
まとめ
いかがでしたでしょうか?
CodeDeploy に Blue/Green デプロイが追加され、安全なリリースを行うことができるようになりました。個人的には CodePipeline から CodeDeploy を利用した際に Blue/Green デプロイする方法を模索中だったので、今回のリリースは嬉しいです。CodePipeline との連携も試して、ブログ化します。
一点、気になったこととして、Auto Scaling の場合、旧環境は必ず自動で削除されそうです。そこは出来れば、残すというオプションがほしい。。リリース後に手動での試験を実施したいケースや、リリース後も1日ほどは旧環境を残したいケースもあります。






















