觀點 · 資訊分享
Google Cloud 便宜主機被收回前,現在可以多給 2 分鐘:Spot VM 支援 120 秒預告
Google Cloud 讓 Spot VM 在建立時可以設定 120 秒的「收回預告」,在被搶占前多出最多 120 秒處理收尾。預設仍是 0 秒,要靠關機腳本在最多 30 秒的關機期間內處理。
- 發布
- 2026-09-30
- 篇幅
- 約 4 分鐘 · 1,627 字
- 結構
- 7 節 + 4 題常見問題
- 標籤

一句話看懂:Google Cloud 的便宜主機 Spot VM 被收回前,現在可以設定先給 120 秒預告,讓程式有時間存檔、交接工作。

先用白話講:Spot VM 是什麼?
想像共享辦公室的「臨時座位」:平常空著的位子便宜出租,但只要正式會員要用,你就得馬上讓座。
Spot VM 就是雲端上的臨時座位。Google Cloud 把閒置的運算資源便宜出租,官方文件寫價格最多可以比一般價格低 91%。代價是 Google 需要這些資源時,可以隨時把機器收回,這叫搶占(Preemption)。
問題在於收回得很突然。以前預設沒有預告時間,只能靠「關機腳本」在最多 30 秒的關機期間內趕快收尾,資料多一點就來不及。
發生什麼事
Google Cloud 在 9 月 30 日的 Compute Engine 更新紀錄中宣布:建立 Spot VM 時,可以設定 120 秒的搶占預告,這項功能已是正式版(GA)。官方的說法是,這讓 Spot VM 上的工作負載最多多出 120 秒來處理搶占。
兩種模式差在哪
| 比較 | 預設(0 秒) | 設定 120 秒 |
|---|---|---|
| 誰負責收尾 | 關機腳本 | 工作負載自己 |
| 關機腳本 | 必須 | 選用 |
| 可用時間 | 關機期間最多 30 秒 | 預告最多 120 秒,之後才進入關機 |
搶占發生時,Compute Engine 會把 VM 的 metadata 中 preempted 值設為 TRUE。設定 120 秒時,程式要自己監看這個值,收到訊號後開始存檔、回報進度、把工作交給其他機器。
給開發者的技術細節
用 gcloud 建立時加上 --preemption-notice-duration:
gcloud compute instances create my-spot-vm \
--zone=asia-east1-b \
--provisioning-model=SPOT \
--preemption-notice-duration=120s
- gcloud 的值只能是
120s或0s(預設) - 用 API 時,在
scheduling裡帶preemptionNoticeDuration欄位 - 主控台在選擇 Spot 後的「VM provisioning model advanced settings」裡設定
- 官方提醒:要把既有 Spot 工作改用這個模式,記得處理好程式內的搶占邏輯,並實際測試一次
- 其他限制不變:Spot VM 不能即時遷移、主機事件後不會自動重啟,也不在 Compute Engine SLA 範圍內
上面的指令依官方範例改寫,區域與名稱請換成自己的。
我的看法
Spot VM 很適合跑「被打斷也沒關係、重跑一次就好」的工作,例如影片轉檔、批次產報表、AI 模型的離線處理。省下來的錢很可觀,但很多團隊卡在「被收回時來不及存檔」,最後乾脆不用。
多了 120 秒,大部分的工作都夠存一次進度。我會建議:程式每處理完一小段就存一次進度,再配合這 120 秒做最後收尾,這樣就算被收回,損失也只有一小段。但要記得,Spot 本質上就是不保證的資源,正式對外服務的網站還是別放在上面。
名詞小辭典
- Spot VM:用閒置資源出租的便宜虛擬機,可能隨時被收回。
- 搶占(Preemption):雲端廠商因為資源需求,把 Spot VM 收回停止。
- Metadata(中繼資料):VM 可以查詢的一組設定與狀態資訊,搶占訊號也放在這裡。
- 關機腳本(Shutdown script):VM 關機時自動執行的程式,常用來收尾。