マネージド インスタンスの操作

マネージド インスタンスは、マネージド インスタンス グループ(MIG)内の実際の仮想マシン(VM)インスタンスの目的の状態を表すデータ エンティティです。このドキュメントでは、MIG 内のマネージド インスタンスを確実に操作する方法について説明します。たとえば、特定のインスタンスに関する情報の追加、削除、更新、取得が必要になることがあります。

構成の変更が MIG によって元に戻されないように、このドキュメントで説明する方法を使用することが重要になります。グループに指定外の操作を行うと、MIG が変更を検出し、グループの修復を試みることがあります。たとえば、グループ内のインスタンスを削除した場合、MIG はマネージド インスタンスの指定に従ってそのインスタンスを自動的に再作成することがあります。

始める前に

マネージド インスタンスとは

マネージド インスタンスとは、実際の VM インスタンスの現在のステータスと目的の状態が含まれる、MIG 内のデータ エンティティです。

マネージド インスタンスの現在のステータスには次のフィールドが含まれます。

  • インスタンスのライフサイクルのステータス(例: RUNNINGSTOPPING)。
  • MIG がインスタンスに対して実行している現在のアクション(例: RESTARTINGVERIFYINGNONE)。
  • インスタンスの健全性(例: HEALTHYUNHEALTHY)。

実際の VM インスタンスに対するマネージド インスタンスの目的の状態には次のものがあります。

  • 目的のバージョン。つまり、インスタンスに使用するバージョン名とインスタンス テンプレートです。
  • 保持するアイテム(ディスク、メタデータなど)について維持する状態

図 1 のように、MIG 内の各マネージド インスタンスについて、MIG はそのマネージド インスタンスの仕様に従って実際の VM を稼働中の状態にします。

MIG は構成に基づいてマネージド インスタンスを自動的に生成します。マネージド インスタンスは、MIG が管理している実際の VM インスタンスに対応します。

図 1:マネージド インスタンスと対応する VM の関係

マネージド インスタンスの仕様を表示するには、MIG 内のマネージド インスタンスに関する情報を取得するをご覧ください。

インスタンスを MIG に追加する

インスタンスを MIG に追加するには次の方法があります。

新しく追加されたインスタンスが稼働していることを確認するには、グループのステータスを確認するか、マネージド インスタンスのステータスを確認します。

手動によるサイズ変更

マネージド インスタンス グループの自動スケーリングをまだ設定していない場合、グループを手動でサイズ変更することで、グループ内のインスタンスの数を変更できます。MIG を手動でサイズ変更するをご覧ください。

自動スケーリング

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

特定の名前を付けたインスタンスを追加する

特定の名前に依存するシステムがある場合は、gcloud ツールまたは API を使用して、特定の名前を付けた VM を既存の MIG に追加します。

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

制限事項

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

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

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 は、新しいインスタンスに割り当てる名前です。

API

API で、regionInstanceGroupManagers.createInstances メソッドに対する POST リクエストを行います。ゾーン マネージド インスタンス グループの場合は、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"
    }
  ]
}

グループ内の選択したインスタンスを更新する

MIG 内のインスタンスを選択的に更新するをご覧ください。

インスタンスを MIG から削除する

マネージド インスタンスを削除すると、MIG はグループの targetSize を縮小し、対応する VM インスタンスを削除します。

ステートフル MIG を設定した場合、MIG はインスタンスで維持する状態の構成を削除します。また、MIG は削除されたインスタンスが属するすべてのターゲット プールからインスタンスを削除します。

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

マネージド インスタンスを削除し、それにより対応する VM インスタンスを削除するには、次の方法があります。

特定のインスタンスを削除する

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

特定のマネージド インスタンスを削除するには、Google Cloud Consolegcloud コマンドライン ツール、または API を使用します。

Console

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

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

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

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

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

gcloud

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

削除リクエストが同時実行オペレーションと競合する可能性がある場合は、--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

API

API で、regionInstanceGroupManagers.deleteInstances メソッドに対する POST リクエストを行います。ゾーン マネージド インスタンス グループの場合は、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 インスタンスをマネージド インスタンス グループから分離すると、グループ全体に影響を与えることなく、個々のインスタンスの問題をデバッグしやすくなります。グループからインスタンスを破棄すると、マネージド インスタンス グループに割り当てられたロードバランサからもインスタンスが除外されます。特定の個別のインスタンスに手動で割り当てられたターゲット プールは削除されません。

インスタンスを破棄すると、インスタンス グループに指定された targetSize が縮小されますが、指定されたオートスケーラーの設定は変更されません。オートスケーラーのあるマネージド インスタンス グループでは、引き続きインスタンスが必要に応じて自動で追加または削除されます。

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

マネージド インスタンス グループからインスタンスを破棄するには、Google Cloud Consolegcloud ツール、または API を使用します。

Console

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

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

  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]

API

API で、regionInstanceGroupManagers.abandonInstances メソッドに対する POST リクエストを行います。ゾーン マネージド インスタンス グループの場合は、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 内のインスタンスを再作成する

この方法により、最新のインスタンス テンプレートとステートフル構成(存在する場合)を使用するよう、選択した VM を更新できます。マネージド インスタンス グループに属するすべての VM を再作成する必要がある場合は、代わりにローリング アップデートを開始します。

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

マネージド インスタンス グループ内の選択した VM インスタンスを再作成するには、gcloud ツールまたは API を使用します。

gcloud

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

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

API

API で、regionInstanceGroupManagers.recreateInstances メソッドに対する POST リクエストを行います。ゾーン マネージド インスタンス グループの場合は、instanceGroupManagers.recreateInstances メソッドを使用します。

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

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

マネージド インスタンス グループの VM インスタンスの再作成リクエストを行うと、システムで新しい VM のプロビジョニングが可能になり次第、再作成された新しい VM が起動します。このプロセスにかかる時間は、再作成するインスタンスの数によっては長くなる場合があります。グループのステータスを確認するか、マネージド インスタンスのステータスを確認します。

MIG 内のインスタンスに関する情報を取得する

MIG 内のマネージド インスタンスに関する情報を取得するをご覧ください。

MIG でステートフル インスタンスを構成する

詳細については、ステートフル MIG の構成をご覧ください。

次のステップ