MIG で VM 構成の更新を選択的に適用する


このドキュメントでは、マネージド インスタンス グループ(MIG)の仮想マシン(VM)インスタンスに構成の更新を選択的に適用する方法について説明します。

Compute Engine は、使用する構成コンポーネント(インスタンス テンプレート、オプションのすべてのインスタンス構成、オプションのステートフル構成)に基づいて MIG 内の VM を維持します。

コンポーネントを変更して MIG の VM 構成を更新すると、Compute Engine は更新された構成を、グループに追加された新しい VM に自動的に適用します。

更新された構成を既存の VM に適用するには、選択的更新(「追従型」更新タイプとも呼ばれます)を設定します。このタイプの更新には、次のような利点があります。

  • 更新する VM を選択できます。
  • 更新のタイミングと順序を制御できます。
  • gcloud CLI または REST を使用して、すべての VM を直ちに更新できます。

また、MIG 内のすべてまたはランダムな VM のサブセットに対して新しい構成のロールアウトを自動化するには、MIG で VM 構成の更新を自動的に適用するをご覧ください。 判断するには、既存の VM に新しい構成を適用する方法をご覧ください。

始める前に

  • まだ設定していない場合は、認証を設定します。認証とは、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

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

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

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      詳細については、Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。

更新された構成を選択した VM に適用する

MIG が既存の VM に新しい VM 構成を自動的に適用しないようにするには、グループの更新ポリシータイプを「追従型」に設定します。詳細については、グループの更新ポリシーのタイプを確認するをご覧ください。

次に、gcloud CLI または REST を使用して MIG の構成を更新し、最新の構成をグループ内の特定の VM またはすべての VM に適用します。

gcloud

グループに新しいインスタンス テンプレートを設定するには、set-instance-template コマンドを使用します。

gcloud compute instance-groups managed set-instance-template INSTANCE_GROUP_NAME \
    --template=INSTANCE_TEMPLATE

特定の VM に構成を適用する

更新された構成を特定の VM に適用するには、--instances フラグを指定して update-instances コマンドを使用します。

gcloud compute instance-groups managed update-instances INSTANCE_GROUP_NAME \
    --instances INSTANCE_NAMES \
    --most-disruptive-allowed-action DISRUPTION_LEVEL \
    --minimal-action DISRUPTION_LEVEL

すべての VM に構成を適用する

更新された構成をすべての VM に適用するには、--all-instances フラグを指定して update-instances コマンドを使用します。

gcloud compute instance-groups managed update-instances INSTANCE_GROUP_NAME \
    --all-instances \
    --most-disruptive-allowed-action DISRUPTION_LEVEL \
    --minimal-action DISRUPTION_LEVEL

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

  • INSTANCE_GROUP_NAME: MIG の名前
  • INSTANCE_TEMPLATE: 新しいインスタンス テンプレート
  • INSTANCE_NAMES: テンプレートを適用する VM のリスト
  • DISRUPTION_LEVEL: 最小または最大の中断レベルnonerefreshrestartreplaceのいずれか)
    • デフォルトの最小アクションは none です。
    • デフォルトの許容される最も大がかりなアクションは replace です。

REST

グループに新しいインスタンス テンプレートを設定するには、ゾーンまたはリージョンの MIG に対して patch メソッドを呼び出し、versions.instanceTemplate フィールドを更新します。新しいテンプレートをグループ内のすべての VM に自動的にロールアウトしないようにするには、updatePolicy.type フィールドを OPPORTUNISTIC に設定します。

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME

{
  "updatePolicy": {
    "type": "OPPORTUNISTIC"
  },
  "versions": [{
    "instanceTemplate": "global/instanceTemplates/NEW_TEMPLATE",
  }]
}

特定の VM に構成を適用する

更新された構成を特定の VM に適用するには、ゾーンまたはリージョンの MIG に対して applyUpdatesToInstances メソッドを呼び出し、リクエスト内の VM のリストを指定します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME/applyUpdatesToInstances
{
  "instances": [
    "zones/ZONE/instances/INSTANCE_NAME_1",
    "zones/ZONE/instances/INSTANCE_NAME_2"
  ],
  "minimalAction": DISRUPTION_LEVEL,
  "mostDisruptiveAllowedAction": DISRUPTION_LEVEL
}

すべての VM に構成を適用する

更新した構成を既存のすべての VM に適用するには、allInstances フィールドを true に設定します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME/applyUpdatesToInstances
{
  "allInstances": true,
  "minimalAction": DISRUPTION_LEVEL,
  "mostDisruptiveAllowedAction": DISRUPTION_LEVEL
}

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

  • INSTANCE_GROUP_NAME: グループの名前
  • NEW_TEMPLATE: 新しいテンプレートの名前
  • ZONE: 更新するインスタンスのゾーン
  • INSTANCE_NAME_1INSTANCE_NAME_2: 更新する VM の名前
  • DISRUPTION_LEVEL: 最小または最大の中断レベルNONEREFRESHRESTARTREPLACEのいずれか)
    • デフォルトの minimalActionNONE です。
    • デフォルトの mostDisruptiveAllowedActionREPLACE です。

他のマネージド インスタンス グループのメソッドと同様に、applyUpdatesToInstances はインテント ベースのメソッドです。つまり、このメソッドはオペレーション レスポンスを返します。オペレーションが完了するまでに時間がかかることがあります。

リクエストを送った後、ステータスを確認して、更新が完了したことを確認できます。

選択更新での中断レベルを制御する

更新の特性によっては、インスタンスの状態が損なわれる可能性があります。たとえば、インスタンスのブートディスクを変更するには、インスタンスを置き換える必要があります。選択更新での中断レベルを制御するには、次のオプションを設定します。

  • 最小アクション: このオプションは、中断を最小限に抑えるとともに、必要以上に大がかりなアクションを適用する場合に使用します。

    • 中断を最小限に抑えるには、最小アクションを NONE に設定します。より大がかりなアクションを実行しなければ更新できない場合、Compute Engine は更新に必要なアクションを実行します。
    • 必要以上に大がかりなアクションを適用するには、最小アクションに RESTART または REPLACE を設定します。たとえば、Compute Engine ではメタデータを変更するために VM を再起動する必要はありませんが、アプリケーションが VM の再起動時にのみインスタンス メタデータを読み取る場合は、メタデータの変更を取得するために、最小限のアクションを RESTART に設定します。
  • 許容される最も大がかりなアクション: 許容可能なレベルを超える中断が必要な場合は、このオプションを使用して更新を防ぐことができます。このフラグで設定したアクションよりも大がかりなアクションを実行しなければ更新できない場合、更新リクエストは失敗します。たとえば、許容される最も大がかりなアクションとして RESTART を設定した場合、ブートディスク イメージを更新しようとしても失敗します。ブートディスク イメージの更新にはインスタンスの再作成が必要になり、これは再起動よりも大がかりなアクションになるためです。

選択した VM を更新する場合は、どちらのオプションにも次の値を指定できます。

説明更新可能なインスタンス プロパティ
NONEインスタンスを一切中断しません。なし
REFRESHインスタンスを停止しません。追加のディスク、インスタンス メタデータ、ラベル、タグ
RESTARTインスタンスを停止して再起動します。追加のディスク、インスタンス メタデータ、ラベル、タグ、マシンタイプ
REPLACEインスタンスを削除して再作成します。インスタンス テンプレートまたはインスタンスごとの構成ファイルに保存されているすべてのインスタンス プロパティ

許容される最も大がかりなアクションを、最小アクションよりも小さいアクションにすることはできません。

VM を選択的に更新する場合、次のデフォルトが適用されます。

  • デフォルトの最小アクションは NONE で、可能な限り中断を制限します。
  • デフォルトの許容される最も大がかりなアクションは REPLACE です。このような中断を許容できない場合は、許容される最も大がかりなアクションを可能な限り少なくします。

次のステップ