ECSのアプリケーションのデプロイ方法には複数種類あります。
万が一何らかの障害が発生した場合は、システムのロールバックを行う必要があり、その作業は即座に完了するものではない。
ローリングアップデート
ECSのデプロイ の基本戦略になります。タスクをデプロイしていく時に、古いバージョンのコンテナを生かしつつ新しいバージョンのコンテナをデプロイしていくので順番にシステムが更新されていく様を見てこのように呼びます。
メリット
- シンプルなやり方
- インフラへの変更がないため安定する。
デメリット
- 新環境から旧環境への切り替えや切り戻し時にダウンタイムが発生します。
- もしインフラの変更がある場合はめんどくさい。
Blue/Green Deployment
古いデプロイと新しいデプロイが同時に混在する環境を構築した後に、ロードバランサーでのルーティングの制御によってトラフィックを切り替えて、ダウンタイムなしで環境を切り替えます。
「古い環境:Blue」、「新しい環境:Green」とそれぞれ呼びます。
流れ
- ALBはBlue環境にトラフィックを流す。
- Green環境にCodeDeployでデプロイをする。
- ALBの向き先をGreenに変える。
- Blueはロールバックのために一定期間残しておく。(CodeDeployの設定)
メリット
- 新環境から旧環境への切り替えや切り戻し時にダウンタイムが発生しない。(なので、受託開発でSLAを補償している場合はこちらの方がローリングアップデートより優れていると言えるでしょう。)
- インフラ構築はWebコンソールだけで済む。(ローリングアップデートもそうですが。)
デメリット
- 設定がめんどくさい。
- 一時的にAWSリソースが2倍になる。
外部デプロイ
デプロイ の制御を外部のシステムに移譲します。戦略は多岐にわたるものですが、準備に対する時間とスキルが必要になります。
CloudFormationのDeploymentControllerのパラメータで 「type:EXTERNAL」 を指定する事で選択できます。
具体例
jenkins等のCI/CDツールなどを使ったりします。
メリット
柔軟なデプロイ戦略をとることができます。
デメリット
AWSやJenkinsなど様々なツールを使いこなす必要があるので、設計の時間や、非常にスキルが必要になります。
最後に
Blue/Greenアップデートが現在は主流のデプロイ手法と言えるでしょう。ECSだけでなくKubernetesを使う場合でも採用されます。
この記事へのコメントはありません。