View a markdown version of this page

CodeDeploy インスタンスのヘルス - AWS CodeDeploy

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

CodeDeploy インスタンスのヘルス

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

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

  • CodeDeploy は、デプロイ中の各インスタンスにデプロイできます。

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

ヘルスステータス

CodeDeploy は、各インスタンスに 2 つのヘルスステータス値 (revision health と instance health) を割り当てます。

リビジョンの状態

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

  • 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 がアプリケーションリビジョンのデプロイを試みなかった各インスタンスは、現在のインスタンスのヘルスの値を保持します。

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

正常なインスタンスの最小数について

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

重要

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

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

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

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

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

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

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

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

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

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

注記

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

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

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

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

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

注記

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

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

一度にデプロイする必要があるデプロイ先のインスタンス数を決定する場合、CodeDeploy は次の計算を使用します。

[total-hosts] - [minimum-healthy-hosts] = [number-of-hosts-to-deploy-to-at-once]

例えば、次のようになります。

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

  • デプロイグループに 10 個のインスタンスがあり、正常なインスタンスの最小数を 3 に設定した場合、CodeDeploy は最初のバッチで同時に 7 つのインスタンスにデプロイし、2 番目のバッチで残りの 3 つのインスタンスにデプロイします。

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

例

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

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

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

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

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

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

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

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

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

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

アベイラビリティーゾーンあたりの正常なインスタンスの最小数について

注記

このセクションでは、Amazon EC2 インスタンスを表す用語としてインスタンスとホストを同じ意味で使用しています。

複数のアベイラビリティーゾーンのインスタンスにデプロイする場合は、オプションでzonal configuration機能を有効にすると、CodeDeploy は一度に 1 つのアベイラビリティーゾーンにデプロイできます。

この機能を有効にすると、CodeDeploy は正常なホストの数が「ゾーンあたりの正常なホストの最小数」および「正常なホストの最小数」の値を常に超えていることを確認します。正常なホストの数がいずれかの値を下回ると、CodeDeploy はすべてのアベイラビリティーゾーンでデプロイに失敗します。

一度にデプロイする先のホストの数を計算するために、CodeDeploy は「ゾーンあたりの正常なホストの最小数」と「正常なホストの最小数」の値の両方を使用します。CodeDeploy では、[A] と [B] (以下の [A] と [B]) の計算結果の小さい方を使用します。

[A] = [total-hosts] - [min-healthy-hosts] = [number-of-hosts-to-deploy-to-at-once]
[B] = [total-hosts-per-AZ] - [min-healthy-hosts-per-AZ] = [number-of-hosts-to-deploy-to-at-once-per-AZ]

一度にデプロイする先のホストの数を決定すると、CodeDeploy はその数のホストに (一度に 1 つのアベイラビリティーゾーンずつ) バッチでデプロイします。オプションでゾーン間に一時停止(または「ベイク時間」)を挟みます。

例

デプロイが以下のように設定されている場合:

  • [total-hosts] は 200

  • [minimum-healthy-hosts] は 160

  • [total-hosts-per-AZ] は 100

  • [minimum-healthy-hosts-per-AZ] は 50

結果...

  • [A] = 200 - 160 = 40

  • [B] = 100 - 50 = 50

  • 40 は 50 より少ない

したがって、CodeDeploy は一度に 40 ホストにデプロイします。

このシナリオでは、次のようにデプロイされます。

  1. CodeDeploy は最初のアベイラビリティーゾーンにデプロイします。

    1. CodeDeploy は最初の 40 ホストにデプロイします。

    2. CodeDeploy は次の 40 ホストにデプロイします。

    3. CodeDeploy は残りの 20 ホストにデプロイします。

      これで、1 つ目のアベイラビリティーゾーンへのデプロイが完了しました。

  2. (オプション) CodeDeploy は、[監視期間] または [最初のゾーン監視期間を追加] の設定で定義されているように、最初のゾーンへのデプロイが「ベイク」されるまで待機します。問題がなければ、CodeDeploy は続行します。

  3. CodeDeploy は 2 番目のアベイラビリティーゾーンにデプロイします。

    1. CodeDeploy は最初の 40 ホストにデプロイします。

    2. CodeDeploy は次の 40 ホストにデプロイします。

    3. CodeDeploy は残りの 20 ホストにデプロイします。

      これで、2 番目かつ最後のアベイラビリティーゾーンへのデプロイが完了しました。

ゾーン設定機能の詳細と、アベイラビリティーゾーンあたりの正常なインスタンスの最小数を指定する方法については、「zonal configuration」を参照してください。