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

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

マネージド インスタンス グループは、自動修復負荷分散自動スケーリング、および自動更新をサポートしています。

ゾーン(単一ゾーン) MIG とリージョン(マルチゾーン) MIG の両方が作成できます。リージョン MIG では、同じリージョン内の複数のゾーンに分散したインスタンスによって、可用性が高くなります。

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

始める前に

制限事項

  • 1 つのマネージド インスタンス グループに含めることができる仮想マシン(VM)インスタンス数は最大で 1,000 個です。
  • マネージド インスタンス グループの更新時に、1 回のリクエストで指定できるインスタンス数は最大で 1,000 個です。

ステートレスなアプリのマネージド インスタンス グループを使用する

マネージド インスタンス グループは、実行される基盤となる VM インスタンスの特定の状態に依存しない、ステートレス アプリをサポートします。これにより、自動スケーリングや自動修復などの機能が可能になります。そこでマネージド インスタンス グループは、自動的にインスタンスを削除および再作成できます。さらに、ユーザー操作、自動修復の一環、またはインフラストラクチャのメンテナンスによりインスタンスがマネージド インスタンス グループから削除された場合、インスタンスにライブ マイグレーションが設定されていなければ、新しいルート永続ディスクを使用して自動的にインスタンスが再作成されます。

マネージド インスタンス グループはステートレスです。保持されない特定のインスタンス プロパティ(IP アドレスやメモリ内データなど)に依存しないように、アプリケーションを設計または改良する必要があります。同様に、対応する VM インスタンスを削除した場合も、ブート永続ディスクのデフォルトの動作によってそれらのプロパティが削除されます。このため、マネージド インスタンス グループの永続データとしてブートディスクに依存しないようにしてください。

データを維持するためには、OS イメージを定期的にメンテナンスして最新の状態を維持すること、起動スクリプトを使用すること、Google Cloud Storage のような一元管理された別の場所にデータをバックアップすることが推奨されます。

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

マネージド インスタンス グループに関連付けられたディスクを保存するには、disks.autoDelete オプションを無効にして、永続ディスクが削除されないようにします。ディスクを使用するインスタンスが削除された場合(たとえば、オートスケーラーによってグループが縮小された場合や手動でインスタンスを削除した場合)、必要に応じて残りのディスクを手動でクリーンアップする必要があります。

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

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

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

Console

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

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

  2. [インスタンス グループを作成] をクリックします。
  3. マネージド インスタンス グループの名前を入力し、グループを配置するゾーンを選択します。
  4. [グループタイプ] で、[マネージド インスタンス グループ] を選択します。
  5. [インスタンス テンプレート] でインスタンス テンプレートを選択します。使用できるテンプレートがない場合は、インスタンス テンプレートを作成します。
  6. グループ内に作成するインスタンスの数を指定します。必要に応じて、自動スケーリングを有効にすると、その使用率に基づいてグループのインスタンスを自動的に追加または削除できます。また、自動修復を有効にすると、グループ内のインスタンスに対してアプリケーション ベースのヘルスチェックを実行できます。
  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: このインスタンス グループで作成されたインスタンスに使用する名前。これらのインスタンスは同一であるため、インスタンスにはインスタンス名の一部としてランダムな文字列が割り当てられます。このランダムな文字列の先頭にはベース名が追加されます。たとえば、ベース名が example だとすれば、インスタンス名は example-yahsexample-qtyz といったものになります。特定の名前が必要な場合は、MIG に特定の名前のインスタンスを作成するをご覧ください。
  • size: インスタンス グループのサイズ。
  • instance-template: このグループに使用するインスタンス テンプレートの名前。
  • zone: Compute Engine で使用できるゾーンのいずれか。

    たとえば次のコマンドでは、インスタンスのベース名が 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 リクエストを作成します。リクエスト本文に、グループ名、グループサイズ、グループ内のインスタンスのベース名、インスタンス テンプレートへの 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: リクエストのゾーン。
  • instance-group-name: このインスタンス グループの名前。
  • base-name: このインスタンス グループで作成されたインスタンスに使用する名前。これらのインスタンスは同一であるため、インスタンスにはインスタンス名の一部としてランダムな文字列が割り当てられます。このランダムな文字列の先頭にはベース名が追加されます。たとえば、ベース名が example だとすれば、インスタンス名は example-yahsexample-qtyz といったものになります。
  • size: インスタンス グループのサイズ。
  • instance-template: このグループに使用するインスタンス テンプレート。

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

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

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

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

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
}

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

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

MIG でインスタンスを追加または削除するには、以下のいずれかを実行します。

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

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

マネージド インスタンス グループのサイズを手動で設定する

マネージド インスタンス グループの自動スケーリングをまだ設定していない場合、グループを手動でサイズ変更することで、グループ内のインスタンスの数を変更できます。サイズを大きくすると、マネージド インスタンス グループに現在のインスタンス テンプレートを使用して新しいインスタンスが追加されます。サイズを小さくすると、マネージド インスタンス グループからインスタンスが削除されます。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 に置き換えます。

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

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

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

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

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

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

gcloud

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

gcloud beta compute instance-groups managed resize instance-group-name --size new-size \
    --nocreation-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 で作成する(ベータ版)

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

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

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

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

グループが属するバックエンド サービス接続ドレインが有効になっている場合は、接続ドレインのタイムアウトが経過してから 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 に置き換えます。

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

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

マネージド インスタンス グループからインスタンスを分離すると、グループ自体に影響を及ぼさずに、個々のインスタンスの問題を簡単にデバッグできます。グループからインスタンスを破棄すると、マネージド インスタンス グループに割り当てられたロードバランサからもインスタンスが除外されます。特定の個別のインスタンスに手動で割り当てられたターゲット プールは除外されません。

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

グループが属するバックエンド サービス接続ドレインが有効になっている場合は、接続ドレインのタイムアウトが経過してから 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 インスタンスが削除されるまでに 60 秒ほどかかることがあります。

マネージド インスタンス グループ内の選択したインスタンスを再作成するには、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 に置き換えます。

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

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

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

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

Console

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

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

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

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 に置き換えます。

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

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

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

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/beta/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 サービス アカウントとは異なります。

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

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

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

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

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

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

トラブルシューティング

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

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

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

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

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

    • ソースイメージなど、存在しないリソースを指定している。
    • リソース名にスペルミスがある。
    • ブート以外の追加の永続ディスクに読み取り / 書き込みモードで接続しようとしている。インスタンス グループには複数のインスタンスが含まれるため、グループ内のすべてのインスタンス間で共有する追加ディスクは読み取り専用モードでのみ接続できます。

次のステップ