AWS CodeDeploy
ユーザーガイド (API バージョン 2014-10-06)

CodeDeploy インスタンスの状態

CodeDeploy はデプロイグループのインスタンスのヘルスステータスをモニタリングします。正常なインスタンスの数が、デプロイ中にデプロイグループに指定された正常なインスタンスの最小数を下回ると、デプロイが失敗します。たとえば、インスタンスの 85% がデプロイ中に正常な状態を維持する必要があり、デプロイグループに 10 個のインスタンスが含まれている場合、1 つのインスタンスへのデプロイが失敗したときであっても、デプロイ全体が失敗します。これは、1 つのインスタンスがオフラインになり、最新のアプリケーションリビジョンをインストールできるようになった時点で、正常に使用できるインスタンス数は既に 90% に低下しているためです。失敗したインスタンスと別のオフラインインスタンスを合わせると、正常に使用できるインスタンス数は全体の 80% のみとなり、CodeDeploy はデプロイ全体に失敗します。

デプロイ全体が成功するには、以下が満たされている必要があります。

  • CodeDeploy でデプロイの各インスタンスにデプロイできる。

  • 少なくとも 1 つのインスタンスへのデプロイに成功する。つまり、デプロイ全体が成功するには、最小限の正常なホストの値が 0 の場合であっても、少なくとも 1 つ以上のインスタンスへのデプロイに成功する必要があります (1 つ以上のインスタンスが正常)。

正常なインスタンスに必要な最小数は、デプロイ設定の一部として定義されます。

重要

Blue/Green デプロイ中に、デプロイ設定と最小限の正常なホストの値は、元の環境ではなく置き換え先環境のインスタンスに適用されます。ただし、元の環境のインスタンスがロードバランサーから登録解除されている場合、1 つの元のインスタンスが正常な登録解除に失敗したときであっても、全体的なデプロイは失敗とマークされます。

CodeDeploy は、最小限の正常なホストの値を一般的に使用した 3 つのデフォルトのデプロイ設定を提供します。

デフォルトのデプロイ設定名 事前定義された最小限の正常なホストの値
CodeDeployDefault.OneAtATime 99%
CodeDeployDefault.HalfAtATime 50%
CodeDeployDefault.AllAtOnce 0

デフォルトのデプロイ設定の詳細は、「CodeDeploy でデプロイ設定を使用する」で参照できます。

CodeDeploy でカスタムデプロイ設定を作成して、独自の最小限の正常なホストの値を定義できます。これらの値は、次のオペレーションを使用して整数または割合 (%) として定義できます。

ヘルスステータス

CodeDeploy は各インスタンスに 2 つのヘルスステータス値 (リビジョンの状態インスタンスの状態) を割り当てます。

リビジョンの状態

リビジョンの状態は、現在インスタンスにインストールされているアプリケーションリビジョンに基づきます。以下のステータス値があります。

  • Current: インスタンスにインストールされているリビジョンは、デプロイグループの前回成功したデプロイのリビジョンに一致します。

  • Old: インスタンスにインストールされているリビジョンは、アプリケーションの以前のバージョンと一致します。

  • Unknown: アプリケーションリビジョンはインスタンスに正常にインストールされていません。

インスタンスの状態

インスタンスの状態は、インスタンスへのデプロイが成功したかどうかに基づきます。以下の値があります。

  • Healthy: インスタンスへの前回のデプロイは成功しました。

  • Unhealthy: インスタンスへのリビジョンのデプロイの試みは失敗したか、リビジョンがインスタンスにデプロイされていません。

CodeDeploy はリビジョンの状態とインスタンスの状態を使用して、次の順序でデプロイグループのインスタンスにデプロイをスケジュールします。

  1. インスタンスの状態が Unhealthy。

  2. リビジョンの状態が Unknown。

  3. リビジョンの状態が Old。

  4. リビジョンの状態が Current。

デプロイ全体が成功すると、リビジョンは更新され、デプロイグループのヘルスステータスの値が更新されて、最新のデプロイを反映します。

  • デプロイに成功したすべての最新のインスタンスは current のままになります。それ以外の場合は、unknown になります。

  • デプロイに成功したすべての古いインスタンスまたは不明なインスタンスは current になります。それ以外の場合は、old または unknown のままになります。

  • デプロイに成功したすべての正常なインスタンスは healthy のままになります。それ以外の場合は、unhealthy になります。

  • デプロイに成功したすべての異常なインスタンスは healthy になります。それ以外の場合は、unhealthy のままになります。

全体的なデプロイが失敗するか、停止している場合:

  • CodeDeploy がアプリケーションリビジョンのデプロイを試みた各インスタンスでは、そのインスタンスのデプロイの試みが成功したか失敗したかによって、そのインスタンスの状態が healthy または unhealthy に設定されています。

  • CodeDeploy がアプリケーションリビジョンのデプロイを試みなかった各インスタンスは、インスタンスの状態の値 current を保持します。

  • デプロイグループのリビジョンに変更はありません。

正常なインスタンスとデプロイの最小数

CodeDeploy では、2 つの主な目的で、デプロイに対して正常なインスタンスの最小数を指定できます。

  • 全体的なデプロイの成功または失敗を判断する。アプリケーションリビジョンが少なくとも最小数の正常なインスタンスに正しくデプロイされた場合、デプロイは成功します。

  • デプロイが続行するためにデプロイ中に正常である必要があるインスタンス数を決定する。

デプロイグループの正常なインスタンスの最小数は、インスタンス数、または合計インスタンス数の割合 (%) として指定できます。割合 (%) を指定する場合、CodeDeploy はデプロイの開始時に割合 (%) を同等のインスタンス数に変換し、端数がある場合は切り上げます。

CodeDeploy はデプロイプロセス中にデプロイグループのインスタンスのヘルスステータスを追跡し、デプロイの指定された正常なインスタンスの最小数を使用して、デプロイを続行するかどうか判断します。基本的な原則は、デプロイによって、正常なインスタンスの数が、指定した最小数を下回ってはならないということです。このルールの 1 つの例外は、デプロイグループの正常なインスタンスの数が、指定した最小数より最初から少ない場合です。その場合、デプロイプロセスによってそれ以上正常なインスタンスの数が減ることはありません。

注記

CodeDeploy は現在停止状態にあるものも含めて、デプロイグループのすべてのインスタンスのデプロイを試みます。最小限の正常なホストの計算では、停止中のインスタンスは失敗したインスタンスと同じ影響を与えます。停止中のインスタンスが多すぎるために失敗したデプロイを解決するには、インスタンスを再起動するか、タグを変更してデプロイグループから除外します。

CodeDeploy はアプリケーションリビジョンをデプロイグループの異常なインスタンスにデプロイするよう試みて、デプロイプロセスを開始します。デプロイに成功するたびに、CodeDeploy はインスタンスのヘルスステータスを「正常」に変更し、それをデプロイグループの正常なインスタンス数に追加します。次に CodeDeploy は現在の正常なインスタンス数と正常なインスタンスの指定された最小数を比較します。

  • 正常なインスタンスの数が、正常なインスタンスの指定された最小数以下である場合、CodeDeploy はデプロイをキャンセルし、より多くのデプロイによって正常なインスタンスの数が減らないようにします。

  • 正常なインスタンスの数が指定された正常なインスタンスの最小数よりも少なくとも 1 つ大きい場合、CodeDeploy はアプリケーションリビジョンを正常なインスタンスの元のセットにデプロイします。

正常なインスタンスへのデプロイが失敗した場合、CodeDeploy はそのインスタンスのヘルスステータスを unhealthy に変更します。デプロイが進行するにつれて、CodeDeploy は正常なインスタンスの現在の数を更新し、正常なインスタンスの指定された最小数と比較します。デプロイプロセスのある時点で、正常なインスタンスの数が指定された最小数にまで減った場合、CodeDeploy はデプロイを停止します。この方法により、次のデプロイが失敗し、正常なインスタンスの数が指定された最小数を下回ることを回避できます。

注記

指定する正常なインスタンスの最小数が、デプロイグループの合計インスタンス数より少ないことを確認します。割合 (%) の値を指定する場合、切り上げられることを覚えておいてください。それ以外の場合、デプロイが開始すると、正常なインスタンスの数は正常なインスタンスの指定された最小数以下となり、CodeDeploy によりデプロイ全体が直ちに失敗します。

また、CodeDeploy は指定された正常なインスタンスの最小数および正常なインスタンスの実際の数を使用して、複数のインスタンスにアプリケーションリビジョンをデプロイするかどうかと、その方法を決定します。デフォルトでは、CodeDeploy は正常なインスタンスの数が、指定された正常なインスタンスの最小数を下回るリスクなく、可能な限り多くのインスタンスにアプリケーションリビジョンをデプロイします。以下に例を示します。

  • デプロイグループに 10 個のインスタンスがあり、最小の正常なインスタンス数を 9 に設定した場合、CodeDeploy は一度に 1 つのインスタンスをデプロイします。

  • デプロイグループに 10 個のインスタンスがあり、最小の正常なインスタンス数を 0 に設定した場合、CodeDeploy は同時に各インスタンスにデプロイします。

次の例では、10 個のインスタンスがあるデプロイグループを前提としています。

正常なインスタンスの最小数: 95%

CodeDeploy は正常なインスタンスの最小数を 10 個のインスタンスに切り上げます。これは正常なインスタンスの数と等しくなります。全体的なデプロイは、いずれのインスタンスにもリビジョンをデプロイすることなく、直ちに失敗します。

正常なインスタンスの最小数: 9

CodeDeploy は一度に 1 個のインスタンスにリビジョンをデプロイします。いずれかのインスタンスへのデプロイが失敗した場合、正常なインスタンスの数は正常なインスタンスの最小数に等しくなるため、CodeDeploy のデプロイ全体は直ちに失敗します。このルールの例外は、最後のインスタンスが失敗した場合でも、デプロイは引き続き成功することです。

CodeDeploy は、一度に 1 個のインスタンスずつ、デプロイが失敗するか、デプロイ全体が完了するまで、デプロイを続行します。10 のデプロイすべてに成功した場合、デプロイグループには 10 個の正常なインスタンスが含まれます。

正常なインスタンスの最小数: 8

CodeDeploy は一度に 2 個のインスタンスにリビジョンをデプロイします。これらのうち 2 つのデプロイに失敗した場合、CodeDeploy によりデプロイ全体が直ちに失敗します。このルールの例外は、最後のインスタンスが 2 番目に失敗した場合でも、デプロイは成功することです。

正常なインスタンスの最小数: 0

CodeDeploy はデプロイグループ全体に一度にリビジョンをデプロイします。デプロイ全体が成功するには、インスタンスに対して、少なくとも 1 つ以上のデプロイが成功する必要があります。正常なインスタンスが 0 の場合、デプロイは失敗します。これは、デプロイ全体を成功としてマークするには、正常なインスタンスの最小値が 0 であっても、デプロイ全体の完了時に 1 つ以上のインスタンスが正常であることが要件であるためです。