MIG にステートフル IP アドレスを構成する


マネージド インスタンス グループ(MIG)でステートフル IP アドレスを構成すると、グループ内の VM インスタンスが自動修復、更新、再作成されるときに、IP アドレスが確実に保持されます。

内部および外部の IPv4 アドレスを保持できます。IP アドレスが自動的に割り当てられるように構成できます。または、MIG 内の各 VM インスタンスに特定の IP アドレスを割り当てることもできます。

始める前に

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

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

    コンソール

    Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。

    gcloud

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

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

    Terraform

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

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. 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.

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

    REST

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

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

      gcloud init

制限事項

ステートフル IP アドレスを使用する MIG には次の制限があります。

  • IPv6 アドレスはサポートされません。

  • 内部 IP アドレスは、サブネットワークのないネットワーク(レガシー ネットワークなど)ではサポートされていません。

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

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

料金

外部 IP アドレスに対しては、ネットワーキングの料金に応じて課金されます。

ステートフル IP アドレスを使用する状況

インスタンスの IP アドレスを保持することは、次のようなシナリオで有効です。

  • アプリケーションでは、割り当てられた IP アドレスを静的なままにする必要があります(例: Kafka)。
  • アプリケーションの構成は特定の IP アドレスに依存します。(例: DNS サーバー)
  • ユーザー(他のアプリケーションを含みます)は、専用の静的 IP アドレス(ファイル サーバーなど)を使用してサーバーにアクセスします。
  • ネットワーク構成を変更せずに既存のワークロードを移行する必要があります。

グループ内のすべての VM にステートフル IP アドレスを構成する

MIG 内のすべての VM にステートフル IP アドレスを構成することは、次のシナリオで有効です。

  • 割り当てられた IP アドレスは、静的なままにする必要があります。しかし、アプリケーションで特定の IP アドレスを特定のインスタンスに割り当てる必要はありません。IP アドレスは、インスタンス作成時に自動的に割り当てることができます。
  • ユーザー(他のアプリケーションなど)は、アプリケーションのデプロイ後にパブリッシュする静的 IP アドレスを使用してサーバーにアクセスします。
  • インスタンスの作成時に自動的に割り当てられた静的 IP アドレスを保持しながら、インスタンスの自動修復と自動更新を活用する必要があります。

グループ内の既存および将来の VM インスタンスの静的内部または外部 IP アドレスを維持するには、ステートフル ポリシーでアドレスを構成します。

グループのステートフル ポリシーにステートフル IP アドレス構成を追加すると、MIG では次の方法で構成が適用されます。

  • 新しいインスタンスの場合は、MIG が静的 IP アドレスを自動的に割り当てて予約します。
  • 既存のインスタンスの場合、MIG は対応する静的 IP アドレスを予約して、内部または外部のエフェメラル IP アドレスを静的アドレスに昇格させます。
  • 外部 IP アドレスを持たない既存のインスタンスの場合、MIG は静的 IP アドレスを割り当てて予約し、以下のデフォルト値を使用して、アクセス構成を対応するネットワーク インターフェースに追加します。

    "accessConfigs": [
      {
        "kind": "compute#accessConfig",
        "name": "External NAT",
        "natIP": "XX.XX.XX.XX",
        "networkTier": "PREMIUM",
        "type": "ONE_TO_ONE_NAT"
      }
    ]
    

静的 IP アドレスを予約するために、MIG によってアドレス リソースが作成されます。

MIG 作成時のステートフル IP アドレスの構成

Google Cloud コンソール、gcloud CLI、Terraform、または REST を使用します。

コンソール

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

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

  2. プロジェクトを選択し、[続行] をクリックします。

  3. [インスタンス グループの作成] をクリックします。

  4. [新しいマネージド インスタンス グループ(ステートフル)] を選択します。

  5. インスタンス グループの [名前] を指定します。

  6. インスタンス テンプレートを選択します。

  7. [インスタンスの数] で、マネージド インスタンス グループに含めるインスタンスの数を指定します。

  8. [ステートフル構成] で、ステートフルにする外部 IP や内部 IP を展開します。

    1. [ステートフル] で [はい] を選択します。
    2. [永続インスタンスの削除時] プルダウンから、VM インスタンスの削除時にステートフル IP アドレスに対して行うアクションを選択します。使用できるオプションは次のとおりです。
      • IP を接続解除:(デフォルト)。インスタンスの削除時にアドレスの割り当てを解除し、アドレスは予約したままになります。
      • IP を削除: インスタンスがインスタンス グループから完全に削除されるときに、静的 IP アドレスの予約を削除します。たとえば、インスタンスを手動で削除する、またはグループのサイズを縮小する場合が考えられます。
    3. ステートフル構成が完了したら、[完了] をクリックします。
  9. [作成] をクリックします。

gcloud

MIG の作成時に、インスタンス テンプレートのネットワーク インターフェースでステートフルにする IP アドレスを指定するには、gcloud compute instance-groups managed create コマンド で次のフラグを 1 つ以上使用する必要があります。

  • --stateful-internal-ip: 特定のネットワーク インターフェースの内部 IP アドレスをステートフルとしてマークするために使用します。
  • --stateful-external-ip: 特定のネットワーク インターフェースの外部 IP アドレスをステートフルとしてマークするために使用します。
gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --template INSTANCE_TEMPLATE \
    --size SIZE \
    --instance-redistribution-type NONE \
    --stateful-internal-ip [enabled | interface-name=NI_NAME][,auto-delete=DELETE_RULE] \
    --stateful-external-ip [enabled | interface-name=NI_NAME][,auto-delete=DELETE_RULE]

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

  • INSTANCE_GROUP_NAME: 作成する MIG の名前。
  • INSTANCE_TEMPLATE: インスタンスの作成時に使用されるインスタンス テンプレートの名前。
  • SIZE: このグループで最初に必要なインスタンスの数。
  • NI_NAME: 省略可。ネットワーク インターフェース名。指定しない場合は enabled オプションが必要で、nic0 という名前のプライマリ ネットワーク インターフェースがデフォルトで使用されます。複数のネットワーク インターフェースがある場合は、各ネットワーク インターフェースの IP ごとにこのフラグを指定できます。
  • DELETE_RULE: 省略可。VM インスタンスが完全に削除された場合の、関連する静的アドレス リソースの処理方法を指定します。使用できるオプションは次のとおりです。

    • never: デフォルト。静的 IP アドレスを削除しません。代わりに、インスタンスの削除時にアドレスの割り当てを解除し、アドレスは予約したままになります。
    • on-permanent-instance-deletion: インスタンスがインスタンス グループから完全に削除されたときに、静的 IP アドレスの予約を削除します。たとえば、インスタンスを手動で削除する、またはグループのサイズを縮小する場合が考えられます。

    削除ルールの値に関係なく、インスタンスの自動修復、更新、再作成のオペレーションを実施する際に、グループは常にステートフル IP アドレスを保持します。

デフォルト ネットワークおよびカスタム ネットワークの静的内部 IP アドレスと、デフォルト ネットワーク専用の静的外部 IP アドレスを持つ VM インスタンスのリージョン グループを作成する必要があります。アドレスは自動的に割り当てられ、インスタンスの自動修復、更新、再作成イベントを通して保持される必要があります。インスタンス構成は、node-template という名前のインスタンス テンプレートに保存します。

グループを作成するには、次のコマンドを実行します。

gcloud compute instance-groups managed create example-group \
    --region us-east1 \
    --template node-template \
    --base-instance-name node \
    --instance-redistribution-type NONE \
    --size 3 \
    --stateful-internal-ip interface-name=nic0,auto-delete=on-permanent-instance-deletion
    --stateful-internal-ip interface-name=nic1,auto-delete=on-permanent-instance-deletion
    --stateful-external-ip enabled,auto-delete=on-permanent-instance-deletion

nic0 および nic1 ネットワーク インターフェース内の内部 IP と、nic0 ネットワーク インターフェース内の外部 IP は、グループ内のすべてのインスタンスに対してステートフルとして構成されます。このグループは、インスタンスごとに静的内部 IP アドレスと外部 IP アドレスを自動的に予約します。auto-delete フラグが on-permanent-instance-deletion に設定されているため、静的 IP アドレスの予約は、関連するインスタンスやグループ全体を削除するときに、グループによって自動的に削除されます。

nic0 および nic1 ネットワーク インターフェース内の内部 IP と、nic0 ネットワーク インターフェース内の外部 IP がステートフルとして構成されていることを確認するには、次のコマンドを実行します。

gcloud compute instance-groups managed describe example-group \
    --zone us-east1-c

出力は次のようになります。

baseInstanceName: node
...
name: example-group
...
statefulPolicy:
  preservedState:
    internalIPs:
      nic0:
        autoDelete: ON_PERMANENT_INSTANCE_DELETION
      nic1:
        autoDelete: ON_PERMANENT_INSTANCE_DELETION
    externalIPs:
      nic0:
        autoDelete: ON_PERMANENT_INSTANCE_DELETION
...

グループのステートフル ポリシーには、nic0 および nic1 ネットワーク インターフェース内の内部 IP と、nic0 ネットワーク インターフェース内の外部 IP が、インスタンスを完全に削除するときに静的 IP の予約を削除するルールとともにステートフルとして宣言されていることがわかります。

Terraform

MIG 内の各 VM に必要なマシンタイプ、ブートディスク イメージ、ネットワーク、その他の VM プロパティを指定するインスタンス テンプレートをまだ作成していない場合は、インスタンス テンプレートの作成を開きます。

MIG を作成するときに、インスタンス テンプレートのネットワーク インターフェース内のどの IP アドレスをステートフルにするかを指定するには、次のブロックを 1 つ以上使用します。

  • stateful_internal_ip: 特定のネットワーク インターフェースの内部 IP アドレスをステートフルとしてマークするために使用します。
  • stateful_external_ip: 特定のネットワーク インターフェースの外部 IP アドレスをステートフルとしてマークするために使用します。

次のサンプルでは、リージョン MIG の作成時にステートフル IP アドレスを構成します。サンプルで使用しているリソースの詳細については、google_compute_region_instance_group_manager リソースをご覧ください。

resource "google_compute_region_instance_group_manager" "default" {
  name               = "example-group"
  base_instance_name = "node"
  target_size        = 3
  region             = "us-east1"

  version {
    instance_template = google_compute_instance_template.default.id
    name              = "primary"
  }
  update_policy {
    type                         = "OPPORTUNISTIC"
    minimal_action               = "REFRESH"
    instance_redistribution_type = "NONE"
    max_unavailable_fixed        = 3
  }
  stateful_internal_ip {
    interface_name = "nic0"
    delete_rule    = "ON_PERMANENT_INSTANCE_DELETION"
  }
  stateful_internal_ip {
    interface_name = "nic1"
    delete_rule    = "ON_PERMANENT_INSTANCE_DELETION"
  }
  stateful_external_ip {
    interface_name = "nic0"
    delete_rule    = "ON_PERMANENT_INSTANCE_DELETION"
  }
}

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

REST

MIG の作成時に、インスタンス テンプレートのネットワーク インターフェースでステートフルにする IP アドレスを指定するには、instanceGroupManagers.insert メソッドまたは regionInstanceGroupManagers.insert メソッドのリクエスト本文の statefulPolicy フィールドにその IP アドレスを含めます。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/instanceGroupManagers

{
  "name": "INSTANCE_GROUP_NAME",
  "versions": [
    {
      "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE"
    }
  ],
  "targetSize": SIZE,
  "statefulPolicy": {
    "preservedState": {
      "internalIPs": {
        "NI_NAME": {"autoDelete": "DELETE_RULE" }
      },
      "externalIPs": {
        "NI_NAME": {"autoDelete": "DELETE_RULE" }
      }
    }
  },
  "updatePolicy": {
    "instanceRedistributionType": "NONE"
  }
}

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

  • PROJECT: リクエストのプロジェクト ID。
  • REGION: リージョン MIG の場合、MIG が配置されているリージョン。ゾーン MIG の場合は、regions/REGIONzones/ZONE に置き換え、MIG が配置されているゾーンを指定します。
  • NAME: 作成する MIG の名前。
  • INSTANCE_TEMPLATE: インスタンスの作成時に使用されるインスタンス テンプレートの名前。
  • SIZE: このグループで最初に必要なインスタンスの数。
  • NI_NAME: 省略可。ネットワーク インターフェース名。指定しない場合は enabled オプションが必要で、nic0 という名前のプライマリ ネットワーク インターフェースがデフォルトで使用されます。複数のネットワーク インターフェースがある場合は、複数の NI_NAMES を指定できます。
  • DELETE_RULE: (省略可)VM インスタンスが完全に削除された場合の、関連する静的アドレス リソースの処理方法を指定します。使用できるオプションは次のとおりです。

    • NEVER: (デフォルト)静的 IP アドレスを削除しません。代わりに、インスタンスの削除時にアドレスの割り当てを解除し、アドレスは予約したままになります。
    • ON_PERMANENT_INSTANCE_DELETION: インスタンスがインスタンス グループから完全に削除されたときに、静的 IP アドレスの予約を削除します。たとえば、インスタンスを手動で削除する、またはグループのサイズを縮小する場合が考えられます。

    削除ルールの値に関係なく、インスタンスの自動修復、更新、再作成のオペレーションを実施する際に、グループは常にステートフル IP アドレスを保持します。

デフォルト ネットワークおよびカスタム ネットワークの静的内部 IP アドレスと、デフォルト ネットワーク専用の静的外部 IP アドレスを持つ VM インスタンスのリージョン グループを作成する必要があります。アドレスは自動的に割り当てられ、インスタンスの自動修復、更新、再作成イベントを通して保持される必要があります。インスタンス構成は、node-template という名前のインスタンス テンプレートに保存します。

グループを作成するには、regionInstanceGroupManagers.insert メソッドを使用します。

POST https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-east1/instanceGroupManagers

{
  "name": "example-group",
  "baseInstanceName": "node",
  "versions": [
    {
      "instanceTemplate": "global/instanceTemplates/node-template"
    }
  ],
  "targetSize": 3,
  "statefulPolicy": {
    "preservedState": {
      "internalIPs": {
        "nic0": {"autoDelete": "ON_PERMANENT_INSTANCE_DELETION" },
        "nic1": {"autoDelete": "ON_PERMANENT_INSTANCE_DELETION" }
      }
      "externalIPs": {
        "nic0": {"autoDelete": "ON_PERMANENT_INSTANCE_DELETION" }
      }
    }
  },
  "updatePolicy": {
    "instanceRedistributionType": "NONE"
  }
}

nic0 および nic1 ネットワーク インターフェース内の内部 IP と、nic0 ネットワーク インターフェース内の外部 IP は、グループ内のすべてのインスタンスに対してステートフルとして構成されます。このグループは、インスタンスごとに静的内部 IP アドレスと外部 IP アドレスを自動的に予約します。auto-delete フィールドが ON_PERMANENT_INSTANCE_DELETION に設定されているため、静的 IP アドレスの予約は、関連するインスタンスやグループ全体を削除するときに、グループによって自動的に削除されます。

regionInstanceGroupManagers.get メソッドを使用して、nic0 および nic1 ネットワーク インターフェース内の内部 IP と、nic0 ネットワーク インターフェース内の外部 IP が、新しい regionInstanceGroupManagers リソースのステートフル ポリシーで構成されていることを確認します。

GET https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-east1/instanceGroupManagers/example-group

レスポンスには、構成済みのステートフル ポリシーが含まれます。

{
  "name": "example-group",
  "baseInstanceName": "node",
  ...
  "statefulPolicy": {
    "preservedState": {
      "internalIPs": {
        "nic0": {"autoDelete": "ON_PERMANENT_INSTANCE_DELETION" },
        "nic1": {"autoDelete": "ON_PERMANENT_INSTANCE_DELETION" }
      }
      "externalIPs": {
        "nic0": {"autoDelete": "ON_PERMANENT_INSTANCE_DELETION" }
      }
    }
  }
  ...
}

グループのステートフル ポリシーには、nic0 および nic1 ネットワーク インターフェース内の内部 IP と、nic0 ネットワーク インターフェース内の外部 IP が、インスタンスを完全に削除するときに関連する静的 IP アドレスの予約を削除するルールとともにステートフルとして宣言されていることがわかります。

既存の MIG にある IP アドレスのステートフル構成を設定または更新する

ステートレス MIG(ステートフル構成のない MIG)でワークロードを実行し、ワークロードに静的 IP アドレスが必要な場合は、マネージド VM インスタンスにすでに割り当てられている IP アドレスをステートフルにするように構成できます。これにより、インスタンスの自動修復、更新、再作成時に既存の VM の IP アドレスが保持されます。インスタンスを削除した後、静的 IP アドレスの予約を保持することもできます。

既存の MIG に IP アドレスのステートフル ポリシーを構成すると、次の操作を行うことができます。

  • グループ内のすべての既存インスタンスと今後作成されるインスタンスに対して IP アドレスをステートフルとして構成します。これにより、すべての既存インスタンスの対応するエフェメラル IP アドレスが静的 IP アドレスに昇格されます。
  • IP アドレスの既存のステートフル構成を更新する。

MIG は、ステートフル ポリシーで更新された構成をすべてのインスタンスに自動的かつ非同期的に適用します。ステートフル ポリシーで IP アドレス構成を更新しても、実行中の VM インスタンスは中断されません。詳細については、ステートフル ポリシーの更新の適用をご覧ください。

コンソール

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

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

  2. ステートフル IP アドレスを指定するインスタンス グループの名前をクリックします。

  3. [編集] をクリックして、マネージド インスタンス グループを変更します。

  4. [ステートフル構成] で、ステートフルにする外部 IP や内部 IP を展開します。

    1. [ステートフル] で [はい] を選択します。
    2. [永続インスタンスの削除時] プルダウンから、VM インスタンスの削除時にステートフル IP アドレスに対して行うアクションを選択します。使用できるオプションは次のとおりです。
      • IP を接続解除:(デフォルト)。インスタンスの削除時にアドレスの割り当てを解除し、アドレスは予約したままになります。
      • IP アドレスを削除する: インスタンスがインスタンス グループから完全に削除されるときに、静的 IP アドレスの予約を削除します。たとえば、インスタンスを手動で削除する、またはグループのサイズを縮小する場合が考えられます。
    3. ステートフル構成を更新したら、[完了] をクリックします。
    4. [保存] をクリックして更新を完了します。

gcloud

ステートフルにする IP アドレスの指定、または既存の MIG のステートフル IP 構成の更新を行うには、gcloud compute instance-groups managed update コマンドで 1 つ以上の --stateful-internal-ip フラグまたは --stateful-external-ip フラグを使用します。

gcloud compute instance-groups managed update INSTANCE_GROUP_NAME \
    --stateful-internal-ip [enabled | interface-name=NI_NAME][,auto-delete=DELETE_RULE] \
    --stateful-external-ip [enabled | interface-name=NI_NAME][,auto-delete=DELETE_RULE]

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

  • INSTANCE_GROUP_NAME: 更新する MIG の名前。
  • NI_NAME: 省略可。ネットワーク インターフェース名。指定しない場合は enabled オプションが必要で、nic0 という名前のプライマリ ネットワーク インターフェースがデフォルトで使用されます。複数のネットワーク インターフェースがある場合は、各ネットワーク インターフェースの IP ごとにこのフラグを指定できます。
  • DELETE_RULE: 省略可。VM インスタンスが完全に削除された場合の、関連する静的アドレス リソースの処理方法を指定します。使用できるオプションは次のとおりです。

    • never: デフォルト。静的 IP アドレスを削除しません。代わりに、インスタンスの削除時にアドレスの割り当てを解除し、アドレスは予約したままになります。
    • on-permanent-instance-deletion: インスタンスがインスタンス グループから完全に削除されたときに、静的 IP アドレスの予約を削除します。たとえば、インスタンスを手動で削除する、またはグループのサイズを縮小する場合が考えられます。

    削除ルールの値に関係なく、インスタンスの自動修復、更新、再作成のオペレーションを実施する際に、グループは常にステートフル IP アドレスを保持します。

特定のネットワーク インターフェースのステートフル ポリシーに、指定した IP アドレスがすでに構成されている場合、このコマンドによって構成が更新されます。

example-fs-group という名前のステートフル MIG で実行されているファイル サーバーが、静的外部 IP アドレスを介して外部ユーザーに公開されるようにする必要があります。グループ内のインスタンスには現在エフェメラル外部 IP アドレスが割り当てられています。外部ユーザーが公開された IP アドレスを使用してサーバーに継続的にアクセスできるように、インスタンスの自動修復と更新時に IP アドレスが保持されることを確認する必要があります。また、意図しないグループの削除が発生した場合に継続性を保てるように IP アドレスを予約しておく必要があります。

次のコマンドを使用して MIG を更新し、外部 IP アドレスをステートフルとして定義します。

gcloud compute instance-groups managed update example-fs-group \
    --stateful-external-ip enabled

その結果、グループでは、nic0 ネットワーク インターフェース内のエフェメラル外部 IP アドレスが、すべてのマネージド インスタンスの静的 IP アドレスに非同期で昇格されます。

これで、インスタンスの自動修復、更新、再作成の各イベントで外部 IP アドレスが保持されるようになりました。指定されていない auto-delete ルールはデフォルトで never に設定されているため、関連付けられた静的 IP アドレスの予約は、インスタンスの削除時に割り当てが解除されて保持されます。

ステートフル外部 IP がステートフル ポリシーに構成されていることを確認するには、gcloud compute instance-groups managed describe example-fs-group コマンドを実行します。

REST

ステートフルにする IP アドレスの指定、または既存の MIG のステートフル IP 構成の更新を行うには、instanceGroupManagers.patch メソッドまたは regionInstanceGroupManagers.patch メソッドを使用します。

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

{
  "statefulPolicy": {
    "preservedState": {
      "internalIPs": {
        "NI_NAME": {"autoDelete": "DELETE_RULE" }
      },
      "externalIPs": {
        "NI_NAME": {"autoDelete": "DELETE_RULE" }
      }
    }
  }
}

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

  • PROJECT: リクエストのプロジェクト ID。
  • REGION: リージョン MIG の場合、MIG が配置されているリージョン。ゾーン MIG の場合は、regions/REGIONzones/ZONE に置き換え、MIG が配置されているゾーンを指定します。
  • NAME: 作成する MIG の名前。
  • NI_NAME: (必須)ネットワーク インターフェース名。プライマリ ネットワーク インターフェースの名前は nic0 です。複数のネットワーク インターフェースがある場合は、複数の NI_NAMES を指定できます。
  • DELETE_RULE: (省略可)VM インスタンスが完全に削除された場合の、関連する静的アドレス リソースの処理方法を指定します。使用できるオプションは次のとおりです。

    • NEVER: (デフォルト)静的 IP アドレスを削除しません。代わりに、インスタンスの削除時にアドレスの割り当てを解除し、アドレスは予約したままになります。
    • ON_PERMANENT_INSTANCE_DELETION: インスタンスがインスタンス グループから完全に削除されたときに、静的 IP アドレスの予約を削除します。たとえば、インスタンスを手動で削除する、またはグループのサイズを縮小する場合が考えられます。

    削除ルールの値に関係なく、インスタンスの自動修復、更新、再作成のオペレーションを実施する際に、グループは常にステートフル IP アドレスを保持します。

指定した IP アドレスがステートフル ポリシーですでに構成されている場合、このメソッドでは構成にパッチが適用されます。

example-fs-group という名前のステートフル MIG で実行されているファイル サーバーが、静的外部 IP アドレスを介して外部ユーザーに公開されるようにする必要があります。グループ内のインスタンスには現在エフェメラル外部 IP アドレスが割り当てられています。外部ユーザーが公開されたネットワーク インターフェースを使用してサーバーに継続的にアクセスできるように、インスタンスの自動修復と更新時に IP アドレスが保持されることを確認する必要があります。また、意図しないグループの削除が発生した場合に継続性を保てるように IP アドレスを予約しておく必要があります。

MIG にパッチを適用して外部 IP アドレスをステートフルとして定義します。

PATCH https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-east1/instanceGroupManagers/example-fs-group

{
  "statefulPolicy": {
    "preservedState": {
      "externalIPs": {
        "nic0": {"autoDelete": "NEVER" }
      }
    }
  }
}

その結果、グループでは、nic0 ネットワーク インターフェース内のエフェメラル外部 IP アドレスが、すべてのマネージド インスタンスの静的 IP アドレスに非同期で昇格されます。

これで、インスタンスの自動修復、更新、再作成の各イベントで外部 IP アドレスが保持されるようになりました。autoDelete ルールが NEVER に設定されているため、インスタンスの削除時に、関連付けられた静的 IP アドレスの予約は割り当てが解除されて保持されます。

regionInstanceGroupManagers.get メソッドによって返された regionInstanceGroupManagers リソースを表示して、外部 IP アドレスがステートフル ポリシー内で構成されていることを確認します。

以前にステートフルであった IP アドレスをステートレスとして宣言する

次のような理由で、ステートフル IP アドレスをエフェメラルに構成することが必要になる場合があります。

  • 静的 IP アドレスに依存しないようにアプリを再設計する。
  • 誤って IP をステートフルに構成したため、元に戻す必要がある。

グループのステートフル ポリシーからステートフル IP 構成を削除して、特定のネットワーク インターフェース内の IP アドレスをすべてのマネージド インスタンスに対してエフェメラルとして宣言できます。

ステートフル ポリシーからステートフル IP 構成を削除すると、MIG は、グループ内のすべてのインスタンスの保持状態から非同期に IP アドレスを自動的に削除します。このオペレーションによって、実行中の VM インスタンスが中断されることはありません。IP アドレスはインスタンスでアクティブなままですが、ステートフルではなくなります。インスタンスを再作成または更新する場合、またはインスタンスが自動修復される場合に、MIG は関連付けられた静的 IP アドレスを割り当て解除し、エフェメラル アドレスを自動的に割り当てます。これで、静的外部 IP アドレスの予約を保持する必要がなくなった場合に、予約を解除できるようになりました。

詳細については、次のドキュメントをご覧ください。

コンソール

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

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

  2. IP アドレスのステートフル構成を削除するインスタンス グループの名前をクリックします。

  3. [編集] をクリックして、マネージド インスタンス グループを変更します。

  4. [ステートフル構成] で、ステートレスにする外部 IP や内部 IP を展開します。

    1. [ステートフル] オプションを [いいえ] に変更します。
    2. [完了] をクリックします。
  5. 変更後、[保存] をクリックします。

gcloud

MIG のステートフル ポリシーでエフェメラルに設定する IP アドレスを指定するには、gcloud compute instance-groups managed update コマンド--remove-stateful-internal-ips フラグまたは --remove-stateful-external-ips フラグを使用します。

gcloud compute instance-groups managed update INSTANCE_GROUP_NAME \
    --remove-stateful-internal-ips NI_NAME[,NI_NAME,...] \
    --remove-stateful-external-ips NI_NAME[,NI_NAME,...]

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

  • INSTANCE_GROUP_NAME: 更新する MIG の名前。
  • NI_NAME: 必須。ネットワーク インターフェース名。プライマリ ネットワーク インターフェースの名前は nic0 です。複数のネットワーク インターフェースがある場合は、複数の NI_NAMES を指定できます。

nic0 という名前のデフォルトのプライマリ ネットワーク インターフェースからステートフル IP アドレスをエフェメラル IP アドレスに変換する必要がある場合は、次のコマンドを使用することもできます。

gcloud compute instance-groups managed update INSTANCE_GROUP_NAME \
    --stateful-internal-ip disabled \
    --stateful-external-ip disabled

アプリケーションは、example-group という MIG に含まれる VM インスタンスの公開静的外部 IP アドレスを通じてユーザーに公開されています。MIG の前にロードバランサをデプロイし、ロードバランサを介してトラフィックをマネージド VM に転送することによって、サービスを再設計しました。静的外部 IP アドレスを保持する必要がなくなり、VM の外部 IP アドレスをエフェメラルにすることを考えています。

MIG 内の VM のステートフル外部 IP アドレスをエフェメラルにするには、次のコマンドを実行します。

gcloud compute instance-groups managed update example-group \
    --remove-stateful-external-ips nic0

MIG は、nic0 ネットワーク インターフェースの静的外部 IP アドレスをグループ内のすべてのインスタンスの保持状態から自動的かつ非同期で削除します。外部 IP アドレスはインスタンスでアクティブなままですが、ステートフルではなくなります。インスタンスを再作成または更新する場合、またはインスタンスが自動修復される場合に、MIG は関連付けられた静的 IP アドレスを割り当て解除し、エフェメラル アドレスを自動的に割り当てます。これで、静的外部 IP アドレスの予約を保持する必要がなくなった場合に、予約を解除できるようになりました。

REST

MIG のステートフル ポリシーでエフェメラルにする IP アドレスを指定するには、instanceGroupManagers.patch メソッドまたは regionInstanceGroupManagers.patch メソッドを使用して、MIG のステートフル ポリシーから各 IP の構成を削除します。

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

{
  "statefulPolicy": {
    "preservedState": {
      "internalIPs": {
        "NI_NAME": null
      },
      "externalIPs": {
        "NI_NAME": null
      }
    }
  }
}

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

  • PROJECT: リクエストのプロジェクト ID。
  • REGION: リージョン MIG の場合、MIG が配置されているリージョン。ゾーン MIG の場合は、regions/REGIONzones/ZONE に置き換え、MIG が配置されているゾーンを指定します。
  • INSTANCE_GROUP_NAME: 作成する MIG の名前。
  • NI_NAME: (必須)ネットワーク インターフェース名。プライマリ ネットワーク インターフェースの名前は nic0 です。複数のネットワーク インターフェースがある場合は、複数の NI_NAMES を指定できます。

アプリケーションは、example-group という MIG に含まれる VM インスタンスの公開静的外部 IP アドレスを通じてユーザーに公開されています。MIG の前面にロードバランサをデプロイし、ロードバランサを介してトラフィックをマネージド VM に転送することによって、サービスを再設計しました。静的外部 IP アドレスを保持する必要がなくなり、VM の外部 IP アドレスをエフェメラルにすることを考えています。

MIG 内の VM のステートフル外部 IP アドレスをエフェメラルにするには、MIG にパッチを適用します。

PATCH https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-east1/instanceGroupManagers/example-group

{
  "statefulPolicy": {
    "preservedState": {
      "externalIPs": {
        "nic0": null
      }
    }
  }
}

MIG は、nic0 ネットワーク インターフェースの静的外部 IP アドレスをグループ内のすべてのインスタンスの保持状態から自動的かつ非同期で削除します。外部 IP アドレスはインスタンスでアクティブなままですが、ステートフルではなくなります。インスタンスを再作成または更新する場合、またはインスタンスが自動修復される場合に、MIG は関連付けられた静的 IP アドレスを割り当て解除し、エフェメラル アドレスを自動的に割り当てます。これで、静的外部 IP アドレスの予約を保持する必要がなくなった場合に、予約を解除できるようになりました。

MIG で個別に VM 用のステートフル IP アドレスを構成する

MIG で VM のステートフル IP アドレスを個別に構成するのは、次のようなシナリオで有効です。

  • 自動修復と自動更新を利用するために、既存のワークロード(既存の予約済み静的 IP アドレスを移行する)をスタンドアロン VM インスタンスからステートフル MIG に移行する。
  • アーキテクチャまたはワークロード構成に必要な特定の予約済み静的 IP アドレスを割り当てる。

MIG での VM 作成時における静的 IP アドレスの構成

MIG にインスタンスを個別に作成する際に、静的 IP アドレスを予約して特定のインスタンスに割り当てることができます。これは、アーキテクチャ、構成、ユーザーが特定の静的 IP アドレスに依存している状況で、既存のスタンドアロン VM からステートフル MIG にステートフル アプリケーションを移行する場合に有効です。

MIG でインスタンスを手動で作成し、静的 IP アドレスを指定すると、MIG では次の処理が行われます。

  1. 指定された IP アドレスがまだ存在しない場合は、静的な内部または外部 IP アドレスの予約を作成します。
  2. 指定されたインスタンス名と IP アドレスを使用して、インスタンス テンプレートからインスタンスを作成します。
  3. IP アドレス用に指定されたステートフル構成を使用して、インスタンスごとの構成を作成します。

gcloud

事前定義された静的 IP アドレスを持つインスタンスを作成するには、次のフラグを 1 つ以上使用して gcloud compute instance-groups managed create-instance コマンドを使用します。

  • --stateful-internal-ip: 特定のネットワーク インターフェースの静的内部 IP アドレスを設定する場合に指定します。
  • --stateful-external-ip: 特定のネットワーク インターフェースの静的外部 IP アドレスを設定する場合に指定します。
gcloud compute instance-groups managed create-instance INSTANCE_GROUP_NAME \
    --instance INSTANCE_NAME \
    --stateful-internal-ip address=ADDRESS[,interface-name=NI_NAME][,auto-delete=DELETE_RULE] \
    --stateful-external-ip address=ADDRESS[,interface-name=NI_NAME][,auto-delete=DELETE_RULE]

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

  • INSTANCE_GROUP_NAME: MIG の名前。
  • INSTANCE_NAME: 作成するインスタンスの名前。
  • NI_NAME: 省略可。ネットワーク インターフェース名。指定しない場合は、デフォルトで nic0 という名前のプライマリ ネットワーク インターフェースが使用されます。複数のネットワーク インターフェースがある場合は、各ネットワーク インターフェースの IP ごとにこのフラグを指定できます。
  • ADDRESS: 必須。次のいずれかの形式でインスタンスに割り当てる静的 IP アドレス。

    • アドレス。静的 IP アドレスの予約の URL(例: "projects/example-project/regions/us-east1/addresses/example-ip-name")。
    • リテラル(例: "130.211.181.55")。
      • 指定された IP アドレスがまだ予約されていない場合、MIG は対応する IP アドレスの予約を自動的に作成します。
      • 指定された IP アドレスが予約されている場合、MIG ではインスタンスに予約が割り当てられます。
  • DELETE_RULE: 省略可。VM インスタンスが完全に削除された場合の、関連する静的アドレス リソースの処理方法を指定します。使用できるオプションは次のとおりです。

    • never: デフォルト。静的 IP アドレスを削除しません。代わりに、インスタンスの削除時にアドレスの割り当てを解除し、アドレスは予約したままになります。
    • on-permanent-instance-deletion: インスタンスがインスタンス グループから完全に削除されたときに、静的 IP アドレスの予約を削除します。たとえば、インスタンスを手動で削除する、またはグループのサイズを縮小する場合が考えられます。

    削除ルールの値に関係なく、インスタンスの自動修復、更新、再作成のオペレーションを実施する際に、グループは常にステートフル IP アドレスを保持します。

proxy-cluster という名前の MIG で実行されているプロキシ サーバー クラスタに、もう一つの VM インスタンスを追加する必要があります。proxy-node-03-ip という名前の静的内部 IP アドレスの予約を作成しており、新しいノードに割り当てる必要があります。ノードを後で削除しても、IP アドレスの予約は保持する必要があります。

次のコマンドを実行してノードを作成します。

gcloud compute instance-groups managed create-instance proxy-cluster \
    --instance proxy-node-03 \
    --stateful-internal-ip address="projects/example-project/regions/us-east1/addresses/proxy-node-03-ip",auto-delete=never

このコマンドは、proxy-node-03 という名前のインスタンスを作成し、proxy-node-03-ip という名前の指定された静的内部 IP アドレスをインスタンスに割り当て、IP のステートフル構成を対応するインスタンスごとの構成に保存します。auto-delete フラグが never に設定されているため、インスタンスを後で削除しても IP は予約された状態で保持されます。

Terraform

事前定義された静的 IP アドレスを持つ VM を作成するには、次のブロックを 1 つ以上使用します。

  • preserved_state.internal_ip: 特定のネットワーク インターフェースの内部 IP アドレスをステートフルとしてマークするために使用します。
  • preserved_state.external_ip: 特定のネットワーク インターフェースの外部 IP アドレスをステートフルとしてマークするために使用します。

次のサンプルでは、リージョン MIG で VM を作成するときに静的 IP アドレスを構成します。サンプルで使用しているリソースの詳細については、google_compute_region_per_instance_config リソースをご覧ください。 ゾーン MIG の場合は、google_compute_per_instance_config リソースを使用します。

resource "google_compute_region_per_instance_config" "default" {
  region_instance_group_manager = google_compute_region_instance_group_manager.default.name
  region                        = google_compute_region_instance_group_manager.default.region
  name                          = "proxy-node-03-ip"
  preserved_state {
    internal_ip {
      interface_name = "nic0"
      auto_delete    = "NEVER"
      ip_address {
        address = google_compute_address.default.id
      }
    }
  }
}

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

REST

MIG に 1 つ以上のインスタンスを作成してカスタム インスタンス名を設定し、これらのインスタンスに事前定義された静的 IP アドレスを割り当てるには、instanceGroupManagers.createInstances メソッドまたは regionInstanceGroupManagers.createInstances メソッドを使用します。

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

{
  "instances": [
    {
      "name": "INSTANCE_NAME",
      "preservedState" : {
        "internalIPs": {
          "NI_NAME" : {
            "ipAddress": {
              "address": "ADDRESS",
              "literal": "LITERAL"
            },
            "autoDelete": "DELETE_RULE"
          },
          ...
        },
        "externalIPs": {
          "NI_NAME" : {
            "ipAddress": {
              "address": "ADDRESS",
              "literal": "LITERAL"
            },
            "autoDelete": "DELETE_RULE"
          },
          ...
        },
        ...
      }
    },
    ...
  ]
}

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

  • PROJECT_ID: リクエストのプロジェクト ID。
  • NAME: MIG の名前。
  • REGION: リージョン MIG の場合、MIG が配置されているリージョン。ゾーン MIG の場合は、regions/REGIONzones/ZONE に置き換え、MIG が配置されているゾーンを指定します。
  • INSTANCE_NAME: 作成するインスタンスの名前。
  • NI_NAME: 必須。ネットワーク インターフェース名。プライマリ ネットワーク インターフェースの名前は nic0 です。複数のネットワーク インターフェースがある場合は、複数の NI_NAMES を指定できます。
  • ADDRESS: 省略可。静的 IP アドレスの予約の URL 形式でインスタンスに割り当てる静的 IP アドレス(例: "projects/example-project/regions/us-east1/addresses/example-ip-name")。静的 IP アドレスを割り当てる際は、addressliteral のいずれかを、一度に 1 つのフィールドごとに設定する必要があります。
  • LITERAL: 省略可。リテラル形式でインスタンスに割り当てる静的 IP アドレス(例: "130.211.181.55")。静的 IP アドレスを割り当てる際は、addressliteral のいずれかを、一度に 1 つのフィールドごとに設定する必要があります。
    • 指定されたリテラル IP アドレスがまだ予約されていない場合、MIG は対応する IP アドレスの予約を自動的に作成します。
    • 指定されたリテラル IP アドレスが予約されている場合、MIG ではインスタンスに予約が割り当てられます。
  • DELETE_RULE: 省略可。VM インスタンスが完全に削除された場合の、関連する静的アドレス リソースの処理方法を指定します。使用できるオプションは次のとおりです。

    • NEVER: デフォルト。静的 IP アドレスを削除しません。代わりに、インスタンスの削除時にアドレスの割り当てを解除し、アドレスは予約したままになります。
    • ON_PERMANENT_INSTANCE_DELETION: インスタンスがインスタンス グループから完全に削除されたときに、静的 IP アドレスの予約を削除します。たとえば、インスタンスを手動で削除する、またはグループのサイズを縮小する場合が考えられます。

    削除ルールの値に関係なく、インスタンスの自動修復、更新、再作成のオペレーションを実施する際に、グループは常にステートフル IP アドレスを保持します。

proxy-cluster という名前の MIG で実行されているプロキシ サーバー クラスタに、もう一つの VM インスタンスを追加する必要があります。proxy-node-03-ip という名前の静的内部 IP アドレスの予約を作成しており、新しいノードに割り当てる必要があります。ノードを後で削除しても、IP アドレスの予約は保持する必要があります。

regionInstanceGroupManagers.createInstances メソッドを呼び出して、追加のインスタンスを作成します。

POST https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-east1/instanceGroupManagers/proxy-cluster/createInstances

{
  "instances": [
    {
      "name": "proxy-node-03",
      "preservedState" : {
        "internalIPs": {
          "nic0" : {
            "ipAddress": {
              "address": "projects/example-project/regions/us-east1/addresses/proxy-node-03-ip"
            },
            "autoDelete": "NEVER"
          }
        }
      }
    }
  ]
}

このメソッドは、proxy-node-03 という名前のインスタンスを作成し、指定された proxy-node-03-ip という静的内部 IP アドレスをインスタンスに割り当てて、IP のステートフル構成を対応するインスタンスごとの構成に保存します。autoDelete フィールドは NEVER に設定されているため、インスタンスを後で削除しても IP は予約された状態で保持されます。

MIG で既存の VM 用の静的 IP アドレスを構成する

マネージド インスタンスの事前定義された静的 IP アドレスの設定や、ステートフル IP 構成の個別の更新は、たとえば次のように行うことができます。

  • MIG 内の既存のインスタンスに静的 IP アドレスを割り当てる。静的外部 IP の場合、このオペレーションにはインスタンスの更新が必要です。静的内部 IP の場合は、インスタンスの再作成が必要です。
  • すでに割り当てられている静的 IP アドレスの削除ルールを更新する。このオペレーションは、実行中のインスタンスを中断することなく行うことができます。

外部 IP アドレスを持たない既存のインスタンスに外部ステートフル IP を構成する場合、MIG は対応するネットワーク インターフェースに次のデフォルト値のアクセス構成を追加します。

"accessConfigs": [
  {
    "kind": "compute#accessConfig",
    "name": "External Nat",
    "natIP": "XX.XX.XX.XX",
    "networkTier": "PREMIUM",
    "type": "ONE_TO_ONE_NAT"
  }
]

gcloud

MIG で VM インスタンス用のステートフル IP アドレスを個別に構成するには、関連付けられたインスタンスごとの構成で、ステートフル IP 構成を追加または更新します。

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

  • --stateful-internal-ip: 特定のネットワーク インターフェースの静的内部 IP アドレスを設定する場合に指定します。
  • --stateful-external-ip: 特定のネットワーク インターフェースの静的外部 IP アドレスを設定する場合に指定します。
gcloud compute instance-groups managed instance-configs create INSTANCE_GROUP_NAME \
    --instance INSTANCE_NAME \
    --stateful-internal-ip address=ADDRESS[,interface-name=NI_NAME][,auto-delete=DELETE_RULE] \
    --stateful-external-ip address=ADDRESS[,interface-name=NI_NAME][,auto-delete=DELETE_RULE] \
    [--no-update-instance | --update-instance]
    [--instance-update-minimal-action MINIMAL_ACTION]

インスタンスにインスタンスごとの構成が存在する場合は、gcloud compute instance-groups managed instance-configs update コマンドで 1 つまたは複数の --stateful-internal-ip または --stateful-external-ip フラグを使用します。

gcloud compute instance-groups managed instance-configs update INSTANCE_GROUP_NAME \
    --instance INSTANCE_NAME \
    --stateful-internal-ip address=ADDRESS[,interface-name=NI_NAME][,auto-delete=DELETE_RULE] \
    --stateful-external-ip address=ADDRESS[,interface-name=NI_NAME][,auto-delete=DELETE_RULE] \
    [--no-update-instance | --update-instance]
    [--instance-update-minimal-action MINIMAL_ACTION]

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

  • INSTANCE_GROUP_NAME: MIG の名前。
  • INSTANCE_NAME: ステートフル IP アドレスを構成するインスタンスの名前。
  • NI_NAME: 省略可。ネットワーク インターフェース名。指定しない場合は、デフォルトで nic0 という名前のプライマリ ネットワーク インターフェースが使用されます。複数のネットワーク インターフェースがある場合は、各ネットワーク インターフェースの IP ごとにこのフラグを指定できます。
  • ADDRESS: 次のいずれかの形式でインスタンスに割り当てる静的 IP アドレス。
    • アドレス。静的 IP アドレスの予約の URL(例: "projects/example-project/regions/us-east1/addresses/example-ip-name")。
    • リテラル。例: "130.211.181.55"
      • 指定された IP アドレスがまだ予約されていない場合、MIG は対応する IP アドレスの予約を自動的に作成します。
      • 指定された IP アドレスが予約されている場合、MIG ではインスタンスに予約が割り当てられます。
    • そのインスタンスのインスタンスごとの構成でアドレスがすでに定義されている場合、このサブフラグは省略可能です。それ以外の場合は必須です。
    • 省略した場合、現在構成されているアドレスは変更されないままとなります。
  • DELETE_RULE: 省略可。VM インスタンスが完全に削除された場合の、関連する静的アドレス リソースの処理方法を指定します。使用できるオプションは次のとおりです。

    • never: デフォルト。静的 IP アドレスを削除しません。代わりに、インスタンスの削除時にアドレスの割り当てを解除し、アドレスは予約したままになります。
    • on-permanent-instance-deletion: インスタンスがインスタンス グループから完全に削除されたときに、静的 IP アドレスの予約を削除します。たとえば、インスタンスを手動で削除する、またはグループのサイズを縮小する場合が考えられます。
    • 省略した場合は、デフォルト値が新しいステートフル IP 構成に設定されます。既存の構成では、値は変更されません。

    削除ルールの値に関係なく、インスタンスの自動修復、更新、再作成のオペレーションを実施する際に、グループは常にステートフル IP アドレスを保持します。

  • --update-instance: (省略可。デフォルト。)。変更を直ちにインスタンスに適用します。--no-update-instance フラグを使用すると、変更は直ちに適用されず、後で更新を再作成またはインスタンスに適用するときに適用されます。

  • MINIMAL_ACTION: 省略可。インスタンスごとの構成の更新をインスタンスに適用するときに、最低でも指定されたアクションを実行します。--update-instance フラグと併用する必要があります。値は次のいずれかにする必要があります。

    • none: アクションなし。
    • refresh: インスタンスを停止せずに適用できる更新を適用します。
    • restart: インスタンスを停止してから再起動します。
    • replace: インスタンスを再作成します。

省略した場合は、更新に必要な最も影響の少ない操作が使用されます。

file-server というファイル サーバー インスタンスがあります。これは、fs-group と呼ばれるステートフル MIG 内の単一インスタンスです。このグループには、対応するインスタンスごとの構成があり、ステートフル データディスクが構成されています。ファイル サーバーは内部でしかアクセスできませんでしたが、現在は静的 IP アドレスを介して外部からファイル サーバーにアクセスする必要があるユーザーがいます。file-server-ip アドレスの予約を作成することで、静的外部 IP を予約しました。次に、この IP をファイル サーバー インスタンスに割り当てる必要があります。

次のコマンドを実行して、ファイル サーバー インスタンスのステートフル外部 IP を構成します。

gcloud compute instance-groups managed instance-configs update fs-group \
    --instance file-server \
    --stateful-external-ip interface-name=nic0,address="projects/example-project/regions/us-east1/addresses/file-server-ip",auto-delete=never \
    --update-instance

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

  1. file-server インスタンスのインスタンスごとの構成を更新します。
    1. file-server-ip アドレスの予約を示すステートフル外部 IP 構成を追加します。
    2. 既存のステートフル データディスクの構成は変更されないままにしておきます。
  2. --update-instance フラグが使用されているため、インスタンスごとの構成に対する更新が直ちに file-server インスタンスに適用されます。インスタンスが再作成され、file-server-ip 予約から静的外部 IP アドレスが割り当てられます。

REST

MIG で VM インスタンス用のステートフル IP を個別に構成するには、関連付けられたインスタンスごとの構成でステートフル IP 構成を追加または更新します。

指定したインスタンスにインスタンスごとの構成がまだ存在しない場合は、1 つ以上の IP アドレスのステートフル構成で instanceGroupManagers.updatePerInstanceConfigs メソッドまたは regionInstanceGroupManagers.updatePerInstanceConfigs メソッドを使用します。

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

{
  "perInstanceConfigs": [
    {
      "name": "INSTANCE_NAME",
      "preservedState" : {
        "internalIPs": {
          "NI_NAME" : {
            "ipAddress": {
              "address": "ADDRESS",
              "literal": "LITERAL"
            },
            "autoDelete": "DELETE_RULE"
          },
          ...
        },
        "externalIPs": {
          "NI_NAME" : {
            "ipAddress": {
              "address": "ADDRESS",
              "literal": "LITERAL"
            },
            "autoDelete": "DELETE_RULE"
          },
          ...
        },
        ...
      },
      "fingerprint: "FINGERPRINT"
    },
    ...
  ]
}

特定のインスタンスにインスタンスごとの構成がすでに存在する場合は、1 つ以上の IP アドレスのステートフル構成で instanceGroupManagers.patchPerInstanceConfigs メソッドまたは regionInstanceGroupManagers.patchPerInstanceConfigs メソッドを使用します。

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

{
  "perInstanceConfigs": [
    {
      "name": "INSTANCE_NAME",
      "preservedState" : {
        "internalIPs": {
          "NI_NAME" : {
            "ipAddress": {
              "address": "ADDRESS",
              "literal": "LITERAL"
            },
            "autoDelete": "DELETE_RULE"
          },
          ...
        },
        "externalIPs": {
          "NI_NAME" : {
            "ipAddress": {
              "address": "ADDRESS",
              "literal": "LITERAL"
            },
            "autoDelete": "DELETE_RULE"
          },
          ...
        },
        ...
      },
      "fingerprint: "FINGERPRINT"
    },
    ...
  ]
}

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

  • PROJECT_ID: リクエストのプロジェクト ID。
  • NAME: MIG の名前。
  • REGION: リージョン MIG の場合、MIG が配置されているリージョン。ゾーン MIG の場合は、regions/REGIONzones/ZONE に置き換え、MIG が配置されているゾーンを指定します。
  • INSTANCE_NAME: 必須。ステートフル IP を構成するインスタンスの名前。
  • NI_NAME: 必須。ネットワーク インターフェース名。プライマリ ネットワーク インターフェースの名前は nic0 です。複数のネットワーク インターフェースがある場合は、複数の NI_NAMES を指定できます。
  • ADDRESS: 省略可。静的 IP アドレスの予約の URL 形式でインスタンスに割り当てる静的 IP アドレス(例: "projects/example-project/regions/us-east1/addresses/example-ip-name")。静的 IP アドレスを割り当てる際は、アドレスかリテラルのいずれかを、一度に 1 つのフィールドごとに設定する必要があります。
  • LITERAL: 省略可。インスタンスに割り当てる静的 IP アドレス(リテラル形式)。例: "130.211.181.55"。静的 IP アドレスを割り当てる際は、アドレスかリテラルのいずれかを、一度に 1 つのフィールドごとに設定する必要があります。
    • 指定されたリテラル IP アドレスがまだ予約されていない場合、MIG は対応する IP アドレスの予約を自動的に作成します。
    • 指定されたリテラル IP アドレスが予約されている場合、MIG ではインスタンスに予約が割り当てられます。
  • DELETE_RULE: 省略可。VM インスタンスが完全に削除された場合の、関連する静的アドレス リソースの処理方法を指定します。使用できるオプションは次のとおりです。

    • NEVER: デフォルト。静的 IP アドレスを削除しません。代わりに、インスタンスの削除時にアドレスの割り当てを解除し、アドレスは予約したままになります。
    • ON_PERMANENT_INSTANCE_DELETION: インスタンスがインスタンス グループから完全に削除されたときに、静的 IP アドレスの予約を削除します。たとえば、インスタンスを手動で削除する、またはグループのサイズを縮小する場合が考えられます。
    • 省略した場合は、デフォルト値が新しいステートフル IP 構成に設定されます。既存の構成では、値は変更されません。

    削除ルールの値に関係なく、インスタンスの自動修復、更新、再作成のオペレーションを実施する際に、グループは常にステートフル IP アドレスを保持します。

  • FINGERPRINT: 省略可。指定された構成のフィンガープリント(すでに存在する場合)。楽観的ロックに使用されます。フィンガープリントが指定された値と異なる場合、オペレーションは失敗します。これは、インスタンスごとの構成が、最後に読み取られてから変更されたことを示します。最新のフィンガープリントを確認するには、リージョンまたはゾーン MIG の listPerInstanceConfigs メソッドの出力をご覧ください。fingerprint を省略すると、オペレーションはフィンガープリントの比較なしで処理を実行します。

updatePerInstanceConfigs メソッドと patchPerInstanceConfigs メソッドは、指定したインスタンスごとの構成を更新しますが、関連付けられたマネージド インスタンスにその構成の更新を適用しません。インスタンスを再作成または更新するように MIG に指示すると、インスタンスに変更が適用されます。更新を手動で適用して、インスタンスに変更を適用できます。

file-server というファイル サーバー インスタンスがあります。これは、fs-group と呼ばれるステートフル MIG 内の単一インスタンスです。このグループには、対応するインスタンスごとの構成があり、ステートフル データディスクが構成されています。ファイル サーバーは内部でしかアクセスできませんでしたが、現在は静的 IP アドレスを介して外部からファイル サーバーにアクセスする必要があるユーザーがいます。file-server-ip アドレスの予約を作成することで、静的外部 IP を予約しました。次に、この IP をファイル サーバー インスタンスに割り当てる必要があります。

新しいステートフル外部 IP で file-server のインスタンスごとの構成を更新するには、patchPerInstanceConfigs メソッドを呼び出します。

POST https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-east1/instanceGroupManagers/fs-group/patchPerInstanceConfigs

{
  "perInstanceConfigs": [
    {
      "name": "file-server",
      "preservedState" : {
        "externalIPs": {
          "nic0" : {
            "ipAddress": {
              "address": "projects/example-project/regions/us-east1/addresses/file-server-ip"
            },
            "autoDelete": "NEVER"
          }
        }
      }
    }
  ]
}

このメソッドは、file-server のインスタンスごとの構成にパッチを適用します。

  1. file-server-ip アドレスの予約を示すステートフル外部 IP 構成を追加します。
  2. 既存のステートフル データディスクの構成は変更されないままにしておきます。

構成の更新はまだ file-server VM インスタンスに適用されていません。構成の更新は、後でインスタンスを再作成する、または更新をインスタンスに適用するときに MIG によって適用されます。

インスタンスごとの構成の更新を file-server VM インスタンスに適用するには、インスタンスの regionInstanceGroupManagers.applyUpdatesToInstances メソッドを呼び出します。

POST https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-east1/instanceGroupManagers/gs-group/applyUpdatesToInstances

{
  "instances": ["/zones/us-east1-b/instances/file-server"]
}

このメソッドでは、構成した静的外部 IP アドレスが file-server-ip 予約からマネージド インスタンスに割り当てられます。このメソッドは、file-server インスタンスを更新して外部 IP アドレスを割り当てます。

ステートフル IP 構成で autoDeleteNEVER に設定されているため、後でインスタンスを削除しても IP は予約された状態で保持されます。

MIG 内の既存の VM から静的 IP アドレスの関連付けを解除する

既存の VM と静的 IP アドレスの関連付けを解除し、VM のネットワーク インターフェースをエフェメラルにすることが必要な場合があります。これは次のような場合に役立ちます。

  • 静的 IP アドレスに依存しないようにアプリを再設計する。
  • 誤って IP をステートフルに構成したため、元に戻す必要がある。

MIG で既存の VM の静的 IP アドレスとの関連付けを解除し、個々の VM の IP アドレスをエフェメラルにするには、関連付けられたインスタンスごとの構成から IP のステートフル構成を削除するか、他の状態が含まれていない場合は、インスタンスごとの構成全体を削除します。変更を適用すると、次のような影響があります。

  • IP アドレスはインスタンスでアクティブのままですが、ステートフルではなくなります。
  • インスタンスを再作成または更新する場合、またはインスタンスが自動修復される場合に、MIG は関連付けられた静的 IP アドレスの予約を割り当て解除し、エフェメラル アドレスを自動的に割り当てます。
  • 割り当て解除後も、静的 IP アドレスは予約された状態で保持されます。

明示的に選択しない限り、インスタンスごとの構成からステートフル IP 構成を削除しても、実行中の VM インスタンスは中断されません。

詳細については、次のリソースをご覧ください。

gcloud

関連するインスタンスごとの構成からステートフル IP 構成を削除するには、--remove-stateful-internal-ips フラグまたは --remove-stateful-external-ips フラグを指定して gcloud compute instance-groups managed instance-configs update コマンドを使用します。

gcloud compute instance-groups managed instance-configs update INSTANCE_GROUP_NAME \
    --instance INSTANCE_NAME \
    --remove-stateful-internal-ips NI_NAME[,NI_NAME,...] \
    --remove-stateful-external-ips NI_NAME[,NI_NAME,...]
    [--no-update-instance | --update-instance] \
    [--instance-update-minimal-action MINIMAL_ACTION]

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

  • INSTANCE_GROUP_NAME: MIG の名前。
  • INSTANCE_NAME: 必須。ステートフル IP 構成を削除するインスタンスの名前。
  • NI_NAME: 必須。ネットワーク インターフェース名。プライマリ ネットワーク インターフェースの名前は nic0 です。複数のネットワーク インターフェースがある場合は、複数の NI_NAMES を指定できます。
  • --update-instance: (省略可。デフォルト。)。変更を直ちにインスタンスに適用します。--no-update-instance フラグを使用すると、変更は直ちに適用されず、後で更新を再作成またはインスタンスに適用するときに適用されます。
  • MINIMAL_ACTION: 省略可。インスタンスごとの構成の更新をインスタンスに適用するときに、最低でも指定されたアクションを実行します。このフラグは、--update-instance フラグと組み合わせることによってのみ使用できます。値は次のいずれかにする必要があります。

    • none: アクションなし。
    • refresh: インスタンスを停止せずに適用できる更新を適用します。
    • restart: インスタンスを停止してから再起動します。
    • replace: インスタンスを再作成します。

    省略した場合は、更新に必要な最も影響の少ない操作が使用されます。

アプリケーションは、MIG 内に存在する example-group という VM インスタンスの特定の公開静的外部 IP アドレスを介してユーザーに公開されています。MIG の前面にロードバランサをデプロイし、ロードバランサを介してトラフィックをマネージド VM に転送することによって、サービスを再設計しました。静的外部 IP アドレスを保持する必要がなくなり、VM の外部 IP アドレスをエフェメラルにすることを考えています。

MIG 内の VM のステートフル外部 IP アドレスをエフェメラルにするには、インスタンスごとに次のコマンドを実行します(例: node-1)。

gcloud compute instance-groups managed instance-configs update example-group \
    --instance node-1 \
    --remove-stateful-external-ips nic0 \
    --update-instance

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

  1. nic0 ネットワーク インターフェース内の外部 IP アドレスのステートフル構成を node-1 のインスタンスごとの構成から削除します。
  2. --update-instance フラグが含まれているため、インスタンスごとの構成の更新がすぐに node-1 VM インスタンスに適用されます。VM インスタンスは中断されず、同じ IP からの提供を継続しますが、ステートフルではなくなります。MIG はマネージド インスタンスの preservedStateFromConfig から静的 IP 予約への参照を削除し、外部 IP アドレスをエフェメラルとして扱います。MIG では、その後のインスタンスの再作成、更新、自動修復イベントで外部 IP が自動的に割り当てられます。
  3. 割り当て解除後も、元の静的 IP は予約されたままになります。不要になった IP は解放できます。

REST

関連するインスタンスごとの構成からステートフル IP 構成を削除するには、instanceGroupManagers.patchPerInstanceConfigs メソッドまたは regionInstanceGroupManagers.patchPerInstanceConfigs メソッドを使用します。

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

{
  "perInstanceConfigs": [
    {
      "name": "INSTANCE_NAME",
      "preservedState" : {
        "internalIPs": {
          "NI_NAME" : null
        },
        "externalIPs": {
          "NI_NAME" : null
        }
      },
      "fingerprint: "FINGERPRINT"
    },
    ...
  ]
}

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

  • PROJECT_ID: リクエストのプロジェクト ID。
  • NAME: MIG の名前。
  • REGION: リージョン MIG の場合、MIG が配置されているリージョン。ゾーン MIG の場合は、regions/REGIONzones/ZONE に置き換え、MIG が配置されているゾーンを指定します。
  • INSTANCE_NAME: 必須。ステートフル IP 構成を削除するインスタンスの名前。
  • NI_NAME: 必須。ネットワーク インターフェース名。プライマリ ネットワーク インターフェースの名前は nic0 です。複数のネットワーク インターフェースがある場合は、複数の NI_NAMES を指定できます。
  • FINGERPRINT: 省略可。指定された構成のフィンガープリント(すでに存在する場合)。楽観的ロックに使用されます。フィンガープリントが指定された値と異なる場合、オペレーションは失敗します。これは、インスタンスごとの構成が、最後に読み取られてから変更されたことを示します。最新のフィンガープリントを確認するには、リージョンまたはゾーン MIG の listPerInstanceConfigs メソッドの出力をご覧ください。fingerprint を省略すると、オペレーションはフィンガープリントの比較なしで処理を実行します。

patchPerInstanceConfigs メソッドは、指定されたインスタンスごとの構成を更新しますが、その構成の更新を関連するマネージド インスタンスに適用することはありません。インスタンスを再作成または更新するように MIG に指示すると、インスタンスに変更が適用されます。更新を手動で適用して、インスタンスに変更を適用できます。

アプリケーションは、MIG 内に存在する example-group という VM インスタンスの特定の公開静的外部 IP アドレスを介してユーザーに公開されています。MIG の前面にロードバランサをデプロイし、ロードバランサを介してトラフィックをマネージド VM に転送することによって、サービスを再設計しました。静的外部 IP アドレスを保持する必要がなくなり、VM の外部 IP アドレスをエフェメラルにすることを考えています。

MIG 内の VM のステートフル外部 IP アドレスをエフェメラルにするには、インスタンスごとに次のメソッド(node-1 など)を実行し、ネットワーク インターフェースのステートフル構成に null 値を指定します。

POST https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-east1/instanceGroupManagers/example-group/patchPerInstanceConfigs

{
  "perInstanceConfigs": [
    {
      "name": "node-1",
      "preservedState" : {
        "externalIPs": {
          "nic0" : null
        }
      }
    }
  ]
}

このメソッドでは、node-1 のインスタンスごとの構成から、nic0 ネットワーク インターフェース内のステートフル IP アドレスの構成が削除されます。構成の更新はまだ node-1 VM インスタンスに適用されていません。MIG では、次回のインスタンスの再作成または更新時に構成の更新が適用されます。

インスタンスごとの構成の更新を node-1 VM インスタンスに適用するには、インスタンスの regionInstanceGroupManagers.applyUpdatesToInstances メソッドを実行します。

POST https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-east1/instanceGroupManagers/example-group/applyUpdatesToInstances

{
  "instances": ["/zones/us-east1-c/instances/node-1"]
}

MIG では、node-1 インスタンスの preservedStateFromConfig フィールドから静的 IP の予約への参照が削除され、IP アドレスがエフェメラルとして扱われます。MIG では、その後のインスタンスの再作成、更新、自動修復イベントで外部 IP が自動的に割り当てられます。

割り当て解除後も、元の静的 IP は予約されたままになります。不要になった IP は解放できます。

ステートフル構成を削除する

MIG 内のすべての VM のステートフル ポリシーから構成を削除するには、次のドキュメントをご覧ください。

MIG 内に存在する特定の VM のインスタンスごとの構成から構成を削除するには、次のドキュメントをご覧ください。

未使用の静的 IP アドレスの削除

グループ内のマネージド インスタンスのステートフル IP アドレスを構成する場合は、インスタンスを完全に削除した際に、関連付けられた静的 IP アドレスの予約を手動または自動のどちらで解放するかを選択できます。

  • インスタンスを完全に削除する際に静的 IP アドレスの予約を自動的に開放するには、autoDelete パラメータを ON_PERMANENT_INSTANCE_DELETION に設定します。
  • 静的 IP アドレスの予約を手動で開放するには、autoDelete パラメータを NEVER に設定します。未使用の静的 IP アドレスの予約を削除するには、たとえば、不要な料金を回避するために、次のドキュメントをご覧ください。

関連付けられた IP 予約が削除されないように MIG に指示した場合は、対応するインスタンスまたは MIG が存在しなくなった後に、静的 IP アドレスが予約済みの状態で保持されます。

フィードバック

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

次のステップ