GCP帳號代充值 GCP自動定時開關機腳本:每天下班自動關機幫你省下一半月租
第一章:省錢不是口號,是可被執行的流程
在雲端,成本常常不是「大頭」突然暴增,而是「小錢」每天照常發生。最典型的場景,就是你把一台或多台虛擬機開著,等到晚上下班才想起要關機。一次兩次也許不痛,但如果你有測試環境、內部服務、資料處理節點,長期累積的差額,會比你想像更接近「半個月租」的級別。
GCP帳號代充值 GCP 的彈性能力很強,但它也讓人容易忽略管理紀律:你覺得關機麻煩,所以乾脆不關;你覺得重啟會影響服務,所以不敢關;你把注意力放在業務,卻把成本風險交給「之後再說」。真正能省錢的做法,是把開關機變成流程:固定時間啟動、固定時間關閉,並把例外處理做完整。
本文討論的核心是:用 GCP 的自動定時腳本,讓每天下班自動關機,必要時也能自動開機。你不需要把環境全部重構,不需要引入複雜平台。你只要做幾件事:清楚知道哪些資源要管、用可靠的排程去觸發、用最小權限給腳本授權、最後用監控確認真的有執行到。
GCP帳號代充值 第二章:先想清楚,你要省的是哪一種「月租」
很多人一提「省半個月租」就直覺想到虛擬機的停機費,但在 GCP 上,真正會持續花錢的地方不只一項。你要先盤點,否則腳本寫得再漂亮,也只是省到一小部分。
2.1 可能受益的資源類型
通常最值得納入自動控制的,是會在「機器狀態」上直接影響計費的部分,例如:
- Compute Engine 虛擬機(停機/刪除會影響成本;常見做法是停機或定時刪除後再重建)。
- 某些持續運行的工作負載節點(如果你能用調度重啟服務,成本下降會很明顯)。
- 帶有持久磁碟的系統:磁碟通常停機仍可能計費,所以要確認你是「只停機」還是「也處理磁碟策略」。
另外,還要注意網路、負載平衡、快照、儲存類型等可能與「是否停機」沒有直接對應。你要把期待管理好:自動關機主要省的是運算成本,未必會把所有雲端費用歸零。
2.2 你真的需要「每天都開」嗎
每天固定開機,會讓成本省一半左右,但你還可以省得更多,例如:
- 只在工作日開機(週一到週五)。
- 使用更精準的時段(例如凌晨不開,或遇到延後下班就例外)。
- 對測試環境採用較短運行窗口。
自動化的價值不在於「一天省一次」,而在於「你把決策變成規則」,之後交給系統執行。當你開始想得更精細,節省比例會自然上升。
第三章:架構選擇——腳本要放在哪裡跑
在 GCP 上,你要考慮的是:排程怎麼觸發?腳本怎麼執行?憑證怎麼管理?這幾點決定你最後是否穩定。
3.1 常見做法:Cloud Scheduler + 觸發服務
最常見、也最穩的組合是:
- Cloud Scheduler:負責按時間觸發。
- Cloud Functions 或 Cloud Run:接收觸發並執行關機/開機邏輯。
- 服務帳號(Service Account):提供最小權限,讓腳本能操作特定 VM。
這種模式的優點是:你不需要一直有一台機器在背景跑腳本;排程與執行的責任分離,出問題好排查。
3.2 另一種方式:直接用虛擬機跑 cron(不建議)
你當然可以在一台長駐 VM 上跑 cron,時間到了就用 gcloud 去停機。但這會引入新的管理點:那台「排程機器」本身也要計費、也要維護、也可能因權限或網路策略失效。當你的目標是省錢,反而在關鍵環節增加另一筆成本與故障來源。
除非你已經有長駐節點且完全可靠,否則用 Cloud Scheduler + 函數/容器更符合「低維護」的精神。
第四章:設定策略——時區、例外與安全邊界
自動關機看似簡單,但最容易翻車的地方就在細節。你要先把策略定清楚,讓腳本的行為在可預期的範圍內。
4.1 時區:別讓你的「晚上六點」變成「凌晨六點」
Cloud Scheduler 與資源所在地的時區可能不一致。你必須明確選擇時區,並在一開始就確認一次執行時間。建議做法:
- 明確指定 Scheduler 的時區(例如使用台北時間)。
- 在部署後立刻用「很快的一次觸發」測試,例如設定隔幾分鐘就觸發。
- 若你有多區域或跨專案,仍需保持同一套規則。
4.2 例外處理:臨時加班不是每次都能靠人記住
自動化最怕「人忘了取消」。為了避免你在臨時加班或緊急發布時被自動關機打斷,需要有例外機制。常見方式是:
- 用標籤(label)標記「保留運行」。例如 label=keepalive=true 的 VM 不參與關機。
- 用標籤或特定狀態檔:當你需要臨時保留,先調整標籤,腳本就跳過。
- 保留緊急手動覆蓋:遇到特殊情況,允許你隨時開啟並關閉排程。
重點是:例外要「可被系統判斷」,而不是「靠人回頭做記憶」。
4.3 安全邊界:只操作你允許的資源
腳本最怕權限過大或條件過於寬鬆。建議你採用「白名單」思路:
- 指定 VM 名稱清單或使用特定 label 的資源集合。
- 限制到特定 zone/region。
- 只允許對指定專案(project)執行。
當你未來新增 VM 時,如果它沒有相同的 label,就不會被納入控制範圍。這能避免新服務一上線就被你自動關機。
GCP帳號代充值 第五章:腳本邏輯——更像工程,而不是一次性命令
不管你用 Python、Node.js 或其他語言,核心邏輯都類似:接收觸發事件、找出目標 VM、判斷狀態、執行 stop/start、最後回傳結果並寫入日誌。
5.1 建議的輸入與輸出
輸入可以是環境變數或事件參數,例如:
- MODE:start 或 stop
- PROJECT_ID、ZONE
- LABEL_SELECTOR:例如 shutdownSchedule=workday
- EXCLUDE_SELECTOR:例如 keepalive=true
輸出則需要做到「可追蹤」。至少要包含:
- 本次要處理的 VM 清單
- 成功/失敗的結果
- 失敗原因(例如權限不足、資源不存在、API 逾時)
5.2 判斷狀態,避免重複操作
stop 之前你可以檢查 VM 是否已關機;start 之前檢查是否已開機。這不只是省 API 次數,更能避免某些情況下因重複操作造成的異常。
GCP帳號代充值 例如:
- 如果 VM 已經是 TERMINATED,就不重複 stop。
- 如果 VM 正在啟動或停止中,腳本可選擇跳過或等待,但要有超時控制。
5.3 併發策略:不要把 API 打爆
如果你有很多 VM,全部同時呼叫 stop 可能觸發速率限制或讓執行時間超時。比較穩的做法:
- 限制並發,例如每次最多處理 N 台。
- 對每台 VM 設置重試策略(但要避免無限重試)。
- 確保函數/容器的最大執行時間足夠。
自動化要能在「規模上」穩定,而不是只在 1 台 VM 時很好用。
第六章:排程設計——把「每天關機」做成兩條規則
一個完整的自動化至少包含兩個排程:下班關機、上班開機。即使你只想做下班關機,也建議提前把開機流程預留,避免你之後要手動開機而打破流程。
6.1 下班關機排程
排程條件通常是工作日:週一到週五。你可以設定例如:
- 時間:18:00(依你的時區設定)
- 觸發:呼叫 stop 模式
- 條件:匹配特定 label 的 VM;排除 keepalive=true
你也可以加上假日例外,但這會需要更進階的日曆管理。若你剛開始,先用工作日規則跑起來,之後再逐步補強。
6.2 上班開機排程
同理,你可以設定:
- 時間:09:00(或你的實際開工時間)
- 觸發:呼叫 start 模式
- 條件:同樣 label 選擇器
有些團隊選擇只在特定條件下才開機,例如只開測試環境或只開特定專案。這取決於你想控制的範圍。
6.3 如何測試而不破壞真實服務
剛上線時最怕「測試剛好打到正式環境」。建議你建立測試標籤與測試專案:
- 先把幾台 VM 加上 label 但仍在較低風險的環境。
- 用臨時排程在幾分鐘後觸發,觀察結果。
- 確認日誌與錯誤回饋清楚,再上工作日固定排程。
第七章:權限與授權——最小權限才能長期穩定
很多人自動化失敗不是因為腳本寫錯,而是權限沒處理好。你需要讓執行環境具備操作 Compute Engine VM 的權限,但又不能太寬。
7.1 服務帳號與角色
建議流程:
- GCP帳號代充值 為自動開關機建立獨立 Service Account。
- 授予能對 Compute Engine 執行必要操作的角色。
- 盡量限制在特定專案或資源範圍。
你要的不是「管理員」,而是可以 start/stop 的最小權限。實務上,角色集合會依你的實作方式(使用 API 還是 gcloud)而略有差異,但總原則是一樣:越精準越好。
7.2 網路與身份:避免「能跑在本機、上雲就死」
如果你用的不是純 API 呼叫,而是依賴某些外部資源(例如存取 secret、連內網服務),要確認執行環境有足夠的網路路由與身份設定。若只是控制 VM start/stop,通常不需要進到內網,避免複雜網路依賴是更好的工程選擇。
第八章:日誌與監控——省錢方案要能被驗證
自動關機最怕「沒關到卻沒人知道」。所以你要把監控和告警當成系統的一部分。
8.1 每次執行都要留下可追蹤資訊
建議你在每次觸發後都記錄:
- 觸發時間、模式(start/stop)
- 本次命中的 VM 清單
- GCP帳號代充值 每台 VM 的動作結果與錯誤訊息
- 整體成功率(例如成功 12/15 台)
這樣你就能在月租數字異常時回溯原因:到底是「排程沒跑」還是「API 失敗」。
8.2 建立告警規則:至少要有兩種告警
你可以用兩類告警覆蓋大部分問題:
- 排程觸發失敗或未觸發(Cloud Scheduler 的狀態告警)。
- 執行結果顯示失敗率偏高(例如 stop 模式成功率低於某個門檻)。
這樣你不用每天手動檢查 VM 狀態,也不必等到帳單出來才發現問題。
第九章:常見坑位與修正策略
你不太可能一次就完全不踩坑。下面是實務上最常遇到的狀況,以及比較務實的修正方向。
9.1 時間不對、關機太早或太晚
通常是時區配置錯誤或排程時間理解偏差。修正方式:
- 檢查 Scheduler 的時區設定。
- 在上線前用短週期測試。
- 對照實際日誌中的觸發時間與期望時間。
9.2 VM 被跳過或沒被控制
多半是 label 選擇器不匹配或 exclude 條件過寬。修正方式:
- 先列出「預期會被控制」的 VM 標籤。
- GCP帳號代充值 在測試模式下只做列印不做操作,確認命中清單。
- GCP帳號代充值 確保新 VM 上線時有正確 label。
9.3 腳本執行超時
原因可能是 VM 數量太多、併發太高或 API 呼叫等待過久。修正方式:
- 限制併發,分批處理。
- 設定單次執行的最大數量。
- 調整函數/容器的最大執行時間。
9.4 權限不足,只有部分操作失敗
修正方式:
- 檢查 Service Account 的角色與授權範圍。
- 確認是否在正確的專案/資源階層。
- 對錯誤訊息做清楚記錄,避免「吞錯」導致你以為成功。
第十章:把它落地——你可以照著做的上線流程
GCP帳號代充值 最後用一個比較像工程交付的流程,讓你能真正把自動關機跑起來,而不是停留在想法。
10.1 第一步:資源盤點
列出你希望納入控制的 VM,包含:
- 專案、區域/zone
- 用途(測試/內部服務/資料節點)
- 是否需要例外保留(例如永遠要跑的服務)
10.2 第二步:標籤規劃(讓規則可維護)
建議你至少建立兩個 label:
- shutdownSchedule=workday(或類似含義的值)
- keepalive=true(僅在需要例外時加上)
當團隊新增 VM 時,他們只要知道:要被自動控制就加上第一個 label;不想被關機就加上第二個 label。
10.3 第三步:部署執行端(函數/容器)
實作兩個模式:start 與 stop。每次執行都要輸出清單與結果,並把錯誤完整記錄。
10.4 第四步:建立兩條排程(測試先跑,再固定)
先用短週期排程測試:
- GCP帳號代充值 設定幾分鐘後 stop,觀察 VM 是否真的關機。
- 設定幾分鐘後 start,觀察是否真的開機。
確認無誤後,再改成每天固定時間的工作日排程。
10.5 第五步:加上告警規則
至少做到:
- 排程觸發失敗告警
- 執行結果成功率低於門檻告警
這樣你會在問題變大之前就被提醒。
第十一章:成本效果怎麼評估,才不會自我感覺良好
自動關機的價值最好用數字講話,但評估也要公平。你可以用兩種方式:
11.1 用區間對比
選擇一個觀察區間,例如上線前兩週與上線後兩週,對比:
- Compute Engine 運算成本
- 若有納入其他資源,再對比總費用,但要記得它們可能與停機無直接關聯
用區間對比比用單月更可靠,因為雲端費用受資源使用模式影響很大。
11.2 用模型估算(作為合理驗證)
假設你原本是每天 24 小時開著,現在工作日只開 9 小時、其餘 15 小時關機,那運算成本理論上會下降到約 37.5% 左右(簡化假設)。如果你還包含週末都關機,那下降比例會更高。
當然,現實會有偏差,例如你需要加班、服務不在你預期時段內活躍、或有其他成本項。但這種模型能幫你判斷「省下來的幅度是否合理」。如果你算出來該下降 50%,帳單卻只下降 5%,那多半是控制範圍或排程沒有生效。
第十二章:把自動關機變成團隊文化,而不是一次性專案
最後談一個容易被忽略的點:自動化要成功,不能只靠你一個人。你要讓整個團隊理解「哪些服務要被管理」以及「例外怎麼做」。
當新成員加入,如果他們不知道標籤規則,新的 VM 就會不受控制;當臨時需求出現,如果沒有例外機制,系統就會和人打架。把規則寫成可執行的標準(標籤、排程、例外),比寫一篇好看的說明文件更有效。
你原本以為是「每天下班關機麻煩」,結果做成自動化後,省下的不只是電費與運算成本,更是一種時間與注意力的回收:你不用每天想「今天要不要手動關」,也不用每週去查「到底誰還在跑」。這就是自動定時開關機腳本真正帶來的價值。
GCP帳號代充值 當你把它做穩、做可靠,你會發現所謂「省一半月租」不是誇張的行銷話術,而是管理紀律在雲端的直接回報。從一個小規則開始,讓系統替你做該做的事。

