MIG の VM を追加または削除する


マネージド インスタンス グループ(MIG)を作成した後、そのグループの VM は、ワークロードのニーズに合わせて追加または削除できます。MIG に追加可能な VM の最大数がデフォルトの上限に達し、さらに VM が必要な場合は、MIG のサイズの上限を上げることができます。

MIG で VM を追加または削除する場合は、以下の手順を行います。

始める前に

  • まだ設定していない場合は、認証を設定します。認証とは、Google Cloud のサービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. Terraform

      ローカル開発環境でこのページの Terraform サンプルを使用するには、gcloud CLI をインストールして初期化し、ユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定します。

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      詳細については Set up authentication for a local development environment をご覧ください。

      REST

      このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      詳細については、Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。

グループのターゲット サイズを設定する

MIG のターゲット サイズは、オートスケーラーを使用して自動的に設定することも、手動で設定することもできます。

MIG の VM を自動的に追加および削除する

マネージド インスタンス グループは、ワークロードに応じて VM が自動的に追加または削除されるように構成できます。トラフィックの増加をアプリケーションで適切に処理できると同時に、コンピューティング リソースの必要性が低下した場合には費用を抑えることができます。マネージド インスタンス グループのスケーリングを開始するには、自動スケーリングを使用して MIG を作成するをご覧ください。

詳細については、インスタンスの自動スケーリング グループをご覧ください。

MIG のサイズを手動で設定する

マネージド インスタンス グループの自動スケーリングをまだ設定していない場合、グループを手動でサイズ変更することで、グループ内のインスタンスの数を変更できます。サイズを大きくすると、マネージド インスタンス グループに現在のインスタンス テンプレートを使用して新しいインスタンスが追加されます。サイズを小さくすると、マネージド インスタンス グループから VM が削除されます。DELETINGCREATING、および RECREATINGcurrentAction のあるインスタンスがグループから削除された後で、スケジュールされたアクションのない実行中のインスタンスが削除されます。

グループが属するバックエンド サービスコネクション ドレインが有効になっている場合は、コネクション ドレインが有効のタイムアウトが経過してから VM インスタンスが削除されるまでに 60 秒ほどかかることがあります。

コンソール

  1. Google Cloud コンソールの [インスタンス グループ] ページに移動します。

    [インスタンス グループ] に移動

  2. リストの [名前] 列で、グループサイズを変更するインスタンス グループの名前をクリックします。

  3. [編集] をクリックして、このマネージド インスタンス グループを変更します。

  4. [インスタンスの数] で、このマネージド インスタンス グループに含めるインスタンスの数を指定します。[自動スケーリング] が有効な場合は、グループのインスタンスが必要に応じて自動的に追加または削除されます。ただし、[インスタンスの最小数] および [インスタンスの最大数] の値を変更して、オートスケーラーで間接的にグループのサイズを調整することもできます。

  5. [保存] をクリックして、新しいテンプレートを適用します。

gcloud

resize コマンドを使用します。

gcloud compute instance-groups managed resize INSTANCE_GROUP_NAME \
    --size NEW_SIZE \
    --zone ZONE

REST

ゾーンまたはリージョンの MIG リソースの resize メソッドを呼び出します。パラメータとして新しいインスタンス グループのサイズを指定します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/INSTANCE_GROUP_NAME/resize?size=NEW_SIZE

インスタンス グループがリージョン マネージド インスタンス グループの場合は、zones/ZONEregions/REGION に置き換えます。

マネージド インスタンス グループのサイズ変更リクエストを行うと、システムでプロビジョニングまたは削除が可能になり次第、その VM が起動または停止します。このプロセスにかかる時間は、グループ内のインスタンスの数によっては長くなる場合があります。マネージド インスタンス グループのインスタンスのステータスを検証してください。

サイズ変更中に作成再試行モードを無効にする

デフォルトでは、VM インスタンスの初回作成に失敗すると、VM が作成されるまで、マネージド インスタンス グループが VM の作成の再試行を続けます。ただし、自動の作成再試行が不要の場合は、インスタンス グループのサイズを変更するときに作成再試行モードを無効にできます。このモードでは、マネージド インスタンス グループですべてのインスタンスの作成が一度だけ試行されます。インスタンスの作成時にエラーが発生した場合、このインスタンスはマネージド インスタンス グループによって作成されず、グループのマネージド インスタンスのリストから削除されます。マネージド インスタンス グループの最終的なサイズは小さくなります。

このモードは、VM の作成の最初の試行時にのみ適用されます。このモードが有効なときに VM が正常に作成されると、VM は通常のサイズ変更リクエストで作成された他のすべての VM と同じように動作します。特に、実行中の VM が後で予期せずに終了し、再作成が必要な場合、このモードは、このシナリオでの再作成の動きには影響しません。

作成再試行モードを無効にすると、VM のグループが自動的に作成され、厳密な数の VM が必要ではない状況では特に役立ちます。リクエストしたすべてのインスタンスが作成されるまで待ち続けるよりも、マネージド インスタンス グループのサイズをできるだけ早く確定し、グループ内の VM の数を柔軟に変更できるようにした方が望ましいこともあります。インスタンスの作成は、割り当てエラーや関連のないその他の問題のために、一時的に遅れることがあります。また、いつまでも終わらないこともあります。

制限事項

  • ターゲット分配形態が EVEN のリージョン MIG の場合、作成再試行は無効にできません。
  • ターゲット分配形態が BALANCED または ANY_SINGLE_ZONE のリージョン MIG の場合、作成再試行モードを無効にする前に、プロアクティブなインスタンスの再分配を無効にする必要があります。
  • 自動スケーリングされた MIG の場合、作成再試行は無効にできません。

作成再試行モードが無効になっているときにマネージド インスタンス グループのサイズを変更するには、Google Cloud CLI または REST を使用します。

gcloud

--no-creation-retries フラグを指定して、ベータ版の resize コマンドを使用します。

gcloud beta compute instance-groups managed resize INSTANCE_GROUP_NAME \
    --size NEW_SIZE \
    --no-creation-retries \
    [--region REGION | --zone ZONE]

次のように置き換えます。

  • INSTANCE_GROUP_NAME: サイズ変更する MIG の名前。
  • NEW_SIZE: マネージド インスタンス グループで実行中のインスタンスのターゲット数。
  • ZONE: ゾーン MIG の場合、MIG が配置されているゾーン。
  • REGION: リージョン MIG の場合、MIG が配置されているリージョン。

REST

ゾーン MIG の場合は、ベータ版の instanceGroupManagers.resizeAdvanced メソッドを使用します。リージョン MIG の場合は、ベータ版の regionInstanceGroupManagers.resizeAdvanced メソッドを使用します。リクエストの本文で新しいグループのサイズと noCreationRetries フィールドを指定します。

たとえば、次の呼び出しを行い、作成再試行モードを無効にしてゾーン MIG のサイズを変更します。

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/INSTANCE_GROUP_NAME/resizeAdvanced

{
 "targetSize": NEW_SIZE,
 "noCreationRetries": true
}

次のように置き換えます。

  • PROJECT_ID: 実際のプロジェクト ID。
  • ZONE: MIG が配置されているゾーン。リージョン MIG の場合は、zones/ZONEregions/REGION に置き換えてリージョンを指定します。詳細については、リージョン MIG についてをご覧ください。
  • INSTANCE_GROUP_NAME: サイズ変更する MIG の名前。
  • NEW_SIZE: マネージド インスタンス グループで実行中のインスタンスのターゲット数。

    listManagedInstances メソッドを使用すると、どのインスタンスをどのモードで作成中かを確認できます。作成再試行モードを無効にすると、作成するインスタンスに CREATING_WITHOUT_RETRIEScurrentAction が含まれます。

特定のインスタンスの追加、削除、破棄

MIG で特定の名前のインスタンスを作成する

特定の名前に依存するシステムがある場合は、特定の名前を持つ VM を既存の MIG に追加できます。

このようなマネージド インスタンスに割り当てた名前は、VM が再作成された場合もそのまま維持されます。MIG インスタンスの状態の維持について詳しくは、ステートフル MIG をご覧ください。

制限事項

特定の名前を持つインスタンスを作成する場合は、次の制限事項があります。

  • インスタンスの作成プロセス中は、自動スケーリングを無効にする必要があります。
  • MIG の更新ポリシーは日和見更新として設定する必要があります。
  • リージョン MIG を更新する場合:
  • プロジェクト内で重複する VM インスタンス名を使用することはできません。

特定の名前の VM を既存の MIG に追加するには、gcloud CLI または REST を使用します。

gcloud

instance-groups managed create-instance コマンドを使用します。

gcloud compute instance-groups managed create-instance INSTANCE_GROUP_NAME \
    --instance INSTANCE_NAME \
    [--region REGION | --zone ZONE]

次のように置き換えます。

  • INSTANCE_GROUP_NAME は、新しいインスタンスを追加するリージョン MIG またはゾーン MIG の名前です。
  • INSTANCE_NAME は、新しいインスタンスに割り当てる名前です。

REST

POST リクエストを regionInstanceGroupManagers.createInstances メソッドに送信します。ゾーン マネージド インスタンス グループの場合は、instanceGroupManagers.createInstances メソッドを使用します。リクエストの本文に instances フィールドを含め、1 つ以上のインスタンスの名前を指定します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME/createInstances
{
  "instances": [
    {
      "name": "INSTANCE_NAME_1"
    },
    {
      "name": "INSTANCE_NAME_2"
    }
  ]
}

特定のインスタンスをグループから削除する

マネージド インスタンス グループから個々の VM を削除できます。インスタンスを削除すると、インスタンス グループに指定された targetSize が縮小され、削除された VM が属するすべてのターゲット プールからその VM が削除されます。

マネージド インスタンス グループから特定のインスタンスを削除しても、指定したオートスケーラーの設定は変更されません。マネージド インスタンス グループからインスタンスを削除すると、オートスケーラーがグループ内のその他のインスタンスでのワークロードの増加を検出し、グループサイズを増やして元のレベルまで戻す場合があります。これを回避するには、インスタンスを削除する前にオートスケーラーを停止します。

グループが属するバックエンド サービスコネクション ドレインが有効になっている場合は、コネクション ドレインが有効のタイムアウトが経過してから VM インスタンスが削除されるまでに 60 秒ほどかかることがあります。

コンソール

  1. Google Cloud コンソールの [インスタンス グループ] ページに移動します。

    [インスタンス グループ] に移動

  2. リストの [名前] 列で、個々のインスタンスを削除するインスタンス グループの名前をクリックします。ページが開き、インスタンス グループ プロパティと、グループに含まれるインスタンスのリストが表示されます。

  3. [メンバー] セクションで、削除するインスタンスをインスタンスのリストから選択します。

  4. [インスタンスを削除] をクリックします。選択したインスタンスが削除されます。

gcloud

gcloud CLI でインスタンスを削除するには、instance-groups managed delete-instances コマンドを使用します。

gcloud compute instance-groups managed delete-instances INSTANCE_GROUP_NAME \
    --instances INSTANCE_NAME_1,INSTANCE_NAME_2 \ 
    [--region REGION | --zone ZONE]

このコマンドは、インスタンスごとにオペレーションのステータスを返します。

  • gcloud CLI によってインスタンスが削除された場合、SUCCESS が返されます。
  • リクエストで指定されたインスタンスがグループのメンバーでない場合、メンバーがすでに削除または放棄されている場合、または他の理由でリクエストが失敗した場合は、すべてのインスタンスに対して FAIL が返されます。
  • SKIPPED が返されるのは、--skip-instances-on-validation-error フラグを使用していて、インスタンスがそのグループのメンバーでない場合、またはインスタンスがすでに削除または放棄されている場合に限られます。
  • MEMBER_NOT_FOUND は、gcloud CLI でインスタンス名からゾーンを解決できなかった場合に、リージョン グループに対してのみ返されます。

削除リクエストが同時実行オペレーションと競合する可能性がある場合は、--skip-instances-on-validation-error フラグを使用します。このフラグは、グループのメンバーではないインスタンスや、すでに削除または放棄されているインスタンス(たとえば、オートスケーラーによって削除されるインスタンス)がリクエストに含まれている場合でもリクエストを処理するかどうかを指定します。このフラグを省略し、このようなインスタンスがリクエストで指定されている場合、デフォルトではオペレーションが失敗します。リクエストに無効な形式のインスタンス名が含まれている場合、またはリクエストでグループに属していないゾーンまたはリージョンのインスタンスが参照されている場合、オペレーションは常に失敗します。

たとえば、次のコマンドは 4 つのインスタンスの削除をリクエストしていますが、そのうちの 3 つはグループに存在しません。

gcloud compute instance-groups managed delete-instances example-mig \
    --instances=example-instance-1,example-instance-2,example-instance-3,example-instance-4 \
    --region=us-central1 \
    --skip-instances-on-validation-error

この例では、example-instance-3 は削除されますが、3 つのインスタンスは検証に合格していないため、スキップされます。

Updated [https://www.googleapis.com/compute/v1/projects/example-project/regions/us-central1/instanceGroupManagers/example-mig].
PROJECT          ZONE           INSTANCE               STATUS   VALIDATION_ERROR
example-project  us-central1-a  example-instance-1     SKIPPED  Cannot delete instance https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/instances/example-instance-1 that was already deleted.
example-project  us-central1-a  example-instance-2     SKIPPED  Cannot delete instance https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/instances/example-instance-2 that was already abandoned.
example-project  us-central1-a  example-instance-3     SUCCESS
example-project  us-central1-a  example-instance-4     SKIPPED  Cannot find instance https://www.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/instances/example-instance-4.

--skip-instances-on-validation-error フラグを省略して、いずれかのインスタンスが検証に合格しなかった場合、インスタンスは削除されません。

gcloud compute instance-groups managed delete-instances example-mig \
    --instances=example-instance-1,example-instance-2,example-instance-3,example-instance-4 \
    --region=us-central1

Updated [https://www.googleapis.com/compute/v1/projects/example-project/regions/us-central1/instanceGroupManagers/example-mig].
PROJECT          ZONE             INSTANCE              STATUS
example-project  us-central1-a    example-instance-1    FAIL
example-project  us-central1-a    example-instance-2    FAIL
example-project  us-central1-a    example-instance-3    FAIL
example-project  us-central1-a    example-instance-4    FAIL

REST

POST リクエストを regionInstanceGroupManagers.deleteInstances メソッドに送信します。ゾーン マネージド インスタンス グループの場合は、instanceGroupManagers.deleteInstances メソッドを使用します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME/deleteInstances

{
  "instances": [
    "zones/ZONE/instances/INSTANCE_NAME_1",
    "zones/ZONE/instances/INSTANCE_NAME_2"
   ]
}

削除リクエストが同時実行オペレーションと競合する可能性がある場合は、skipInstancesOnValidationError フィールドを使用します。このフィールドは、グループのメンバーではないインスタンスや、すでに削除または放棄されているインスタンス(たとえば、オートスケーラーによって削除されるインスタンス)がリクエストに含まれている場合でもリクエストを処理するかどうかを指定します。このフラグを省略し、このようなインスタンスがリクエストで指定されている場合、デフォルトではオペレーションが失敗します。リクエストに無効な形式のインスタンス名が含まれている場合、またはリクエストでグループに属していないゾーンまたはリージョンのインスタンスが参照されている場合、オペレーションは常に失敗します。

たとえば、次の 2 つのインスタンスを削除するリクエストは、いずれかのインスタンスがすでに削除されているか削除中であっても成功します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME/deleteInstances

{
 "instances": [
  "zones/ZONE/instances/INSTANCE_NAME_1",
  "zones/ZONE/instances/INSTANCE_NAME_2"
 ],
 "skipInstancesOnValidationError": true
}

オペレーションでスキップされたインスタンスを確認するには、オペレーションを表示します。リージョン MIG の場合は、regionOperations.get メソッドを使用します。ゾーン MIG の場合は、zoneOperations.get メソッドを使用します。警告はオペレーションの警告フィールドに表示されます。

マネージド インスタンス グループのインスタンスの削除リクエストを行うと、システムで削除が可能になり次第、そのインスタンスが停止します。このプロセスにかかる時間は、グループから削除するインスタンスの数によっては長くなる場合があります。グループのステータスを確認するか、マネージド インスタンスのステータスを確認します。

インスタンスを MIG から破棄する

VM インスタンスをマネージド インスタンス グループから分離すると、グループ全体に影響を与えることなく、個々のインスタンスの問題をデバッグしやすくなります。グループからインスタンスを破棄すると、マネージド インスタンス グループに割り当てられたロードバランサからもインスタンスが除外されます。特定の個別のインスタンスに手動で割り当てられたターゲット プールは削除されません。

破棄された VM インスタンスをグループに戻すことはできません。インスタンスを破棄すると、インスタンス グループに指定された targetSize が縮小されますが、指定されたオートスケーラーの設定は変更されません。オートスケーラーのあるマネージド インスタンス グループでは、引き続きインスタンスが必要に応じて自動で追加または削除されます。 自動スケーリングが ONLY_SCALE_OUT モードに設定されたリージョン MIG では、VM インスタンスを破棄して MIG のターゲット サイズをオートスケーラーの推奨サイズまで減らすと、オートスケーラーは、破棄された VM の同じゾーンに新しい VM インスタンスを作成することがあります。このような場合は、新しい VM インスタンスが作成されないように、別のゾーンの VM インスタンスを破棄してみてください。

グループが属するバックエンド サービスコネクション ドレインが有効になっている場合は、コネクション ドレインが有効のタイムアウトが経過してから VM インスタンスが削除されるまでに 60 秒ほどかかることがあります。

コンソール

  1. Google Cloud コンソールで、[インスタンス グループ] ページに移動します。

    [インスタンス グループ] に移動

  2. リストの [名前] 列で、インスタンスを削除するインスタンス グループの名前をクリックします。ページが開き、インスタンス グループ プロパティと、グループに含まれるインスタンスのリストが表示されます。

  3. [メンバー] セクションで、グループから削除するインスタンスをインスタンスのリストから選択します。

  4. [グループから削除] をクリックします。選択したインスタンスはグループから除外されますが、グループ外で引き続き実行されます。

gcloud

VM を削除せずにインスタンス グループからインスタンスを削除するには、instance-groups managed abandon-instances コマンドを使用します。

gcloud compute instance-groups managed abandon-instances INSTANCE_GROUP_NAME \
    --instances INSTANCE_NAME_1,INSTANCE_NAME_2 \
    [--region REGION | --zone ZONE]

REST

POST リクエストを regionInstanceGroupManagers.abandonInstances メソッドに送信します。ゾーン マネージド インスタンス グループの場合は、instanceGroupManagers.abandonInstances メソッドを使用します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME/abandonInstances

{
 "instances": [
  "zones/ZONE/instances/INSTANCE_NAME_1",
  "zones/ZONE/instances/INSTANCE_NAME_2"
 ]
}

マネージド インスタンス グループからインスタンスを破棄するリクエストを行うと、すぐにグループからそのインスタンスが除外されます。グループのステータスを確認するか、マネージド インスタンスのステータスを確認します。

グループサイズの上限を上げる

デフォルトでは、ゾーン MIG のサイズ上限は 1,000 VM、リージョン MIG のサイズ上限は 2,000 VM です。これらの上限は、ゾーン MIG では 2,000 VM、リージョン MIG では 4,000 VM に引き上げることができます。

上限を上げるには、グループの listManagedInstancesResults フィールドを PAGINATED に設定します。グループ内の VM がさらに必要な場合は、複数の MIG を作成するか、サポートにお問い合わせください。

コンソール

  1. Google Cloud コンソールの [インスタンス グループ] ページに移動します。

    [インスタンス グループ] に移動

  2. リストの [名前] 列で、サイズ上限を増やすインスタンス グループの名前をクリックします。

  3. [編集] をクリックして、インスタンス グループを変更します。

  4. [詳細設定を表示] をクリックして、詳細設定セクションを開きます。

  5. [マネージド インスタンス リスト API 呼び出しの結果] で、ページ分割ありのオプションを選択します。

  6. [保存] をクリックして変更を適用します。

gcloud

既存の MIG の場合は、update コマンドを使用します。

gcloud compute instance-groups managed update INSTANCE_GROUP_NAME \
    --list-managed-instances-results=PAGINATED

新しい MIG の場合は、create コマンドを使用します。

gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --template INSTANCE_TEMPLATE \
    --size SIZE \
    --list-managed-instances-results=PAGINATED

Terraform

MIG のサイズ上限を引き上げるには、list_managed_instances_results 引数を PAGINATED に設定します。

次のサンプルでは、ゾーン MIG のサイズ上限を引き上げます。サンプルで使用しているリソースの詳細については、google_compute_instance_group_manager リソースをご覧ください。 リージョン MIG の場合は、google_compute_region_instance_group_manager リソースを使用します。

resource "google_compute_instance_group_manager" "default" {
  name                           = "my-igm"
  base_instance_name             = "test"
  target_size                    = 7
  zone                           = "us-central1-f"
  list_managed_instances_results = "PAGINATED"
  version {
    instance_template = google_compute_instance_template.default.id
    name              = "primary"
  }
}

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

REST

既存のゾーン MIG の場合は、instanceGroupManagers.patch メソッドを使用します。リージョン MIG の場合は、regionInstanceGroupManagers.patch メソッドを使用します。次に例を示します。

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/region/REGION/regionInstanceGroupManagers/INSTANCE_GROUP_NAME

{
  "listManagedInstancesResults": "PAGINATED",
}

新しいゾーン MIG の場合は、instanceGroupManagers.insert メソッドを使用し、リージョン MIG の場合は regionInstanceGroupManagers.insert メソッドを使用します。

ページレス リスト結果に戻す場合は、グループのデフォルトのサイズ上限も戻す必要があります。元に戻すには、まずグループがデフォルトのサイズ上限を超えていないことを確認してから、listManagedInstancesResults フィールドを PAGELESS に設定します。

次のステップ