インスタンス メタデータは、メタデータ サーバーを介してアプリケーションのプロパティを設定し、通信する場合に役立ちます。たとえば、メタデータを使用して、仮想マシン(VM)インスタンスの ID、環境変数、クラスタ アーキテクチャに関する情報、VM が担当するデータ範囲を構成できます。
マネージド インスタンス グループ(MIG)でステートフル メタデータを構成すると、マネージド インスタンスの自動修復、更新、再作成イベントでインスタンス固有のメタデータが保持されます。
インスタンスごとの構成で MIG 内の VM インスタンスのステートフル メタデータを個別に構成して適用します。インスタンスの作成時または既存のマネージド インスタンスに対して、インスタンスごとの構成を設定できます。インスタンスごとの構成が適用されると、MIG はステートフル メタデータをマネージド インスタンスの構成から保持された状態(preservedStateFromConfig
)フィールドに保存します。
始める前に
- ステートフル MIG を使用する場合とステートフル MIG の仕組みを確認します。
-
まだ認証を設定していない場合は、ここで認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境でコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。
Select the tab for how you plan to use the samples on this page:
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
Terraform
ローカル開発環境でこのページの Terraform サンプルを使用するには、gcloud CLI をインストールして初期化し、ユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定します。
詳細については Set up authentication for a local development environment をご覧ください。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
詳細については、 Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。
-
制限事項
ステートフル メタデータを使用した MIG には次の制限があります。
ステートフル構成を使用した MIG (ステートフル MIG)には、次の制限があります。
- MIG にステートフルな構成がある場合は、自動スケーリングを使用できません。
- 自動ローリング アップデートを使用する場合は、置換メソッドを
RECREATE
に設定する必要があります。 - ステートフル リージョン MIG の場合は、プロアクティブな再配布を無効にする(再配布タイプを
NONE
に設定する)必要があります。これは、複数ゾーンにまたがる自動再配布によってステーフル インスタンスが削除されないようにするためです。 すべてのインスタンスの構成を使用してインスタンス テンプレートのプロパティをオーバーライドする場合、インスタンスごとの構成とグループのすべてのインスタンス構成で、同時にこれらのプロパティを指定することはできません。
手動またはサイズの変更でインスタンスを完全に削除した場合、インスタンスのステートフル メタデータは保持されません。
インスタンス作成時のステートフル メタデータの設定
ステートフル メタデータは、MIG でインスタンスを手動作成するときに設定します。これは、スタンドアロン VM のステートフル アプリケーションをステートフル MIG に移行する場合や、ステートフル インスタンスを作成する場合に便利です。
MIG でインスタンスを手動で作成し、ステートフル メタデータを指定すると、MIG は次のタスクを実行します。
- 指定されたインスタンス名を使用して、インスタンス テンプレートからマネージド インスタンスを作成します。
- 指定されたステートフル メタデータを使用してインスタンスごとの構成を作成し、そのメタデータをインスタンスに設定します。
- 関連付けられたマネージド インスタンスの構成(
preservedStateFromConfig
)から保持された状態にステートフル メタデータを保存します。
カスタム名でマネージド インスタンスを作成し、その VM にステートフル メタデータを設定するには、--stateful-metadata
フラグを指定して gcloud compute instance-groups managed create-instance
コマンドを使用します。
gcloud compute instance-groups managed create-instanceNAME \ --instanceINSTANCE_NAME \ --stateful-metadataKEY =VALUE [,KEY =VALUE ,...]
次のように置き換えます。
NAME
: インスタンスを作成する MIG の名前INSTANCE_NAME
: 作成するインスタンスの名前KEY
とVALUE
: インスタンス テンプレートで定義されたメタデータに加えて、インスタンスに個別に設定するステートフル メタデータの Key-Value ペア- ここで設定するキー値は、インスタンス テンプレートの競合するキー値よりも優先されます
例
active
または standby
のいずれかのモードで動作するノードのクラスタ example-cluster
をデプロイする必要があります。メタデータを使用して、クラスタ内の各 VM に個別にモードを設定します(例: mode:active
)。また、basic
または elaborate
に設定できる logging
メタデータキーを使用して、各ノードの詳細なロギングを構成します。ノード上のアプリケーションは、インスタンス メタデータの値を使用して構成されます。
詳細なロギングを使用してアクティブ ノード node-12
を作成するには、次のコマンドを実行します。
gcloud compute instance-groups managed create-instance example-cluster \ --instance node-12 \ --stateful-metadata mode=active,logging=elaborate
このコマンドは、example-cluster
MIG に VM node-12
を作成し、新しいインスタンスの 2 つのメタデータ Key-Value ペア mode:active
と logging:elaborate
を設定します。
カスタム名でマネージド インスタンスを作成し、その VM にステートフル メタデータを設定するには、google_compute_per_instance_config
リソースを使用します。
次のサンプルでは、ゾーン MIG を使用します。ゾーン MIG がまだない場合は、VM が単一のゾーンに制限されているゾーン MIG を作成します。
Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。
カスタムの VM 名を使用して MIG 内に 1 つまたは複数のマネージド インスタンスを作成し、それらの VM に個別にステートフル メタデータを設定するには、instanceGroupManagers.createInstances
メソッドを使用します。リージョン MIG の場合は、regionInstanceGroupManagers.createInstances
メソッドを使用します。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID /zones/ZONE /instanceGroupManagers/NAME /createInstances { "perInstanceConfigs": [ { "name": "INSTANCE_NAME ", "preservedState" : { "metadata": { "KEY " : "VALUE ", ... } } }, ... ] }
次のように置き換えます。
PROJECT_ID
: リクエストのプロジェクト IDZONE
: MIG が配置されているゾーン(ゾーン MIG に適用)- リージョン MIG の場合は、
zones/ZONE
をregions/REGION
に置き換え、MIG のリージョンを指定します
- リージョン MIG の場合は、
NAME
: インスタンスを作成する MIG の名前INSTANCE_NAME
: 作成するインスタンスの名前KEY
とVALUE
: インスタンス テンプレートで定義されたメタデータに加えて、インスタンスに個別に設定するステートフル メタデータの Key-Value ペア- ここで設定するキー値は、インスタンス テンプレートの競合するキー値よりも優先されます
例
active
または standby
のいずれかのモードで動作するノードのクラスタ example-cluster
をデプロイする必要があります。メタデータを使用して、クラスタ内の各 VM に個別にモードを設定します(例: mode:active
)。また、basic
または elaborate
に設定できる logging
メタデータキーを使用して、各ノードの詳細なロギングを構成します。ノード上のアプリケーションは、インスタンス メタデータの値を使用して構成されます。
詳細なロギングを使用してアクティブ ノード node-12
を作成するには、次のメソッドを実行します。
POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-cluster/createInstances { "instance": [ { "name": "node-12", "preservedState" : { "metadata": { "mode":"active", "logging":"elaborate" } } } ] }
このメソッドは、example-cluster
MIG に VM node-12
を作成し、新しいインスタンスの 2 つのメタデータ Key-Value ペア mode:active
と logging:elaborate
を設定します。
既存の VM インスタンスのステートフル メタデータを個別に設定、変更、削除する
MIG で既存のインスタンスのステートフル メタデータを設定、変更、削除するには、関連付けられたインスタンス構成で設定し、インスタンスを更新して構成を適用します。
MIG で VM インスタンスのステートフル メタデータを個別に構成するには、関連付けられたインスタンスごとの構成でステートフル メタデータを設定または削除します。構成をインスタンスに同時に適用した場合は(--update-instance
)、インスタンスを実行し続けるか、再起動するか、再作成するかを選択できます。構成を適用しない場合は(--no-update-instance
)、インスタンスを再作成または更新するまで変更が適用されません。
特定のインスタンスにインスタンスごとの構成が存在しない場合は、次のいずれかのフラグを指定して gcloud compute instance-groups managed instance-configs create
コマンドを使用します。
gcloud compute instance-groups managed instance-configs createNAME \ --instanceINSTANCE_NAME \ --stateful-metadataKEY =VALUE [,KEY =VALUE ,...] \ [--no-update-instance | --update-instance] \ [--instance-update-minimal-actionMINIMAL_ACTION ]
特定のインスタンスにインスタンスごとの構成がすでに存在する場合は、次のフラグを指定して gcloud compute instance-groups managed instance-configs update
コマンドを使用します。
- メタデータを設定または変更するための
--stateful-metadata
フラグ、または - インスタンス固有のステートフル メタデータを削除するための
--remove-stateful-metadata
フラグ。
gcloud compute instance-groups managed instance-configs updateNAME \ --instanceINSTANCE_NAME \ [--stateful-metadataKEY =VALUE [,KEY =VALUE ,...]] \ [--remove-stateful-metadataKEY [,KEY ,...]] \ [--no-update-instance | --update-instance] \ [--instance-update-minimal-actionMINIMAL_ACTION ]
次のように置き換えます。
NAME
: マネージド インスタンス グループの名前。INSTANCE_NAME
: ステートフル メタデータを構成するインスタンスの名前。KEY=VALUE
: インスタンス テンプレートで定義されたメタデータに加えて、インスタンスに個別に設定するステートフル メタデータの Key-Value ペア。ここで設定するキー値は、インスタンス テンプレートの競合するキー値よりも優先されます。KEY
: インスタンスごとの構成から削除する、インスタンス固有のステートフル メタデータキー。- キーの値がインスタンス テンプレートで定義されていない場合、変更が適用されると、Key-Value ペアはインスタンスから完全に削除されます。
- キーの値がインスタンス テンプレートによって定義されている場合、変更が適用されるときにインスタンス テンプレートの値がインスタンスに設定されます。
MINIMAL_ACTION
: インスタンスごとの構成の更新をインスタンスに適用するときに、最低でも指定されたアクションを実行します。MINIMAL_ACTION
は、--update-instance
フラグが使用されている場合にのみ設定できます。値は次のいずれかにする必要があります。none
: アクションなし。refresh
: インスタンスを停止せずに適用できる更新を適用します。restart
: インスタンスを停止してから再起動します。replace
: インスタンスを再作成します。
省略した場合は、更新に必要な最も影響の少ない操作が使用されます。
例
active
または standby
のいずれかのモードで動作するノードのクラスタ example-cluster
があります。メタデータを使用して、クラスタ内の各 VM に個別にモードを設定します(例: mode:active
)。また、basic
または elaborate
に設定できる logging
メタデータキーを使用して、各ノードの詳細なロギングを構成します。各ノード上のアプリケーションは、インスタンス メタデータの値を消費します。
インスタンス テンプレートは、すべてのインスタンスのデフォルトとして使用される mode:active
メタデータと logging:basic
メタデータを定義します。クラスタ内の node-12
VM のインスタンスごとの構成で logging:elaborate
を設定しました。次に、node-12
をスタンバイ モードに切り替え、この VM のロギングを basic
に切り替えます。
node-12
インスタンスをスタンバイに切り替え、ロギングをベーシックに切り替えるには、次のコマンドを実行します。
gcloud compute instance-groups managed instance-configs update example-cluster \ --instance node-12 \ --stateful-metadata mode=standby \ --remove-stateful-metadata logging
このコマンドは、次のことを行います。
example-cluster
MIG で VMnode-12
に関連付けられているインスタンスごとの構成にmode:standby
メタデータを設定します。node-12
インスタンスのインスタンスごとの構成からlogging:elaborate
メタデータを削除します。- インスタンスごとの構成の変更を
node-12
VM に適用します。- 構成に従って
mode:standby
メタデータを設定します。 logging
キーの値がインスタンスごとの構成によって定義されなくなったため、インスタンス テンプレートからlogging:basic
メタデータを設定します。
- 構成に従って
- フラグ
--no-update-instance
が省略されているため、変更はデフォルトで VM にすぐに適用されます。 --instance-update-minimal-action
フラグが省略されており、デフォルトでは更新に対して最も中断の少ないアクション(refresh
)が選択されているため、VM は更新中も実行されます。
MIG で既存の VM インスタンスのステートフル メタデータを個別に構成するには、関連付けられたインスタンスごとの構成でメタデータを設定または削除します。次に、インスタンスを更新して構成を適用します。
インスタンスごとの構成が特定のインスタンスにまだ存在しない場合は、ステートフル メタデータで instanceGroupManagers.updatePerInstanceConfigs
メソッドを使用します。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID /zones/ZONE /instanceGroupManagers/NAME /updatePerInstanceConfigs { "perInstanceConfigs": [ { "name": "INSTANCE_NAME ", "preservedState" : { "metadata": { "KEY ": "VALUE ", ... } }, "fingerprint: "FINGERPRINT " }, ... ] }
特定のインスタンスにインスタンスごとの構成がすでに存在する場合は、instanceGroupManagers.patchPerInstanceConfigs
メソッドを使用します。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID /zones/ZONE /instanceGroupManagers/NAME /patchPerInstanceConfigs { "perInstanceConfigs": [ { "name": "INSTANCE_NAME ", "preservedState" : { "metadata": { "KEY ": "VALUE ", ... } }, "fingerprint: "FINGERPRINT " }, ... ] }
次のように置き換えます。
PROJECT_ID
: リクエストのプロジェクト ID。ZONE
: MIG が配置されているゾーン(ゾーン MIG に適用)。- リージョン MIG の場合は、
zones/ZONE
をregions/REGION
に置き換え、MIG のリージョンを指定します。
- リージョン MIG の場合は、
NAME
: MIG の名前。INSTANCE_NAME
: ステートフル メタデータを構成する VM の名前。KEY
とVALUE
: インスタンス テンプレートで定義されたメタデータに加えて、インスタンスに個別に設定するステートフル メタデータの Key-Value ペア。- インスタンス テンプレートにすでに存在するキーに定義されたステートフル メタデータ値は、インスタンス テンプレートの値をオーバーライドします。
- インスタンス テンプレートのその他のメタデータ エントリは影響を受けず、そのまま使用できます。
- 値として
null
を指定すると、インスタンスごとの構成からキーが削除されます。
FINGERPRINT
: 省略可。指定された構成のフィンガープリント(すでに存在する場合)。楽観的ロックに使用されます。
updatePerInstanceConfigs
メソッドと patchPerInstanceConfigs
メソッドは、指定されたインスタンスごとの構成を更新しますが、その構成の更新を関連付けられた VM インスタンスに適用しません。インスタンスを更新または再作成すると、変更が VM に適用されます。VM に変更を適用するには、手動で更新を適用するか、更新ツールをプロアクティブ モードまたはオポチュニスティック モードで使用します。
例
active
または standby
のいずれかのモードで動作するノードのクラスタ example-cluster
があります。メタデータを使用して、クラスタ内の各 VM に個別にモードを設定します(例: mode:active
)。また、basic
または elaborate
に設定できる logging
メタデータキーを使用して、各ノードの詳細なロギングを構成します。各ノード上のアプリケーションは、インスタンス メタデータの値を消費します。
インスタンス テンプレートは、すべてのインスタンスのデフォルトとして使用される mode:active
メタデータと logging:basic
メタデータを定義します。クラスタ内の node-12
VM のインスタンスごとの構成で logging:elaborate
を設定しました。次に、node-12
をスタンバイ モードに切り替え、このインスタンスのロギングを basic
に切り替えます。
node-12
VM をスタンバイに切り替えて、VM のロギングをベーシックに切り替えるには、patchPerInstanceConfigs
メソッドを使用して、関連付けられているインスタンスごとの構成にパッチを使用します。
POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-cluster/patchPerInstanceConfigs { "perInstanceConfigs": [ { "name": "node-12", "preservedState" : { "metadata": { "mode": "standby", "logging": null } } } ] }
このメソッドは次の処理を行います。
example-cluster
MIG 内の VMnode-12
に関連付けられたインスタンスごとの構成にmode:standby
メタデータを設定します。- 指定された値が
null
であるため、インスタンスごとの構成からlogging:elaborate
メタデータを削除します。
構成の更新はまだ node-12
VM インスタンスに適用されていません。構成の更新は、次にインスタンスを再作成または更新する、あるいはプロアクティブな自動更新を使用する際に適用されます。
インスタンスごとの構成の更新を node-12
VM インスタンスに適用するには、インスタンスの instanceGroupManagers.applyUpdatesToInstances
メソッドを呼び出します。
POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-cluster/applyUpdatesToInstances { "instances": ["/zones/us-east1-c/instances/node-12"], "minimalAction": "NONE" }
このメソッドは、更新されたインスタンスごとの構成を node-12
VM に適用します。
- インスタンスごとの構成に従って、
mode:standby
メタデータを設定します。 logging
キーの値がインスタンスごとの構成によって定義されなくなったため、インスタンス テンプレートからlogging:basic
メタデータを設定します。minimalAction
がNONE
に設定されているため、更新中も VM は実行を継続します。これにより、MIG は更新に必要な中断が最小限のアクションを使用できます。インスタンス メタデータの更新にはREFRESH
アクションが必要です。これにより、実行中のインスタンスが中断されることはありません。
フィードバック
ステートフル MIG に関するユースケース、課題、フィードバックを募集しています。mig-discuss@google.com にフィードバックをお寄せください。
次のステップ
- インスタンス メタデータの保存と取得について学習する。
- MIG で VM のステートフル永続ディスクを構成する。
- ステートフル構成の適用、表示、削除について学習する。
- MIG とマネージド インスタンスの操作について学習する。