マネージド インスタンス グループの作成

マネージド インスタンス グループ(MIG)には、インスタンス テンプレートに基づく同一の仮想マシン(VM)インスタンスが含まれます。MIG はアプリケーションの高可用性を維持するため、VM を事前に有効な状態(RUNNING 状態)にしておく必要があります。

MIG は、自動修復負荷分散自動スケーリング、および自動更新をサポートしています。

ゾーン(単一ゾーン) MIG とリージョン(マルチゾーン)MIG の両方が作成できます。リージョン MIG は、同じリージョン内の複数のゾーンに VM を分散させるため、可用性が向上します。

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

始める前に

制限事項

  • 各 MIG には最大 1,000 個の VM を含めることができます。
  • MIG の更新時に、1 回のリクエストで指定できるインスタンス数は最大で 1,000 個です。

ステートレス アプリケーションに MIG を使用する

MIG はステートレス アプリケーションに使用できます。ステートレス アプリケーションは、実行される基盤となる仮想マシン(VM)インスタンスの特定の状態に依存しません。アプリケーションは、接続されたディスクのコンテンツやメモリ内データなど、保持されない VM プロパティに依存しないようにしてください。アプリケーションで VM プロパティを保持する必要がある場合は、ステートフル MIG をご覧ください。

ステートレス MIG のすべての永続ディスクは、対応する VM が削除または再作成されたときに、デフォルトでこれらのプロパティを削除または再作成します。このため、ステートレス MIG の永続データとして、接続されたディスクに依存しないようにしてください。データを維持するためには、ソフトウェアと構成を更新して、カスタム イメージを常に最新の状態に保つことをおすすめします。データを維持するには、起動スクリプトを使用し、Cloud Storage のような一元管理された別の場所にデータをバックアップするようにアプリケーションを構成します。

インスタンス テンプレートには、コンテナ イメージまたは関連する起動スクリプトを含むカスタム イメージを指定できます。これにより、VM が再作成されたときに、必要なアプリがインストールされ、必要なデータへのアクセス権が付与されます。インスタンス テンプレート作成の詳細については、確定的なインスタンス テンプレートをご覧ください。

ステートフル アプリケーションで MIG を使用する(ベータ版)

マネージド インスタンス グループは、ステートフル アプリケーションもサポートしています。ステートフル MIG は、マシンの再起動、再作成、自動修復、更新のときに、各 VM の固有の状態(VM インスタンス名、接続された永続ディスク、メタデータ)を保持します。

ステートフル MIG は、データベース、データ処理アプリケーション、従来のアプリケーション、チェックポインティングを使用して長時間実行されるバッチ ワークロードなど、ステートフルなデータまたは構成を持つアプリケーションに使用します。

ステートフルなアプリケーションまたはクラスタを Compute Engine にデプロイし、自動修復とマルチゾーン デプロイで可用性を改善する場合や、自動ローリング アップデートで更新を高速化する場合は、ステートフル MIG の使用を検討してください。

ステートフル MIG を作成する方法、またはステートフル構成を既存の MIG に追加する方法については、ステートフル MIG の構成をご覧ください。

マネージド インスタンス グループを作成する

マネージド インスタンス グループを作成する前に、インスタンス テンプレートを作成して、オペレーティング システム イメージまたはコンテナ イメージ、およびグループ内のすべての VM の設定を指定する必要があります。

テンプレートを作成したら Google Cloud Consolegcloud compute ツール、または API を使用して、マネージド インスタンス グループを作成します。

Console

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

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

  2. [インスタンス グループを作成] をクリックします。
  3. MIG の名前を入力し、グループを配置するゾーンを選択します。
  4. [グループの種類] で、[マネージド インスタンス グループ] を選択します。
  5. [インスタンス テンプレート] でインスタンス テンプレートを選択します。使用できるテンプレートがない場合は、インスタンス テンプレートを作成します。
  6. グループ内に作成するインスタンスの数を指定します。必要に応じて、自動スケーリングを有効にすると、その使用率に基づいてインスタンスを自動的に追加または削除できます。また、自動修復を有効にすると、グループ内の VM に対してアプリケーションのヘルスチェックを実行できます。
  7. [作成] をクリックして、新しいグループを作成します。

gcloud

instance-groups managed create サブコマンドを使用してインスタンス グループを作成します。

gcloud compute instance-groups managed create instance-group-name \
    --base-instance-name base-name \
    --size size \
    --template instance-template \
    --zone zone

以下を置き換えます。

  • instance-group-name: このインスタンス グループの名前。
  • base-name: このインスタンス グループで作成された VM に使用する名前。これらの VM は同一のテンプレートに基づいているため、各 VM には VM 名の一部としてランダムな文字列が割り当てられます。このランダムな文字列の先頭にはベース名が追加されます。たとえば、ベース名を example に設定すると、VM の名前は example-yahsexample-qtyz になります。特定の名前が必要な場合は、MIG に特定の名前のインスタンスを作成するをご覧ください。
  • size: インスタンス グループのサイズ。
  • instance-template: このグループに使用するインスタンス テンプレートの名前。
  • zone: Compute Engine で使用できるゾーンのいずれか。

    たとえば、次のコマンドでは、VM のベース名が test の example-group という名前のインスタンス グループを作成します。グループには 3 つのインスタンスが含まれます。

    gcloud compute instance-groups managed create example-group \
      --base-instance-name test \
      --size 3 \
      --template an-instance-template

API

API で、instanceGroupManagers.insert メソッド、または regionInstanceGroupManagers.insert メソッドに対して POST リクエストを作成します。リクエストの本文に、グループ名、グループサイズ、グループ内の VM のベース名、インスタンス テンプレートの URL を含めます。

POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroupManagers

{
  "baseInstanceName": "base-name",
  "versions": [
    {
      "instanceTemplate": "global/instanceTemplates/instance-template"
    }
  ],
  "name": "instance-group-name",
  "targetSize": size
}

以下を置き換えます。

  • project-id: リクエストのプロジェクト ID。
  • zone: リクエストのゾーン
    • リージョン MIG の場合は、zones/zoneregions/region に置き換えてリージョンを指定します。
  • instance-group-name: このインスタンス グループの名前。
  • base-name: このインスタンス グループで作成された VM に使用する名前。これらの VM は同一のテンプレートに基づいているため、各 VM には VM 名の一部としてランダムな文字列が割り当てられます。このランダムな文字列の先頭にはベース名が追加されます。たとえば、ベース名を example に設定すると、VM の名前は example-yahsexample-qtyz になります。特定の名前が必要な場合は、MIG に特定の名前のインスタンスを作成するをご覧ください。
  • size: インスタンス グループのサイズ。
  • instance-template: このグループに使用するインスタンス テンプレート。

MIG の構成や操作に応じて、さまざまなポリシーやアクションがグループのインスタンスに影響します。どのマネージド インスタンスが起動しているかを確認するには、マネージド インスタンスのステータスの確認を参照してください。

マネージド インスタンス グループのインスタンス テンプレートを変更する

マネージド インスタンス グループのインスタンス テンプレートを変更しても、その変更を既存のインスタンスに反映する必要はありません。マネージド インスタンス グループでは、インスタンスの追加や再作成のリクエストには新しいテンプレートが使用されますが、そのテンプレートによってグループ内の既存の VM が自動的に更新されることはありません。これにより、どの VM を更新するかは正確に制御できますが、インスタンス グループ内に別種の VM が混在することになります。

新しいインスタンス テンプレートを作成した後、既存のインスタンス グループのインスタンス テンプレートを変更します。

Console

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

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

  2. リストの [名前] 列で、インスタンス テンプレートを変更するインスタンス グループの名前をクリックします。
  3. [グループを編集] をクリックして、このマネージド インスタンス グループを変更します。
  4. [インスタンス テンプレート] で、このグループに使用する新しいインスタンス テンプレートを選択します。
  5. [保存] をクリックして、新しいテンプレートを適用します。

gcloud

set-instance-template メソッドを使用してテンプレートを更新するには、新しいテンプレートを instance-groups managed set-instance-template サブコマンドに渡します。

gcloud compute instance-groups managed set-instance-template instance-group-name \
    --template instance-template \
    --zone zone

API

ターゲットのマネージド インスタンス グループの名前を使用して、instanceGroupManagers サービスへのリクエストを作成します。リクエスト本文に新しいインスタンス テンプレートの URL を指定します。

POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroupManagers/instance-group-name/setInstanceTemplate

{
 "instanceTemplate": "global/instanceTemplates/instance-template
}

インスタンス テンプレートを変更した後、個々のインスタンスを再作成するか、ローリング アップデートでグループ内の VM をすべて更新します。

マネージド インスタンス グループのサイズを変更する

MIG で VM を追加または削除するには、以下のいずれかを行います。

MIG のサイズを自動的に変更する

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

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

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

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

Google Cloud Consolegcloud compute ツール、または API を使用して、マネージド インスタンス グループのサイズを変更できます。

Console

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

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

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

gcloud

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

gcloud compute instance-groups managed resize instance-group-name \
    --size new-size \
    --zone zone

API

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

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

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

作成の再試行無効化モードでマネージド インスタンス グループのサイズを変更するには、gcloud ツール、または API を使用します。

gcloud

--no-creation-retries フラグを指定して、resize サブコマンドを使用します。

gcloud beta compute instance-groups managed resize instance-group-name --size new-size \
    --no-creation-retries \
    --zone zone

API

resizeAdvanced メソッドに対してリクエストを作成します。リクエストの本文で新しいインスタンス グループのサイズと noCreationRetries フィールドを指定します。

POST https://compute.googleapis.com/compute/beta/projects/project-id/zones/zone/instanceGroupManagers/instance-group-name/resizeAdvanced

{
 "targetSize": size
 "noCreationRetries": true
}

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

どのインスタンスが作成され、どのモードであるかは、listManagedInstances メソッドで確認できます。作成の再試行無効化モードで作成しているインスタンスの currentActionCREATING_WITHOUT_RETRIES になります。

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

特定の名前に依存するシステムがある場合は、それらの名前で VM を作成できます。このようなマネージド インスタンスに割り当てた名前は、VM が再作成された場合も保持されます。特定の名前のインスタンスの追加をご覧ください。

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

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

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

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

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

Console

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

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

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

gcloud

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

gcloud compute instance-groups managed delete-instances instance-group-name \
    --instances example-i3n2,example-z2x9 \
    --zone zone

API

instanceGroupManagers.deleteInstances メソッドに対してリクエストを作成します。リクエスト本文で、削除する 1 つ以上のインスタンスの URL を指定します。

POST https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroupManagers/instance-group-name/deleteInstances

{
 "instances": [
  "zones/zone/instances/example-instance-i3n2",
  "zones/zone/instances/example-instance-l6n1"
 ]
}

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

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

グループからのインスタンスの破棄

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

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

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

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

Console

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

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

  2. リストの [名前] 列で、インスタンスを削除するインスタンス グループの名前をクリックします。ページが開き、インスタンス グループ プロパティと、グループに含まれるインスタンスのリストが表示されます。
  3. インスタンスのリストで、グループから削除する 1 つ以上のインスタンスを選択します。
  4. [グループから削除] をクリックします。選択したインスタンスはグループから除外されますが、グループ外で引き続き実行されます。

gcloud

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

gcloud compute instance-groups managed abandon-instances instance-group-name \
    --instances example-i3n2,example-z2x9 \
    --zone zone

API

instanceGroupManagers.abandonInstances メソッドに対してリクエストを作成します。リクエスト本文で、破棄する 1 つ以上のインスタンスの URL を指定します。

POST https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroupManagers/instance-group-name/abandonInstances

{
 "instances": [
  "zones/zone/instances/example-instance-i3n2",
  "zones/zone/instances/example-instance-l6n1"
 ]
}

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

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

グループ内にインスタンスを再作成する

マネージド インスタンスを再作成すると、指定した VM が削除され、そのマネージド インスタンス グループに割り当てられているインスタンス テンプレートを使用して新しい VM が作成されます。

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

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

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

gcloud

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

gcloud compute instance-groups managed recreate-instances instance-group-name \
    --instances example-i3n2,example-z2x9 \
    --zone zone

API

instanceGroupManagers.recreateInstances メソッドに対してリクエストを作成します。リクエスト本文で、再作成する 1 つ以上のインスタンスの URL を指定します。

POST https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroupManagers/instance-group-name/recreateInstances

{
 "instances": [
  "zones/zone/instances/example-instance-i3n2",
  "zones/zone/instances/example-instance-l6n1"
 ]
}

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

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

マネージド インスタンス グループを削除する

マネージド インスタンス グループを削除すると、グループ内のすべての VM が削除されます。このマネージド インスタンス グループに保持する必要のある VM がある場合は、最初にそのインスタンスを破棄してグループから VM を除外します。その後、マネージド インスタンス グループの削除を実行します。

Google Cloud Console、または gcloud compute ツールを使用してマネージド インスタンス グループとそのインスタンスを削除すると、設定されたオートスケーラーも自動的に削除されます。ただし、API を使用する場合は、autoscalers.delete または regionAutoscalers.delete を使用して、設定されたオートスケーラーを削除する、別のリクエストを最初に発行する必要があります。

Console

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

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

  2. 削除する 1 つ以上のグループをリストから選択します。
  3. [削除] をクリックして、グループとマネージド インスタンス グループ内のすべての VM を削除します。

gcloud

instance-groups managed delete サブコマンドを使用します。

gcloud compute instance-groups managed delete instance-group-name \
    --zone zone

API

instanceGroupManagers.delete メソッドに対してリクエストを作成します。

DELETE https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroupManagers/instance-group-name

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

プリエンプティブル インスタンスのグループを作成する

マネージド インスタンス グループを使用すると、複数のプリエンプティブル インスタンスをすぐに作成できるため、マネージド インスタンス グループ内の VM の費用を削減できます。たとえば、プリエンプティブル インスタンスのグループを作成して、それを使用してバッチ処理タスクを実行し、タスクが完了したらそのグループを削除できます。

プリエンプティブル インスタンスのグループを作成するには、インスタンス テンプレートでプリエンプティブル オプションを設定し、そのテンプレートを使用してマネージド インスタンス グループを作成します。

Console

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

    [インスタンス テンプレート] ページに移動

  2. [新しいインスタンス テンプレート] をクリックします。
  3. インスタンス テンプレートに必要なプロパティを入力します。
  4. [詳細設定を表示] をクリックして [可用性ポリシー] セクションを展開します。
  5. [プリエンプティブ] を [オン] にします。
  6. [作成] をクリックしてテンプレートを作成します。
  7. このテンプレートを使用して、マネージド インスタンス グループを作成します。

gcloud

gcloud computeinstance-templates create コマンドを使用してインスタンス テンプレートを作成します。フラグ --preemptible を追加します。

gcloud compute instance-templates create instance-template \
    --preemptible

インスタンス テンプレートを作成したら、それを使用してマネージド インスタンス グループを作成します。

API

instanceTemplates().insert メソッドを使用して新しいインスタンス テンプレートを作成します。schedulingpreemptible プロパティを追加して、true に設定します。

{
"name": "instance-template",
"properties": {
  "machineType": "zones/zone/machineTypes/machine-type",
  "networkInterfaces": [
    {
      "network": "global/networks/default",
      "accessConfigs":
      [
        {
          "name": "external-IP",
          "type": "ONE_TO_ONE_NAT"
        }
      ]
    }
  ],
  "scheduling":
  {
    "preemptible": true
  },
  "disks":
  [
    {
      "type": "PERSISTENT",
      "boot": true,
      "mode": "READ_WRITE",
      "initializeParams":
      {
        "sourceImage": "projects/debian-cloud/global/images/family/debian-9"
      }
    }
  ]
  }
}

インスタンス テンプレートを作成したら、それを使用してマネージド インスタンス グループを作成します。

instanceTemplateversions フィールドを理解する

マネージド インスタンス グループを作成するときは、マネージド インスタンス グループが個々の VM インスタンスを作成するために使用するインスタンス テンプレートを指定します。デフォルトでは、Compute Engine で使用するインスタンス テンプレートは、2 つの個別の API プロパティ(トップレベルの instanceTemplate プロパティと versions プロパティ)で記述します。たとえば、次のマネージド インスタンス グループでは、instanceTemplateversions の両方のフィールドが入力されています。

{

 "name": "example-group",
 "zone": "zones/us-central1-a",
 "instanceTemplate": "global/instanceTemplates/example-it",
 "versions": [
  {
   "name": "v3",
   "instanceTemplate": "global/instanceTemplates/example-it",
   "targetSize": {
    "calculated": 3
   }
  }
 ]...
}

Compute Engine では、下位互換性のために、トップレベルの instanceTemplate フィールドと versions フィールドの両方の値が自動的に挿入されます。versions フィールドを指定し、トップレベルの instanceTemplates フィールドは可能であれば省略することをおすすめします。ただし、アプリケーション コードで現在トップレベルの instanceTemplate フィールドが設定されている場合は、それが有効なリクエストになります。

Managed Instance Group Updater の詳細については、MIG へのローリング アップデートをご覧ください。

(詳細)マネージド インスタンス グループを使用したインスタンス テンプレートのカナリアテスト

マネージド インスタンス グループを作成し、VM を 2 つのグループに分けて、グループごとに異なるインスタンス テンプレートを使用させることができます。たとえば、20 個の VM インスタンスを持つマネージド インスタンス グループを作成し、10 個の VM は特定のオペレーティング イメージで実行するようにして、残りを異なるオペレーティング システム イメージで実行できます。この機能を使用すると、インスタンス テンプレートの 2 つの異なるバージョンを比較して 1 つに決めることができます。

API で、次の URL に POST リクエストを行います。

POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroupManagers

リクエストの本文では、トップレベルの instanceTemplates フィールドは省略しますが、2 つのインスタンス テンプレートを設定するために versions プロパティは含める必要があります。各 versions オブジェクトで、インスタンス テンプレートを指定します。両方ではなく、1 つの versions オブジェクトでは、targetSize も指定する必要があります。たとえば、次のリクエストでは、VM インスタンスの 50% が example-template インスタンス テンプレートを使用し、残りの VM インスタンスが small-machine-type テンプレートを使用するインスタンス グループが作成されます。

{
  "baseInstanceName": "example-instances",
  "name": "example-group",
  "targetSize": 5,
  "versions":
  [
    {
      "instanceTemplate": "global/instanceTemplates/example-template",
      "targetSize":
      {
        "percent": 50
      }
    },
   {
     "instanceTemplate": "global/instanceTemplates/small-machine-type"
   }
  ]
}

マネージド インスタンス グループと IAM

マネージド インスタンス グループの一部として Compute Engine が実行するオペレーションはすべて、該当するプロジェクトの Google API サービス アカウントを使用して実行されます。プロジェクトごとのサービス アカウントには、次のようなメールアドレスがあります。project-id は対応するプロジェクトの数値 ID です。

project-id@cloudservices.gserviceaccount.com

Google API サービス アカウントは、デフォルトの Compute Engine サービス アカウントとは異なります。

マネージド インスタンス グループが使用するサービス アカウントに十分な権限があり、インスタンス テンプレートをベースにリソースを作成できるかどうかを確認する必要があります。具体的には、インスタンス グループに VM を作成および管理するには、サービス アカウントに compute.instanceAdmin.v1、および必要に応じて serviceAccountUser のロールが付与されている必要があります。マネージド インスタンス グループがサービス アカウントとして実行できる VM を作成する場合にのみ、serviceAccountUser のロールが必要です。このアカウントは、Deployment Manager などの他のプロセスでも使用されることを覚えておいてください。

マネージド インスタンス グループの作成またはインスタンス テンプレートの更新時に、Compute Engine は、Google API サービス アカウントに次の権限があることを検証します。

  • serviceAccountUser の役割。サービス アカウントとして実行できるインスタンスを作成する場合は、重要です。
  • イメージ、ディスク、VPC ネットワーク、サブネットなどのインスタンス テンプレートから参照されるすべてのリソースに対する権限。

サービス アカウントの詳細については、サービス アカウントの概要をご覧ください。

マネージド インスタンス グループ内ですべてのインスタンスを更新する

MIG への更新のロールアウトをご覧ください。

トラブルシューティング

マネージド インスタンス グループで VM の作成に繰り返し失敗します。どうなっているのでしょうか。

インスタンス グループで VM インスタンスを正常に作成または再作成できない原因として考えられる問題はいくつかあります。以下に、一般的な問題を一部紹介します。

  • マネージド インスタンス グループがインスタンスとブート永続ディスクの両方を作成または再作成しようとしていますが、永続ディスクはすでに存在します。デフォルトでは、新しいインスタンスが作成されると、新しいブート永続ディスクが作成されます。これらのディスクには VM の名前が付けられます。VM の名前が my-awesome-instance の場合、ディスクにも my-awesome-instance という名前が付けられます。その名前で永続ディスクがすでに存在している場合、リクエストは失敗します。この問題を解決するには、既存の永続ディスクを削除します。

  • インスタンス テンプレートでブート永続ディスクの disks.autoDelete オプションが false に設定されていると、(たとえば自動修復によって)VM が削除されても永続ディスクは削除されません。マネージド インスタンス グループが同じ名前で VM を再作成しようとすると、その名前の永続ディスクがすでに存在する場合と同じ問題が発生します。既存の永続ディスクを削除してすぐに問題を解決し、インスタンスと一緒にブート永続ディスクを削除する場合は、インスタンス テンプレートを更新して disks.autoDeletetrue に設定します。

  • インスタンス テンプレートが無効である可能性があります。インスタンス テンプレートを最近更新した場合、マネージド インスタンス グループに無効なプロパティが存在することが原因で、VM の作成に失敗することがあります。無効なプロパティには次のようなものがあります。

    • ソースイメージなど、存在しないリソースを指定している。
    • リソース名にスペルミスがある。
    • ブート以外の追加の永続ディスクに読み取り / 書き込みモードで接続しようとしている。インスタンス グループには複数の VM が含まれるため、グループ内のすべての VM 間で共有する追加ディスクは読み取り専用モードでのみ接続できます。
  • 自動修復ポリシーを構成したものの、ヘルスチェック プローブがアプリケーションに到達できるファイアウォール ルールを構成しなかった場合(または構成にミスがあった場合)、VM の健全性に異常の可能性があるとして、MIG は引き続き再作成を続けます。ヘルスチェックのファイアウォール ルールの構成方法については、こちらのヘルスチェックの設定例をご覧ください。

次のステップ