非マネージド VM をグループ化する


非マネージド インスタンス グループは、単一プロジェクト、ゾーン、VPC ネットワーク、サブネット内に存在する仮想マシン(VM)の集まりです。非マネージド インスタンス グループは、個々の構成やチューニングが必要な VM をグループ化する場合に便利です。

一貫した構成設定が必要な VM の場合は、インスタンス テンプレートに基づくマネージド インスタンス グループ(MIG)を使用します。可能であれば、非マネージド インスタンス グループの代わりにマネージド インスタンス グループの使用を検討してください。マネージド インスタンス グループの作成については、MIG の作成をご覧ください。

どちらのタイプのインスタンス グループもバックエンドとして Google Cloud ロードバランサに追加できます。詳細は、Cloud Load Balancing の概要を参照してください。Cloud Load Balancing がサポートするインスタンス グループあたりの VM の数については、インスタンス グループあたりの VM の数をご覧ください。

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

始める前に

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

グループの作成

マネージド インスタンス グループとは異なり、非マネージド インスタンス グループは共通のインスタンス テンプレートを共有しない固有の VM から構成されています。グループを作成した後、それぞれの VM をそのグループに追加するだけです。

コンソール

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

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

  2. [インスタンス グループを作成] をクリックします。
  3. [新しい非マネージド インスタンス グループ] をクリックします。
  4. 非マネージド インスタンス グループの名前を入力します。
  5. [ロケーション] でリージョンとゾーンを選択します。
  6. [ネットワーク] と [サブネットワーク] を選択します。
  7. [VM インスタンス] で、このグループに追加する VM を選択します。
  8. [作成] をクリックします。

gcloud

新しい非マネージド インスタンス グループを作成するには、instance-group unmanaged create コマンドを使用します。

gcloud compute instance-groups unmanaged create instance-group-name \
    --zone=zone

以下を置き換えます。

  • instance-group-name: 作成するグループの名前。
  • zone: グループを作成するゾーン。

API

API を使用して非マネージド インスタンス グループを作成するには、instanceGroups.insert メソッドを使用して POST リクエストを送信します。

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

{
   "name": "instance-group-name"
}

以下を置き換えます。

  • instance-group-name: 作成するグループの名前。
  • zone: グループを作成するゾーン。
  • project-id: グループを含むプロジェクトのプロジェクト ID。

Google Cloud CLI または API を使用して新しい非マネージド インスタンス グループを作成した場合、VM は自動的に追加されません。非マネージド インスタンス グループへの VM の追加は、手動で行います。

グループの一覧表示と説明

既存の非マネージド インスタンス グループのリストを取得します。

コンソール

Google Cloud コンソールでは、[インスタンス グループ] ページに、既存の非マネージド インスタンス グループとマネージド インスタンス グループが一覧表示されます。

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

gcloud

Google Cloud CLI を使用してプロジェクト内のすべての非マネージド インスタンス グループを一覧表示するには、instance-groups 非マネージド リストを使用します。

gcloud compute instance-groups unmanaged list

特定の非マネージド インスタンス グループに関する情報を表示するには、instance-groups unmanaged describe コマンドを使用します。

gcloud compute instance-groups unmanaged describe instance-group-name \
   --zone=zone

以下を置き換えます。

  • instance-group-name: 記述するグループの名前。
  • zone: グループのゾーン。

API

インスタンス グループを API で一覧表示するには、GET リクエストを instanceGroups.list メソッドを使用して送信します。

GET https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups

API を使用して特定の非マネージド インスタンス グループに関する情報を取得するには、GET リクエストを instanceGroups.get メソッドを使用して送信します。

GET https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups/instance-group-name

以下を置き換えます。

  • instance-group-name: 記述するグループの名前。
  • zone: グループのゾーン。
  • project-id: グループを含むプロジェクトのプロジェクト ID。

グループの削除

マネージド インスタンス グループとは異なり、非マネージド インスタンス グループを削除してもそのグループ内の VM は削除されません。非マネージド インスタンス グループを削除すると、VM の論理グループのみが削除されます。

グループが Google Cloud ロードバランサのバックエンドである場合、インスタンス グループは削除できません。まずバックエンド サービスからバックエンドを削除する必要があります。

コンソール

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

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

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

gcloud

非マネージド インスタンス グループを削除するには、instance-group unmanaged delete コマンドを使用します。

gcloud compute instance-groups unmanaged delete instance-group-name \
    --zone=zone

以下を置き換えます。

  • instance-group-name: 削除するグループの名前。
  • zone: グループのゾーン。

API

API を使用して非マネージド インスタンス グループを削除するには、DELETE リクエストを instanceGroups.delete メソッドを使用して送信します。

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

以下を置き換えます。

  • instance-group-name: 削除するグループの名前。
  • zone: グループのゾーン。
  • project-id: グループを含むプロジェクトのプロジェクト ID。

グループ メンバー

VM の追加

非マネージド インスタンス グループを作成したら、グループに VM を追加できます。ただし、各 VM の最初の(または唯一の)ネットワーク インターフェース(nic0)が同じ VPC ネットワークに接続されている場合のみ、VM をグループ化できます。

コンソール

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

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

  2. リストの [名前] 列で、VM を追加するインスタンス グループの名前をクリックします。ページが開き、インスタンス グループのプロパティとすでにグループに含まれている VM のリストが表示されます。
  3. この非マネージド インスタンス グループを変更するには、[編集] をクリックします。
  4. [VM インスタンス] から、グループに追加する既存の VM を 1 つ以上選択します。既存の VM と同じゾーン、VPC ネットワーク、サブネット内の VM のみを選択できます。
  5. 新しい VM をグループに追加するには、[保存] をクリックします。

gcloud

インスタンスを非マネージド インスタンス グループに追加するには、instance-group unmanaged add-instances コマンドを使用します。

gcloud compute instance-groups unmanaged add-instances instance-group-name \
    --zone=zone \
    --instances=list-of-VM-names

以下を置き換えます。

  • instance-group-name: VM を追加するグループの名前。
  • zone: グループのゾーン。
  • list-of-VM-names: 同じゾーン、VPC ネットワーク、サブネット内の VM のカンマ区切りリスト。

API

API を使用して非マネージド インスタンス グループに VM を追加するには、POST リクエストを instanceGroups.addInstances メソッドを使用して送信します。

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

   {
      "instances": [
         {
         "instance": "https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance-1-name",
         "instance": "https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance-2-name",
         ....
         }
      ]
   }

以下を置き換えます。

  • instance-group-name: VM を追加するグループの名前。
  • zone: グループのゾーン。
  • project-id: グループを含むプロジェクトのプロジェクト ID。
  • instance-1-nameinstance-2-name: グループに追加する、同じゾーン、VPC ネットワーク、サブネット内の VM の名前。

VM のリスト

非マネージド インスタンス グループ内のメンバー VM のリストを取得できます。

コンソール

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

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

  2. リストの [名前] 列で、表示する非マネージド インスタンス グループの名前をクリックします。グループに含まれるインスタンスのリストが記載されたページが表示されます。

gcloud

非マネージド インスタンス グループの VM を一覧表示するには、instance-group unmanaged list-instances コマンドを使用します。

gcloud compute instance-groups unmanaged list-instances instance-group-name \
   --zone=zone

以下を置き換えます。

  • instance-group-name: リストするメンバーのグループの名前。
  • zone: グループのゾーン。

API

非マネージド インスタンス グループの VM を API で一覧表示するには、POST リクエストを instanceGroups.listInstances メソッドを使用して送信します。

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

以下を置き換えます。

  • instance-group-name: リストするメンバーのグループの名前。
  • zone: グループのゾーン。
  • project-id: グループを含むプロジェクトのプロジェクト ID。

VM の削除

非マネージド インスタンス グループから VM を削除できます。インスタンス グループから VM を削除しても VM 自体は削除されません。

コンソール

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

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

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

gcloud

VM を非マネージド インスタンス グループから削除するには、instance-group unmanaged remove-instances コマンドを使用します。

gcloud compute instance-groups unmanaged remove-instances instance-group-name \
    --zone=zone \
    --instances=list-of-VM-names

以下を置き換えます。

  • instance-group-name: 削除するインスタンスを含むグループの名前。
  • zone: グループのゾーン。
  • list-of-VM-names: グループから削除する VM のカンマ区切りリスト。

API

API を使用して非マネージド インスタンス グループから VM を削除するには、POST リクエストを instanceGroups.removeInstances メソッドを使用して送信します。次のように、複数の VM を同時に削除できます。

POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups/instance-group-name/removeInstances
{
    "instances": [
        {
        "instance": "https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance-1-name",
        "instance": "https://www.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance-2-name",
        ....
        }
    ]
}

以下を置き換えます。

  • instance-group-name: 削除するインスタンスを含むグループの名前。
  • zone: グループのゾーン。
  • project-id: グループを含むプロジェクトのプロジェクト ID。
  • instance-1-nameinstance-2-name: グループとの関連付けを解除する VM の名前。

名前付きポートの操作

名前付きポートとは、ポートの名前と番号を表す Key-Value ペアです。ポート名は、サービスまたはアプリケーションの名前を表します。ポート番号は、サービスまたはアプリケーションが動作しているポートを表します。

名前付きポートは、Cloud Load Balancing で使用されます。プロキシとして機能するロードバランサは、そのバックエンド サービスの構成内で、単一の名前付きポートに登録されます。ポート名は、各インスタンス グループのバックエンドの名前付きポート マッピングに基づいて、ポート番号に変換されます。

たとえば、バックエンド サービスは、http-port という名前のポートに登録できます。バックエンド インスタンスのグループには、http-port:80 という名前のポートを含めることができます。バックエンド インスタンスのグループは、TCP などのプロトコルを使用して、ポート 80 上のグループ内の VM にトラフィックを送信するようにロードバランサに指示します。プロトコルは、ロードバランサのバックエンド サービスで定義されます。

名前付きポートは、プロキシ ロードバランサで使用されるシンプルなメタデータです。名前付きポートは Compute Engine のネットワークまたはファイアウォールのリソースを制御しません。

複数のポート番号を持つ名前付きポート

各サービス名に複数のポートを割り当てることができます。また、ポートごとに複数のサービス名を割り当てることもできます。

次の点に注意してください。

  • トラフィックは、同じポート名を持つポート間で分散されます。
  • 特定のバックエンド サービスは、一度に 1 つの名前付きポートにのみトラフィックを転送できます。
  • 名前付きポートに複数のポート番号を使用する場合は、それらがすべて同じアプリケーション用のポートである必要があります。

    たとえば、ポート 80 は通常 TLS をサポートしていないため、http:80,http:8080 は機能しますが http:80,http:443 は機能しません。

インスタンス グループに複数の名前付きポートを割り当てられます。名前付きポート http-port に登録され、2 つのバックエンド インスタンスのグループを持つ、バックエンド サービスの例を見てみましょう。

  • 名前付きポート http-port:80 を持つ instance-group-a
  • 名前付きポート http-port:79 を持つ instance-group-b

このバックエンド サービスは、instance-group-a の VM にはポート 80 に、instance-group-b の VM にはポート 79 にトラフィックを送信します。

同じインスタンス グループを複数のバックエンド サービス(複数のロードバランサの場合)に追加し、インスタンス グループが各ロードバランサの異なるポートにサービスを提供する場合、すべてのポート番号を単一の名前付きポートに追加しないでください。代わりに、一意の名前付きポートを作成し、それを各バックエンド サービスが提供する必要のあるポートのセットにマップします。

たとえば、3 つのアプリケーションがあり、それぞれに独自のロードバランサがあるとします。各アプリケーションには固有のポート番号があります(app1 は 81、app2 は 82、app3 は 83)。3 つのバックエンド サービスがすべて共通のインスタンス グループを使用している場合、このインスタンス グループの名前付きポートを [app1:81, app2:82, app3:83] として割り当てます。

名前付きポートとヘルスチェック

バックエンド サービスで複数のポート番号を持つ名前付きポートを外部アプリケーション ロードバランサまたは内部アプリケーション ロードバランサで機能させるには、ヘルスチェックに特定のポート番号ではなく --use-serving-port フラグを設定する必要があります。このオプションは Google Cloud コンソールでは使用できません。--use-serving-port を設定するには、Google Cloud CLI または API を使用する必要があります。

たとえば、あるバックエンド サービスのトラフィックを 3 つのポート(81、82、83)でロード バランシングするアプリケーションで、単一のインスタンス グループを使用するとします。このインスタンス グループのポートは [app:81, 82, 83] として割り当てることができます。このシナリオのヘルスチェックには --use-serving-port フラグが必要です。

詳細については、負荷分散のヘルスチェックのドキュメントをご覧ください。

名前付きポートとファイアウォール ルール

名前付きポートが Google Cloud のファイアウォール ルールの作成や変更を行うことはありません。バックエンド VM へのトラフィックを許可するには、必要なファイアウォール ルールを作成する必要があります。

名前付きポートとバックエンド サービス

インスタンス グループの構成に加えて、バックエンド サービスも構成する必要があります。たとえば、インスタンス グループに my-service-name という名前の名前付きポートとポート 8888 を設定したとします。

gcloud compute instance-groups set-named-ports my-unmanaged-ig \
    --named-ports=my-service-name:8888

この場合、バックエンド サービスの --port-namemy-service-name に設定して、バックエンド サービス構成の名前付きポートを参照する必要があります。

gcloud compute backend-services update my-backend-service \
    --port-name=my-service-name

名前付きポートの作成

コンソール

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

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

  2. リストの [名前] 列で、名前付きポートを指定するインスタンス グループの名前をクリックします。インスタンス グループのプロパティが記載されたページが表示されます。
  3. この非マネージド インスタンス グループを変更するには、[編集] をクリックします。
  4. [ポート マッピング] セクションで、[ポートを追加] をクリックし、ポート名と番号を入力します。必要に応じて、他の名前付きポートを追加または削除します。
  5. [保存] をクリックして、非マネージド インスタンス グループの名前付きポートのリストを更新します。

gcloud

非マネージド インスタンス グループに名前付きポートを追加するには、instance-groups unmanaged set-named-ports コマンドを使用します。

gcloud compute instance-groups unmanaged set-named-ports instance-group-name \
    --zone=zone \
    --named-ports=port-name:port-number,...

非マネージド インスタンス グループの名前付きポートを一覧表示するには、instance-groups unmanaged get-named-ports コマンドを使用します。

set-named-ports コマンドを使用して、1 つ以上の名前付きポートを設定します。

gcloud compute instance-groups unmanaged set-named-ports INSTANCE_GROUP \
      --named-ports PORT_NAME:PORT,PORT_NAME:PORT

例:

gcloud compute instance-groups unmanaged set-named-ports INSTANCE_GROUP \
      --named-ports name1:80,name2:8080

各サービス名に複数のポートを割り当てる、または各サービスに複数の名前を割り当てるには、各名前またはポートに 1 つ以上の項目を作成します。たとえば、ポート 102080 が同じアプリケーション用の場合、これらのポートすべてに name1 を割り当てることができます。さらに、ポート 8080name2name3 の 2 つの名前を割り当てることもできます。また、次の例のように、ポート 9000name4 に割り当てることもできます。

gcloud compute instance-groups unmanaged set-named-ports INSTANCE_GROUP \
      --named-ports name1:10,name1:20,name1:80,\
                    name2:8080,name3:8080,\
                    name4:9000

Google Cloud CLI を使用して非マネージド インスタンス グループからすべての名前付きポートを削除するには、名前付きポートのリストを空にして instance-group 非マネージド set-named-ports を使用します。

gcloud compute instance-groups unmanaged set-named-ports instance-group-name \
    --zone=zone \
    --named-ports=""

上記のすべての例で、次を置換します(存在する場合)。

  • instance-group-name: インスタンス グループの名前。
  • zone: グループのゾーン。
  • port-nameport-number: ポート名とポート番号は、選択した名前からポート番号へのマッピングを表します。複数のマッピングはカンマで区切って指定できます。たとえば、port-one:80,port-two:8080 は名前付きポートの有効なリストです。

API

  1. インスタンス グループを記述して fingerprint をメモします。

  2. API で名前付きポートを追加するには、POST リクエストを instanceGroups.setNamedPorts メソッドを使用して送信します。すべての名前付きポートを削除する場合は、namedPorts を空のリストに設定します。

    POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instanceGroups/instance-group-name/setNamedPorts
    
    {
        "fingerprint": "fingerprint",
        "namedPorts": [
            {
            "name": "port-name",
            "port": port-number
            },
            {
            "name": "port-name",
            "port": port-number
            },
            ....
        ]
    }
    

    以下を置き換えます。

    • instance-group-name: インスタンス グループの名前。
    • zone: グループのゾーン。
    • project-id: グループを含むプロジェクトのプロジェクト ID。
    • port-nameport-number: ポート名とポート番号は、選択した名前からポート番号へのマッピングを表します。
    • fingerprint: 前の手順でメモしたフィンガープリントです。

次のステップ