Spot VM を実際に動かしてプリエンプトされるまで観測してみた

Spot VM を実際に動かしてプリエンプトされるまで観測してみた

Google Cloud の Spot VM は低価格が魅力ですが、プリエンプションのタイミングは予測できません。今回、同じ構成の Spot VM を 3 回作成し、プリエンプションされるまでの稼働時間を実際に計測してみました。
2026.09.04

クラスメソッドオペレーションズ、テクニカルサポートの村上です。

Spot VM は標準 VM より低価格で利用できる一方、Google Cloud によって任意のタイミングでプリエンプトされる可能性があります。そこで今回は、同じ構成の Spot VM を 3 回作成し、それぞれプリエンプションが発生するまでの経過時間を観測しました。

Spot VM とプリエンプションのおさらい

  • Spot VM は、Compute Engine の余剰キャパシティを低価格で利用するプロビジョニングモデル
  • Google Cloud がキャパシティを必要とした場合などに、任意のタイミングでプリエンプトされる
  • SLA の対象外
  • ユーザーが制限時間を設定しない限り、Spot VM に最小・最大稼働時間はない
  • プリエンプトされる時刻は予測・指定できない
  • プリエンプション時の終了アクションは以下の2種類
    • 停止
    • 削除

検証に関する注意点

Spot VM のプリエンプションが発生するかどうかは、ゾーン、時間帯、マシンタイプ、Google Cloud のリソース状況などによって異なります。そのため、何時間または何日稼働するかは事前に分かりません。
なお、今回の検証においては、Spot VM を作成してから 48 時間以上の稼働を確認した場合、手動で Spot VM を停止します。

Spot VM をコンソールから作成する

Google Cloud コンソールから Spot VM を作成します。

  1. コンソール左ペインから「Compute Engine」を選択した後に、「VM インスタンス」をクリックします
    2026-08-31_13h55_02

  2. 画面上部の「インスタンスを作成」をクリックします
    2026-08-31_13h56_17

  3. 名前は「spot-vm-test」とし、リージョンは「東京リージョン」を選択します
    2026-08-31_14h00_55

  4. プロビジョニングモデルに「Spot」を選択し、VM の終了時は「停止」するようにします
    2026-08-31_14h03_04

  5. Spot VM インスタンスが作成できました
    2026-08-31_14h30_02

  6. Spot VM の作成日時は、2026/8/31 14:04:55(JST) です
    2026-08-31_14h09_58

構成をまとめると、以下のとおりです。

項目 設定値
インスタンス名 spot-vm-test
リージョン / ゾーン asia-northeast1(東京)/ asia-northeast1-b
マシンタイプ e2-small
ブートディスク Debian 13
VM プロビジョニング モデル スポット
VM の終了時 停止

Spot VM が停止したことを確認する

VM の作成から約 37 分後、インスタンスが停止していることを確認しました。

2026-08-31_14h45_13

システムイベント監査ログから停止原因を確認する

システムイベント監査ログを用いて、Spot VM の停止原因がプリエンプトによるものかを確認します。

2026-08-31_14h49_45

{
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "status": {
      "message": "Instance was preempted."
    },
    "authenticationInfo": {
      "principalEmail": "system@google.com"
    },
    "serviceName": "compute.googleapis.com",
    "methodName": "compute.instances.preempted",
    "resourceName": "projects/**************/zones/asia-northeast1-b/instances/spot-vm-test",
    "request": {
      "@type": "type.googleapis.com/compute.instances.preempted"
    }
  },
  "insertId": "gp6d1ze5y1xm",
  "resource": {
    "type": "gce_instance",
    "labels": {
      "zone": "asia-northeast1-b",
      "instance_id": "4552089012302034328",
      "project_id": "**************"
    }
  },
  "timestamp": "2026-08-31T05:41:47.425475Z",
  "severity": "INFO",
  "labels": {
    "compute.googleapis.com/root_trigger_id": "62978880-c6e6-4fad-8b83-115d3a308f3e"
  },
  "logName": "projects/**************/logs/cloudaudit.googleapis.com%2Fsystem_event",
  "operation": {
    "id": "systemevent-1788154901865-65a5141baa2a1-41ec4b41-22885580",
    "producer": "compute.instances.preempted",
    "first": true,
    "last": true
  },
  "receiveTimestamp": "2026-08-31T05:41:48.238428912Z"
}

以下のフィールドから、ユーザーによる手動停止ではなく、Compute Engine によるプリエンプションで停止したことを確認できました。

  • methodName が compute.instances.preempted
  • principalEmail が system@google.com
  • status.message が Instance was preempted.

今回の Spot VM の稼働時間は、約 37 分でした。

全 3 回の観測結果

上記と全く同じ手順で Spot VM をあと 2 回作成して稼働時間を計測したところ、以下のとおりとなりました。

回数 VM 作成時刻(JST) プリエンプション時刻(JST) 観測上の経過時間
1 回目 2026/08/31 14:04:55 2026/08/31 14:41:48 約 37 分
2 回目 2026/09/01 06:24:37 2026/09/01 16:37:45 約 10 時間 13 分
3 回目 2026/09/02 08:05:06 手動での強制停止 48時間以上

各試行では、前回の VM を削除した後、同じゾーン、マシンタイプ、OS、ディスク設定で新しい Spot VM を作成しました。VM 上ではワークロードを実行せず、アイドル状態で待機させました。
3 回目の計測では、48 時間以上の稼働が確認できたため、手動で VM を停止しました。

まとめ

今回は、同じゾーンとマシンタイプで Spot VM を 3 回作成し、プリエンプションが発生するまでの経過時間を確認しました。
結果は約 37 分、約 10 時間 13 分、48 時間以上となり、同じ構成でも稼働時間に大きなばらつきがあることを確認できました。
短時間でプリエンプトされる可能性もある Spot VM ですが、使い方によってはコスト削減の有効な手段になり得そうです。

なお、終了アクションを「停止」にした場合、VM のコンピューティング料金は停止しますが、ブートディスクなどのストレージ料金が継続する点、ご注意ください。

この記事がどなたかのお役に立てば幸いです。

参考

この記事をシェアする

関連記事