デプロイ方法 - AWS での継続的インテグレーションと継続的デリバリーの実践

デプロイ方法

継続的デリバリープロセスでは、新しいソフトウェアバージョンのロールアウトについて、複数のデプロイ戦略とバリエーションを検討できます。このセクションでは、一括デプロイ (インプレースデプロイ)、ローリング、イミュータブル、およびブルー/グリーンという最も一般的なデプロイ方法について説明します。AWS は、AWS CodeDeploy と AWS Elastic Beanstalk がどの方法をサポートしているかを示します。

次の表は、各デプロイ方法の特徴をまとめたものです。

方法 デプロイ失敗の影響 デプロイ所要時間 ゼロダウンタイム DNS の変更なし ロールバックプロセス コードのデプロイ先
一括デプロイ ダウンタイム
再デプロイ 既存のインスタンス
ローリング 単一のバッチがサービス停止状態。新しいアプリケーションバージョンを実行している、失敗前のすべてのバッチ。
再デプロイ 既存のインスタンス
追加バッチを使用したローリング (beanstalk) 最初のバッチが失敗した場合、影響は最小限。それ以外の場合はローリングと同様。
再デプロイ 新規および既存のインスタンス
イミュータブル 最小限
再デプロイ 新規のインスタンス
Traffic splitting (トラフィック分割) 最小限
トラフィックの再ルーティングと新しいインスタンスの終了 新規のインスタンス
ブルー/グリーン 最小限
古い環境への切り替え 新規のインスタンス

一括デプロイ (インプレースデプロイ)

一括デプロイ (インプレースデプロイ) は、既存のサーバーフリートに新しいアプリケーションコードをロールアウトするために使用できる方法です。この方法では、1 つのデプロイアクションですべてのコードを置き換えます。フリートのすべてのサーバーを一度に更新するため、ダウンタイムが必要となります。既存の DNS レコードを更新する必要はありません。デプロイが失敗した場合、操作を復元する唯一の方法は、すべてのサーバーにコードを再デプロイすることです。

AWS Elastic Beanstalk では、このデプロイは一括デプロイと呼ばれ、単一およびロードバランサーを備えたアプリケーション向けに利用できます。AWS CodeDeploy では、このデプロイ方法はインプレースデプロイと呼ばれ、デプロイ設定 AllAtOnce があります。

ローリングデプロイ

ローリングデプロイを使用すると、フリートは複数の部分に分割されるため、フリート全体が一度にアップグレードされません。デプロイプロセス中は、新旧の 2 つのソフトウェアバージョンが同じフリートで実行されています。この方法では、ゼロダウンタイムの更新が可能になります。デプロイが失敗した場合、フリートの更新された部分のみが影響を受けます。

canary リリースと呼ばれるローリングデプロイ方法のバリエーションでは、最初にごく一部のサーバーに新しいソフトウェアバージョンをデプロイすることが含まれます。このようにして、破壊的変更の影響を最小限に抑えながら、ソフトウェアが本稼働環境でどのように動作するかを少数のサーバーで確認することができます。canary デプロイメントでエラー率が上昇した場合、ソフトウェアはロールバックされます。それ以外の場合は、新しいバージョンを使用するサーバーの割合を徐々に増やしていきます。

AWS Elastic Beanstalk は、ローリングおよび追加のバッチでのローリングの 2 つのデプロイパターンを使用し、ローリングデプロイのパターンに従っています。これらのオプションを使用すると、サーバーを停止する前にアプリケーションをスケールアップし、デプロイ中も完全な機能を維持することができます。AWS CodeDeploy は、このパターンを OneAtATime および HalfAtATime のようなパターンを使用したインプレースデプロイのバリエーションとして実現しています。

イミュータブルおよびブルー/グリーンデプロイ

イミュータブルパターンは、新しい構成またはバージョンのアプリケーションコードを使用した全く新しいサーバーセットを起動することで、アプリケーションコードのデプロイを指定します。このパターンは、シンプルな API コールで新しいサーバーリソースを作成するクラウドの機能を活用します。

ブルー/グリーンデプロイ戦略は、別の環境の作成を必要とするイミュータブルデプロイの一種です。新しい環境を起動しすべてのテストが合格すると、この新しいデプロイにトラフィックが移行します。重要なのは、古い環境、つまり「ブルー」環境は、ロールバックが必要となる場合に備えてアイドル状態に保たれることです。

AWS Elastic Beanstalk は、イミュータブルおよびブルー/グリーンのデプロイパターンをサポートしています。また、AWS CodeDeploy もブルー/グリーンパターンをサポートしています。AWS のサービスがこれらのイミュータブルパターンを実現する方法の詳細については、ホワイトペーパー『AWS でのブルー/グリーンデプロイ』を参照してください。