MIG でのステートフル メタデータの構成


インスタンス メタデータは、メタデータ サーバーを介してアプリケーションのプロパティを設定し、通信する場合に役立ちます。たとえば、メタデータを使用して、仮想マシン(VM)インスタンスの ID、環境変数、クラスタ アーキテクチャに関する情報、VM が担当するデータ範囲を構成できます。

マネージド インスタンス グループ(MIG)でステートフル メタデータを構成すると、マネージド インスタンスの自動修復、更新、再作成イベントでインスタンス固有のメタデータが保持されます。

インスタンスごとの構成で MIG 内の VM インスタンスのステートフル メタデータを個別に構成して適用します。インスタンスの作成時または既存のマネージド インスタンスに対して、インスタンスごとの構成を設定できます。インスタンスごとの構成が適用されると、MIG はステートフル メタデータをマネージド インスタンスの構成から保持された状態preservedStateFromConfig)フィールドに保存します。

始める前に

  • ステートフル MIG を使用する場合ステートフル MIG の仕組みを確認します。
  • まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。

    このページのサンプルをどのように使うかに応じて、タブを選択してください。

    gcloud

    1. Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

      gcloud init
    2. デフォルトのリージョンとゾーンを設定します

    Terraform

    このページの Terraform サンプルをローカル開発環境から使用するには、gcloud CLI をインストールして初期化し、自身のユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定してください。

    1. Google Cloud CLI をインストールします。
    2. gcloud CLI を初期化するには:

      gcloud init
    3. Google アカウントのローカル認証情報を作成します。

      gcloud auth application-default login

    詳細については、 ローカル開発環境の認証の設定 をご覧ください。

    REST

    このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

      Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

      gcloud init

制限事項

ステートフル メタデータを使用した MIG には次の制限があります。

ステートフル構成を使用した MIG (ステートフル MIG)には、次の制限があります。

  • MIG にステートフルな構成がある場合は、自動スケーリングを使用できません。
  • 自動ローリング アップデートを使用する場合は、置換メソッドRECREATE に設定する必要があります。
  • ステートフル リージョン MIG の場合は、プロアクティブな再配布を無効にする(再配布タイプを NONE に設定する)必要があります。これは、複数ゾーンにまたがる自動再配布によってステーフル インスタンスが削除されないようにするためです。
  • すべてのインスタンスの構成を使用してインスタンス テンプレートのプロパティをオーバーライドする場合、インスタンスごとの構成とグループのすべてのインスタンス構成で、同時にこれらのプロパティを指定することはできません。

  • 手動またはサイズの変更でインスタンスを完全に削除した場合、インスタンスのステートフル メタデータは保持されません。

インスタンス作成時のステートフル メタデータの設定

ステートフル メタデータは、MIG でインスタンスを手動作成するときに設定します。これは、スタンドアロン VM のステートフル アプリケーションをステートフル MIG に移行する場合や、ステートフル インスタンスを作成する場合に便利です。

MIG でインスタンスを手動で作成し、ステートフル メタデータを指定すると、MIG は次のタスクを実行します。

  1. 指定されたインスタンス名を使用して、インスタンス テンプレートからマネージド インスタンスを作成します。
  2. 指定されたステートフル メタデータを使用してインスタンスごとの構成を作成し、そのメタデータをインスタンスに設定します。
  3. 関連付けられたマネージド インスタンスの構成(preservedStateFromConfig)から保持された状態にメタデータを保存します。

gcloud

カスタム名でマネージド インスタンスを作成し、その VM にステートフル メタデータを設定するには、--stateful-metadata フラグを指定して gcloud compute instance-groups managed create-instance コマンドを使用します。

gcloud compute instance-groups managed create-instance NAME \
  --instance INSTANCE_NAME \
  --stateful-metadata KEY=VALUE[,KEY=VALUE,...]

次のように置き換えます。

  • NAME: インスタンスを作成する MIG の名前
  • INSTANCE_NAME: 作成するインスタンスの名前
  • KEYVALUE: インスタンス テンプレートで定義されたメタデータに加えて、インスタンスに個別に設定するステートフル メタデータの 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:activelogging:elaborate を設定します。

Terraform

カスタム名でマネージド インスタンスを作成し、その VM にステートフル メタデータを設定するには、google_compute_per_instance_config リソースを使用します。

次のサンプルでは、ゾーン MIG を使用します。ゾーン MIG がまだない場合は、VM が単一のゾーンに制限されているゾーン MIG を作成します。

resource "google_compute_per_instance_config" "default" {
  instance_group_manager = google_compute_instance_group_manager.default.name
  zone                   = google_compute_instance_group_manager.default.zone
  name                   = "node-12"
  preserved_state {
    metadata = {
      mode    = "active"
      logging = "elaborate"
    }
  }
}

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

REST

カスタムの 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: リクエストのプロジェクト ID
  • ZONE: MIG が配置されているゾーン(ゾーン MIG に適用)
    • リージョン MIG の場合は、zones/ZONEregions/REGION に置き換え、MIG のリージョンを指定します
  • NAME: インスタンスを作成する MIG の名前
  • INSTANCE_NAME: 作成するインスタンスの名前
  • KEYVALUE: インスタンス テンプレートで定義されたメタデータに加えて、インスタンスに個別に設定するステートフル メタデータの 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:activelogging:elaborate を設定します。

既存の VM インスタンスのステートフル メタデータを個別に設定、変更、削除する

MIG で既存のインスタンスのステートフル メタデータを設定、変更、削除するには、関連付けられたインスタンス構成で設定し、インスタンスを更新して構成を適用します。

gcloud

MIG で VM インスタンスのステートフル メタデータを個別に構成するには、関連付けられたインスタンスごとの構成でステートフル メタデータを設定または削除します。構成をインスタンスに同時に適用した場合は(--update-instance)、インスタンスを実行し続けるか、再起動するか、再作成するかを選択できます。構成を適用しない場合は(--no-update-instance)、インスタンスを再作成または更新するまで変更が適用されません。

特定のインスタンスにインスタンスごとの構成が存在しない場合は、次のいずれかのフラグを指定して gcloud compute instance-groups managed instance-configs create コマンドを使用します。

gcloud compute instance-groups managed instance-configs create NAME \
  --instance INSTANCE_NAME \
  --stateful-metadata KEY=VALUE[,KEY=VALUE,...] \
  [--no-update-instance | --update-instance] \
  [--instance-update-minimal-action MINIMAL_ACTION]

特定のインスタンスにインスタンスごとの構成がすでに存在する場合は、次のフラグを指定して gcloud compute instance-groups managed instance-configs update コマンドを使用します。

  • メタデータを設定または変更するための --stateful-metadata フラグ、または
  • インスタンス固有のステートフル メタデータを削除するための --remove-stateful-metadata フラグ。
gcloud compute instance-groups managed instance-configs update NAME \
  --instance INSTANCE_NAME \
  [--stateful-metadata KEY=VALUE[,KEY=VALUE,...]] \
  [--remove-stateful-metadata KEY[,KEY,...]] \
  [--no-update-instance | --update-instance] \
  [--instance-update-minimal-action MINIMAL_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

このコマンドは、次のことを行います。

  1. example-cluster MIG で VM node-12 に関連付けられているインスタンスごとの構成に mode:standby メタデータを設定します。
  2. node-12 インスタンスのインスタンスごとの構成から logging:elaborate メタデータを削除します。
  3. インスタンスごとの構成の変更を node-12 VM に適用します。
    • 構成に従って mode:standby メタデータを設定します。
    • logging キーの値がインスタンスごとの構成によって定義されなくなったため、インスタンス テンプレートから logging:basic メタデータを設定します。
  4. フラグ --no-update-instance が省略されているため、変更はデフォルトで VM にすぐに適用されます。
  5. --instance-update-minimal-action フラグが省略されており、デフォルトでは更新に対して最も中断の少ないアクション(refresh)が選択されているため、VM は更新中も実行されます。

REST

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/ZONEregions/REGION に置き換え、MIG のリージョンを指定します。
  • NAME: MIG の名前。
  • INSTANCE_NAME: ステートフル メタデータを構成する VM の名前。
  • KEYVALUE: インスタンス テンプレートで定義されたメタデータに加えて、インスタンスに個別に設定するステートフル メタデータの 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
        }
      }
    }
  ]
}

このメソッドは次の処理を行います。

  1. example-cluster MIG 内の VM node-12 に関連付けられたインスタンスごとの構成に mode:standby メタデータを設定します。
  2. 指定された値が 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 に適用します。

  1. インスタンスごとの構成に従って、mode:standby メタデータを設定します。
  2. logging キーの値がインスタンスごとの構成によって定義されなくなったため、インスタンス テンプレートから logging:basic メタデータを設定します。
  3. minimalActionNONE に設定されているため、更新中も VM は実行を継続します。これにより、MIG は更新に必要な中断が最小限のアクションを使用できます。インスタンス メタデータの更新には REFRESH アクションが必要です。これにより、実行中のインスタンスが中断されることはありません。

フィードバック

ステートフル MIG に関するユースケース、課題、フィードバックを募集しています。mig-discuss@google.com にフィードバックをお寄せください。

次のステップ