みなさん。こんにちは。今回はECSのデプロイメント戦略に関する話になります。
ECSで展開されたアプリケーションを更新する時、多くのケースではローリングアップデートによってデプロイを制御しているかと思います。
特に破壊的な変更を含む大規模なシステムの更新を行う際、ローリングアップデートを採用して万が一何らかの障害が発生した場合にはシステムのロールバックを行う必要があり、その作業に関しては即座に完了するものではありません。
そのような理由から、気軽に障害を起こせないサービスを運用したり、受託開発においてSLAを保証している場合においては障害に対してダウンタイムを極力少なくするためのデプロイメント戦略が求められます。
ECSもそのようなニーズに応じて3つのデプロイメント戦略があり、それぞれローリングアップデート、Blue/Green Deployment、外部デプロイの3つがあります。
今回の記事では、3つのデプロイメント戦略に関して説明しつつ、Blue/Green DeploymentをECSで実現するための方法をご紹介します。
ローリングアップデートとは
ECSのサービスのデプロイメントの基本形で、タスクをデプロイする時に古いバージョンのコンテナを活かしつつ、新しいバージョンがデプロイをしてゆくため、順番にシステムが更新されてゆく様子を表現してローリングアップデートと呼びます。
Blue-Green Deploymentとは
青/緑の概念で「古いデプロイ・新しいデプロイが同時に混在する環境を構築した後、ロードバランサー等によるルーティングの制御によってトラフィックを切り替え、ダウンタイム無しで環境を切り替える」ことをBlue-Green Deploymentと呼びます。
図にして簡単に説明すると、次のようになります。
まず、Blue環境に既存のアプリケーションが存在し、ロードバランサーがBlueを向いている環境に対してCodeDeployを用いてGreen環境に新しくデプロイを行います。
Green環境へのデプロイが完了した後、CodeDeployはロードバランサーを操作してトラフィックがBlue環境からGreen環境に向くようにします。
ルーティングの変更後、Blue環境の古いデプロイはロールバックのために一定期間存在し(CodeDeployの設定で期間を指定します。)、その期間が終わったらBlue環境を落としてデプロイが完了します。
外部デプロイとは
Webのコンソールでは見えない3つ目のデプロイメント戦略で、これはCloudFormationのDeploymentControllerのパラメータで
type:EXTERNAL を指定する事で選択できます。
これはデプロイの制御を外部のシステムに移譲することによってJenkins等のサードパーティーのCI/CDツールを使って、Blue-Green
Deploymentからカナリアテスト(BlueとGreenの中で割合ベースでトラフィックを段階的に移行させる)等の複雑なルーティングの制御まで、柔軟なデプロイメント戦略を取ることが出来ます。
取れる戦略が多様な反面、構築には相応の準備に関する時間とスキルが必要になるということに注意してください。
Blue-Green Deploymentをなぜ選択するのか
AWSに慣れてくるとVPCからインスタンスの構成までを包括したCloudFormationによってインフラを構築・運用するようになりますが、その時にようやくImmutable Infrastracture(不変のインフラ)と言われる、構築後に構成の変更が行われないインフラ構成を気軽に運用できるようになります。
この時に、「即座に切り替わるデプロイ」「ロールバック可能なインフラ管理」を実現するためにAWS ECSとAWS CodeDeployによるBlue-Green Deployment戦略を選ぶことが可能になります。
※ECSによるBlue-Green Deployment環境の構築自体はWebのコンソールだけで可能です。
「ローリングアップデートと何が違うのか」という点に関しては、先に述べたとおり旧環境から新環境への切り替えがダウンタイム無しで行われ、更にロールバックに関しても一定期間の猶予をもって実施できることから、以下のような障害に関するリスクを軽減することが出来ます。
・高可用性の構成をとった時にデプロイ中に新旧でシステムが混在した状態になるため、その期間中に同じAPIで違う処理を行うアプリケーションが存在する事で予期せぬ動作が起きる
・新しいシステムが障害を起こした時、古いアプリケーションに戻すための時間が掛かるため、ユーザーに対してサービスの提供を中断する必要がある
と、考え方の基本はデプロイの前後におけるシステムの挙動が変わることで抱えていた既存のリスクを削減することにあります。
次回は、実際にECSサービスでBlue/Green Deploymentを行ってみましょう。
AWSをご利用いただくには、直接契約するより断然お得。
AWS利用料が5%割引、さらに日本円の請求書による支払いが可能です!