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

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

CodeDeploy インスタンスのヘルス

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

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

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

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

[Health status](ヘルスステータス)

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 を試みた各インスタンスのインスタンスヘルスは、そのインスタンスのデプロイ試行が成功したか失敗したかに応じて、正常または異常に設定されています。

  • がアプリケーションリビジョンのデプロイを試み 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 に変更します。デプロイが進むにつれて、 は現在の正常なインスタンスの数 CodeDeploy を更新し、指定された正常なインスタンスの最小数と比較します。デプロイプロセスのどの時点でも、正常なインスタンスの数が指定された最小数に達すると、 はデプロイを CodeDeploy 停止します。この方法により、次のデプロイが失敗し、正常なインスタンスの数が指定された最小数を下回ることを回避できます。

注記

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

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

一度にデプロイするインスタンスの数を決定するために、 は次の計算 CodeDeploy を使用します。

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

例:

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

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

  • デプロイグループに 10 個のインスタンスがあり、最小の正常なインスタンス数を 0 に設定すると、 は同時に 10 個のインスタンスに 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 つ以上のインスタンスが正常であることが要件であるためです。

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

注記

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

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

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

一度にデプロイするホストの数を計算するために、 [A][B]は「ゾーンあたりの正常なホストの最小値」と「正常なホストの最小値」の両方 CodeDeploy を使用します。 CodeDeploy は、 [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]

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

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

  • [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

  • 4050 より少ない

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

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

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

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

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

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

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

  2. (オプション) Monitor duration または Add a monitor duration for the first zone setting で定義されている最初のゾーン 'bakes' へのデプロイ中に CodeDeploy 待機します。問題がない場合は、 CodeDeploy 続行します。

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

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

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

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

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

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