このページでは、既存のマネージド インスタンス グループ(MIG)をロードバランサのバックエンド サービスまたはターゲット プールに追加する方法について説明します。
ロードバランサはユーザー トラフィックを分散し、アプリケーションでパフォーマンスの問題が発生するリスクを軽減します。Cloud Load Balancing では、マネージド インスタンス グループと非マネージド インスタンス グループの両方を使用してトラフィックが処理されます。使用しているロードバランサのタイプに応じて、ターゲット プールまたはバックエンド サービスにインスタンス グループを追加できます。
MIG バックエンドを使用して特定のタイプのロードバランサを作成する方法については、Cloud Load Balancing のドキュメントをご覧ください。
始める前に
-
まだ設定していない場合は、認証を設定します。認証とは、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
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
- Google Cloud コンソールの [ロード バランシング] ページに移動します。
- マネージド インスタンス グループを追加するバックエンド サービスの名前をクリックします。
- [編集] をクリックします。
- [+ バックエンドを追加] をクリックします。
- 追加するインスタンス グループを選択します。
- 変更するオプション設定があれば編集します。
- 変更を保存します。
- Google Cloud コンソールの [ターゲット プール] ページに移動します。
- インスタンス グループを追加するターゲット プールをクリックします。
- [編集] ボタンをクリックします。
- [VM インスタンス] セクションまで下にスクロールして、[インスタンス グループを選択] をクリックします。
- プルダウン メニューからインスタンス グループを選択します。
- 変更を保存します。
INSTANCE_GROUP
はインスタンス グループの名前です。TARGET_POOL,..
は、このインスタンス グループの追加先である 1 つ以上のターゲット プールの名前です。PROJECT_ID
はこのリクエストのプロジェクト ID です。REGION
はインスタンス グループのリージョンです。INSTANCE_GROUP
はインスタンス グループの名前です。- トラフィックは、同じポート名を持つポート間で分散されます。
- 特定のバックエンド サービスは、一度に 1 つの名前付きポートにのみトラフィックを転送できます。
名前付きポートに複数のポート番号を使用する場合は、それらがすべて同じアプリケーション用のポートである必要があります。
たとえば、ポート 80 は通常 TLS をサポートしていないため、
http:80,http:8080
は機能しますがhttp:80,http:443
は機能しません。- 名前付きポート
http-port:80
を持つinstance-group-a
- 名前付きポート
http-port:79
を持つinstance-group-b
- Google Cloud Console で、[インスタンス グループ] ページに移動します。
- 名前付きポートを指定するインスタンス グループの名前をクリックします。インスタンス グループのプロパティが記載されたページが表示されます。
- [編集] をクリックして、このマネージド インスタンス グループを変更します。
- [ポート マッピング] セクションで、[ポートを追加] をクリックし、目的のポート名と、その名前に関連付けるポート番号を入力します。さらにエントリが必要な場合は、[ポートを追加] を再度クリックします。
- [保存] をクリックして、変更を保存し、マネージド インスタンス グループ内のインスタンスに名前付きポートを適用します。
- 可用性の高いアプリでの負荷分散の使用のチュートリアルを試す。
- マネージド インスタンス グループに使用できるインスタンス テンプレートの作成。
- リージョン マネージド インスタンス グループを作成する。
- マネージド インスタンス グループの自動修復の有効化。
- マネージド インスタンス グループの自動スケーリングを有効にする。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
詳細については、Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。
マネージド インスタンス グループをバックエンド サービスに追加する
ロードバランサを作成するには、ほとんどの種類でバックエンド サービスが必要です。
バックエンド サービスには複数のバックエンドを含めることができます。インスタンス グループはバックエンドの一種です。インスタンス グループ内のインスタンスがロードバランサからのトラフィックに応答します。それにより、バックエンド サービスは使用できるインスタンス、処理可能なトラフィック数、現在処理しているトラフィック数を認識するようになります。また、バックエンド サービスはヘルスチェックをモニタリングし、異常なインスタンスにはトラフィックを送信しません。
マネージド インスタンス グループをバックエンド サービスに追加するには、以下の手順を実施します。
コンソール
gcloud
add-backend
コマンドを実行します。gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --instance-group=INSTANCE_GROUP \ [--instance-group-region=INSTANCE_GROUP_REGION | --instance-group-zone=INSTANCE_GROUP_ZONE] \ --balancing-mode=BALANCING_MODE
バランシング モードのサポートは、ロードバランサのタイプによって異なります。完全なリストについては、各ロードバランサで使用できるバランシング モードをご覧ください。
マネージド インスタンス グループの負荷分散モードに応じて、パラメータを追加する必要があります。詳細については、SDK の
add-backend
コマンドをご覧ください。REST
REST API を使用してバックエンド サービスを追加するには、backendServices をご覧ください。
制限事項
リージョン MIG でのロード バランシングは、
RATE
とUTILIZATION
のバランス調整モードでmax-rate
ターゲット容量をサポートしていません。各ロードバランサの使用ガイドラインの詳細については、ロード バランシング モードとターゲット容量の設定をご覧ください。マネージド インスタンス グループをターゲット プールに追加する
ターゲット プールは、1 つ以上の仮想マシン インスタンスが含まれるオブジェクトです。ターゲット プールは外部パススルー ネットワーク ロードバランサで使用され、ロードバランサによって接続されているターゲット プールにユーザー リクエストが転送されます。このターゲット プールに含まれるインスタンスによってこれらのリクエストが処理され、レスポンスが返されます。インスタンス グループに対してインスタンスが追加または削除されると、その変更に合わせてターゲット プールが自動的に更新されるように、マネージド インスタンス グループをターゲット プールに追加できます。
マネージド インスタンス グループをターゲット プールに追加する前に、ターゲット プールを用意しておく必要があります。詳細については、ターゲット プールの追加に関するドキュメントをご覧ください。
既存のマネージド インスタンス グループをターゲット プールに追加する手順は次のとおりです。この操作を行うと、マネージド インスタンス グループに含まれるすべての VM インスタンスがターゲット プールに追加されます。
コンソール
gcloud
set-target-pools
コマンドを実行します。gcloud compute instance-groups managed set-target-pools INSTANCE_GROUP \ --target-pools TARGET_POOL,..
ここで
REST
リージョン MIG またはゾーン MIG の
setTargetPools
メソッドを呼び出します。次に例を示します。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/regionInstanceGroupManagers/INSTANCE_GROUP/setTargetPools
ここで
リクエストの本文には、このグループを追加するターゲット プールの URI のリストを含める必要があります。次に例を示します。
{ "targetPools": [ "regions/us-central1/targetPools/example-targetpool-1", "regions/us-central1/targetPools/example-targetpool-2" ] }
マネージド インスタンス グループへの名前付きポートの割り当て
名前付きポートとは、ポートの名前と番号を表す Key-Value ペアです。ポート名は、サービスまたはアプリケーションの名前を表します。ポート番号は、サービスまたはアプリケーションが動作しているポートを表します。
名前付きポートは、Cloud Load Balancing で使用されます。プロキシとして機能するロードバランサは、そのバックエンド サービスの構成内で、単一の名前付きポートに登録されます。ポート名は、各インスタンス グループのバックエンドの名前付きポート マッピングに基づいて、ポート番号に変換されます。
たとえば、バックエンド サービスは、
http-port
という名前のポートに登録できます。バックエンド インスタンスのグループには、http-port:80
という名前のポートを含めることができます。バックエンド インスタンスのグループは、TCP などのプロトコルを使用して、ポート 80 上のグループ内の VM にトラフィックを送信するようにロードバランサに指示します。プロトコルは、ロードバランサのバックエンド サービスで定義されます。名前付きポートは、プロキシ ロードバランサで使用されるシンプルなメタデータです。名前付きポートは Compute Engine のネットワークまたはファイアウォールのリソースを制御しません。
複数のポート番号を持つ名前付きポート
各サービス名に複数のポートを割り当てることができます。また、ポートごとに複数のサービス名を割り当てることもできます。
次の点に注意してください。
インスタンス グループに複数の名前付きポートを割り当てられます。名前付きポート
http-port
に登録され、2 つのバックエンド インスタンスのグループを持つ、バックエンド サービスの例を見てみましょう。このバックエンド サービスは、
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 Console では使用できません。--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-name
をmy-service-name
に設定して、バックエンド サービス構成の名前付きポートを参照する必要があります。gcloud compute backend-services update my-backend-service \ --port-name=my-service-name
名前付きポートを作成する
コンソール
gcloud
マネージド インスタンス グループの場合は、
instance-groups managed set-named-ports
コマンドを使用して 1 つ以上の名前付きポートを設定します。非マネージド グループの場合は、instance-groups set-named-ports
コマンドを使用します。gcloud compute instance-groups managed set-named-ports INSTANCE_GROUP \ --named-ports PORT_NAME:PORT,PORT_NAME:PORT
次に例を示します。
gcloud compute instance-groups managed set-named-ports INSTANCE_GROUP \ --named-ports name1:80,name2:8080
各サービス名に複数のポートを割り当てる、または各サービスに複数の名前を割り当てるには、各名前またはポートに 1 つ以上の項目を作成します。たとえば、ポート
10
、20
、80
が同じアプリケーション用の場合、これらのポートすべてにname1
を割り当てることができます。さらに、ポート8080
にname2
とname3
の 2 つの名前を割り当てることもできます。また、次の例のように、ポート9000
をname4
に割り当てることもできます。gcloud compute instance-groups managed set-named-ports INSTANCE_GROUP \ --named-ports name1:10,name1:20,name1:80,\ name2:8080,name3:8080,\ name4:9000
get-named-ports
コマンドを使用して、マネージド インスタンス グループに対する名前付きポートの割り当てを確認します。gcloud compute instance-groups managed get-named-ports INSTANCE_GROUP
NAME PORT name1 10 name1 20 name1 80 name2 8080 name3 8080 name4 9000
REST
instanceGroupManagers
API は、setNamedPorts
API メソッドを提供していません。このタスクを実行するには、代わりにinstanceGroups
API を使用してください。instanceGroups
API へのリクエストを作成し、インスタンス グループの名前を含めます。特定のグループに関する情報を取得して、インスタンス グループの現在のfingerprint
値を取得します。リクエスト本文にfingerprint
と 1 つ以上のnamedPorts
値のペアを含めます。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroups/INSTANCE_GROUP/setNamedPorts { "fingerprint": "42WmSpB8rSM=", "namedPorts": [ { "name": "PORT_NAME", "port": PORT_NUMBER }, { "name": "PORT_NAME", "port": PORT_NUMBER } ] }
たとえば、ポート
10
、20
、80
が同じアプリケーション用の場合、これらのポートすべてにname1
を割り当てることができます。さらに、ポート8080
にname2
とname3
の 2 つの名前を割り当てることもできます。また、次の例のように、ポート9000
をname4
に割り当てることもできます。POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instanceGroups/example-group/setNamedPorts { "fingerprint": "42WmSpB8rSM=", "namedPorts": [ { "name": "name1", "port": 8080 }, { "name": "name2", "port": 9000 } ] }
各サービス名に複数のポートを割り当てるには、そのサービス名の複数の項目を作成します。たとえば、ポート
10
、20
、80
をname1
に割り当てることができます。さらに、ポート8080
をname2
に割り当てます。POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instanceGroups/example-group/setNamedPorts { "fingerprint": "42WmSpB8rSM=", "namedPorts": [ { "name": "name1", "port": 10 }, { "name": "name1", "port": 20 } { "name": "name1", "port": 80 } { "name": "name2", "port": 8080 } { "name": "name3", "port": 80 } { "name": "name4", "port": 8080 } ] }
マネージド インスタンス グループにすでに割り当てられている名前付きポートのリストを表示するには、そのグループを指す
GET
リクエストを作成します。GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/INSTANCE_GROUP
次のステップ
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2024-12-05 UTC。
-