GCP 成本優化完全指南 2026:帳單分析與省錢技巧
TL;DR: 【2026 最新版】學會 GCP 成本優化三大支柱:善用 Gemini AI 輔助的 Billing Reports 分析帳單、掌握 CUD(Committed Use Discount,承諾用量換折扣)與 SUD(Sustained Use Discount,用越多自動折越多)的折扣策略、運用 Spot VM 最高 91% 折扣。手把手帶你從「看不懂帳單」到「精準控管每一塊錢」。
讀這篇前你只要知道:GCP 的 VM(虛擬機)、儲存、網路大概各自在收什麼錢就夠了。文章後段會出現 BigQuery SQL、Cloud Functions、GKE YAML 這些東西,那些屬於「實務加碼」、不是 ACE 必考範圍,看到時不用緊張 — 我會標出來哪些可以先跳過。
為什麼 GCP 成本容易失控?5 個常見陷阱
場景一:開發測試環境忘記關閉 週五下班前你開了 10 台 n1-standard-8 VM 跑壓測,週末忘了關,週一一看已經燒掉 $500 起跳。
場景二:選錯 Storage Class 不常存取的備份檔案丟在 Standard Storage,儲存費每月就多付 5-10 倍。
場景三:跨區域傳輸費爆表
application 在 us-central1,database 卻在 asia-east1,每月跨區傳輸費就佔了帳單的 30%。
場景四:沒善用折扣方案 明明運算需求很穩定,卻一路用 On-Demand 價格,白白錯過 CUD 能省下的 50-70%。
場景五:缺乏成本可見性 帳單按月結算,等你發現成本不對勁,往往已經多花了好幾千美元。
所以重點不是把帳單砍到最低,而是讓每一塊錢都花在刀口上 — 這就是 FinOps(Financial Operations,把財務紀律帶進雲端用量管理)的核心。
GCP 成本結構解析:你的錢花在哪?
四大成本組成
GCP 帳單主要分成四大類:
1. Compute(運算)
- Compute Engine VM instances
- GKE clusters
- Cloud Run containers
- Cloud Functions executions
成本驅動因素:
- VM 規格(vCPU、RAM、GPU)
- 運行時數
- 區域(us-central1 最便宜,asia-northeast1 較貴 10-20%)
2. Storage(儲存)
- Cloud Storage buckets
- Persistent Disks
- Cloud SQL databases
- Filestore
成本驅動因素:
- Storage Class(Standard / Nearline / Coldline / Archive)
- 儲存容量(GB/月)
- 讀寫操作次數
3. Network(網路)
- VPC 內部流量(免費)
- 跨區域傳輸(Regional egress)
- 對外網路(Internet egress)
- Load Balancer 流量
成本驅動因素:
- 出站流量(Egress,資料從 GCP 往外送)計費,入站(Ingress,資料進來)免費
- 同區域免費,跨區依距離計費
4. Other Services(其他服務)
- BigQuery queries
- Cloud Logging
- Cloud Monitoring
- API calls
成本結構範例
典型 web application 成本分布:
| 項目 | 佔比 | 月費用(假設 $10,000 總預算) |
|---|---|---|
| Compute | 45% | $4,500 |
| Storage | 20% | $2,000 |
| Network | 25% | $2,500 |
| Other | 10% | $1,000 |
⚠️ 警告:Network 佔比超過 30%,通常代表架構出了問題,該回頭檢查是不是太多資源跨區域了。
帳單分析實戰:Billing Reports 完整教學
3.1 四大 Billing Reports 類型
Report 1: Reports Page(基礎報表)
存取路徑:
Google Cloud Console → Billing → Reports
可回答的問題:
- 本月支出趨勢如何?
- 上個月哪個專案花費最多?
- 哪個 GCP 服務成本最高?
核心功能:
-
時間範圍選擇
- 本月迄今(MTD)
- 上個月
- 過去 3 個月
- 自訂日期範圍
-
分組維度(Group by)
- Project(專案)
- Service(服務,如 Compute Engine、Cloud Storage)
- SKU(具體資源,如 n1-standard-4)
- Location(區域)
- Label(自訂標籤)
-
篩選器(Filters)
- 依專案、服務、標籤篩選
- 排除特定項目
-
圖表類型
- 堆疊柱狀圖(Stacked bar chart)
- 堆疊面積圖(Stacked area chart)
- 折線圖(Line chart)
最佳實踐:
日常監控設定:
- Group by: Service
- Time range: Last 30 days
- Chart: Stacked area chart
成本分攤設定:
- Group by: Label
- Filter: label.team=backend, label.team=frontend
- Time range: This month
Report 2: Cost Table Report(成本明細表)
功能:取代傳統發票,把成本拆得很細給你看
包含欄位:
- Project ID / Project Number
- Service description
- SKU description
- Usage amount
- Cost(含稅前/稅後)
- Credits(折扣)
使用場景:
- 財務部門對帳
- 專案成本精算
- 跨部門費用分攤
下載格式:CSV / PDF
Report 3: Pricing Table Report(SKU 定價表)
功能:查詢所有 SKU 的即時定價
使用時機:
- 估算新專案成本
- 比較不同區域價格
- 規劃 resource migration
範例:查詢 n1-standard-4 在不同區域的價格
| Region | vCPU/hour | RAM GB/hour | Total/month (730h) |
|---|---|---|---|
| us-central1 | $0.190 | $0.0255 | $185.58 |
| asia-east1 | $0.209 | $0.0280 | $204.01 |
| europe-west1 | $0.209 | $0.0280 | $204.01 |
Report 4: CUD Analysis Reports(CUD 效益分析)
功能:視覺化 Committed Use Discounts 的財務影響
關鍵指標:
- CUD Coverage(涵蓋率):被 CUD 涵蓋的用量百分比
- CUD Utilization(使用率):已使用的 CUD 承諾百分比
- Effective Savings(實際節省金額)
最佳實踐:
- Coverage < 70%:考慮購買更多 CUD
- Utilization < 80%:CUD 購買過多,需調整
3.2 🆕 Gemini Cloud Assist - AI 驅動的成本分析
2024 年下半年起陸續開放 Preview,目前仍是 Pre-GA 階段
Google Cloud 把 Gemini Cloud Assist 整進了 Billing Reports,幫你用 AI 分析成本:
核心能力:
-
自然語言查詢:用對話方式建立成本報表
- 「顯示本月 Compute Engine 成本最高的 5 個專案」
- 「比較上週與本週的 Cloud Storage 費用」
-
AI 報表摘要:自動分析報表並提供關鍵洞察
- 識別異常支出模式
- 建議成本優化機會
-
報表建議:推薦適合的報表配置
- 根據歷史查詢模式
- 自動篩選相關維度
使用範例:
User: "Show me which team spent the most last month"
Gemini: 建立報表 → Group by: Label (team) → Time: Last month
結果: Backend team $15,000 (↑20% vs prev month)
3.3 🆕 App Hub 整合 - 按應用程式分析成本
2025 年 4 月新增
App Hub 現在也整進了 Billing Reports,FinOps 和 DevOps 團隊可以這樣用:
- 按應用程式分組成本:在 Reports 中選擇「Group by Application」
- 應用程式層級篩選:在 Cost Table Report 篩選特定 application
- 成本優化建議:針對每個 application 提供效率優化建議
使用場景:
- 多個微服務組成的應用程式,追蹤總成本
- 跨專案的應用程式,統一成本視圖
- 與 DevOps 工具整合,自動化成本歸因
3.4 🆕 FinOps Hub 2.0 - 雲端浪費偵測
2025 年 4 月 Google Cloud Next 發表
FinOps Hub 2.0 新增 Utilization Insights 儀表板:
功能:
-
Idle Resources Detection(閒置資源偵測)
- CPU < 5% 的 VM
- 未附加的 Persistent Disks
- 未使用的 Static IPs
-
Right-Sizing Recommendations(合適化建議)
- Over-provisioned VMs
- Under-utilized databases
-
Waste Reduction Metrics(浪費減少指標)
- 每月可節省金額
- 優化後的預估成本
存取路徑:
Google Cloud Console → Billing → FinOps Hub → Utilization Insights
3.5 進階功能:BigQuery Export
🔧 進階/可跳過:以下這段的 BigQuery SQL 查詢屬於實務操作,不是 ACE 考試範圍。ACE 你只要記住一個觀念就好:「要做細緻的成本分析,就把帳單匯出(Export)到 BigQuery」。SQL 怎麼寫可以等實際工作再學,初學者第一次讀可以直接跳到下一節「折扣大作戰」。
為什麼需要 BigQuery Export?
雖然 Gemini 和 FinOps Hub 2.0 的 AI 分析已經很好用,但要做深度分析,BigQuery Export 還是少不了:
- 複雜的自訂查詢(如:「找出成本週成長 > 20% 的專案」)
- 串接 BI 工具(Looker、Tableau、Data Studio)
- 長期歷史資料保留與趨勢分析
設定步驟:
# Step 1: 建立 BigQuery dataset
bq mk --dataset --location=US billing_export
# Step 2: 在 Billing 設定中啟用 Export
# Google Cloud Console → Billing → Billing export
# → Enable BigQuery export
# → Select dataset: billing_export
# Step 3: 等待資料開始匯出(通常需 24 小時)
範例查詢:找出本月成本 Top 10 專案
SELECT
project.name AS project_name,
SUM(cost) AS total_cost,
SUM(IFNULL((SELECT SUM(c.amount)
FROM UNNEST(credits) AS c), 0)) AS total_credits
FROM
`billing_export.gcp_billing_export_v1_XXXXX`
WHERE
DATE(usage_start_time) >= DATE_TRUNC(CURRENT_DATE(), MONTH)
GROUP BY
project_name
ORDER BY
total_cost DESC
LIMIT 10;
範例查詢:按 Label 分攤成本
SELECT
(SELECT value FROM UNNEST(labels) WHERE key = 'team') AS team,
service.description AS service,
SUM(cost) AS total_cost
FROM
`billing_export.gcp_billing_export_v1_XXXXX`
WHERE
DATE(usage_start_time) >= '2026-12-01'
GROUP BY
team, service
ORDER BY
total_cost DESC;
📊 Pro Tip:使用 Looker Studio 連接 BigQuery,建立 Real-time Cost Dashboard。
折扣大作戰:CUD vs SUD vs Spot VM 完全攻略
4.1 Committed Use Discounts (CUD) - 承諾使用折扣
運作機制
跟 GCP 簽 1 年或 3 年的承諾,換來大幅折扣。概念上就像「買房」對比「租房」。
兩種 CUD 類型
Type 1: Resource-Based CUD(資源型)
承諾用掉固定數量的資源(vCPU、RAM、GPU)。
折扣幅度:
| 機器類型 | 1 年期 | 3 年期 |
|---|---|---|
| 一般用途(N1, N2, E2) | 37% | 55% |
| 記憶體最佳化(M1, M2) | 37% | 70% |
| 運算最佳化(C2, C2D) | 37% | 55% |
範例:承諾使用 100 vCPU + 400 GB RAM(us-central1)
承諾內容:
- 100 vCPU x 730 小時/月 = 73,000 vCPU-hours
- 400 GB RAM x 730 小時/月 = 292,000 GB-hours
折扣計算:
On-Demand 價格: $3,650/月
3 年 CUD 價格: $1,643/月(55% off)
每月節省: $2,007
3 年總節省: $72,252
Type 2: Spend-Based CUD(消費型)
承諾每小時的最低消費金額($/hour),不綁定特定資源類型。
優點:
- 資源配置可以隨時調整(今天用 16 vCPU,明天改用 8 vCPU + GPU 都行)
- 適合多專案、多團隊的環境
折扣幅度:spend-based / flexible CUD 跨服務(Compute Engine / GKE / Cloud Run)約 1 年 28% / 3 年 46%(多數機型;別跟綁機型的 resource-based CUD 3 年 55% 混為一談)
範例:承諾 $100/hour(3年期)
承諾內容:
- $100/hour x 730 hours = $73,000/月
使用彈性:
Week 1: 50 台 n1-standard-4 VM
Week 2: 10 台 n1-highmem-8 + 5 張 V100 GPU
Week 3: 100 台 e2-medium VM
只要每小時使用量達 $100,折扣全額套用
🚨 2026 年 1 月 21 日重大變更(必讀)
所有既有帳單帳戶(使用 spend-based CUD 者)將自動遷移到新的 Multiprice CUD 資料模型
時間軸:
- ✅ 2025 年 7 月 15 日:新帳戶(首次購買 spend-based CUD)自動採用新模型;既有帳戶可提前 opt-in
- 🔄 2026 年 1 月 21 日:所有既有帳戶自動遷移(不可逆)
重大變更:
-
折扣顯示方式改變
- 舊模式:On-Demand 價格 + Credits(折扣以抵免額度形式)
- 新模式:直接顯示折扣後價格(更透明)
舊帳單: Compute Engine: $1,000 CUD Credits: -$550 Total: $450 新帳單: Compute Engine (CUD discounted): $450 Total: $450 -
Multiprice 支援
- 同一個 SKU 可以有多個價格(像是 On-Demand、CUD、客製化合約)
- 系統會自動幫你套用最優惠的價格
-
擴大涵蓋範圍
- ✅ Cloud Run SKUs(新增)
- ✅ H3 VMs(新增)
- ✅ 更多 GPU 類型
-
BigQuery Export Schema 更新
- 新增
pricing.effective_price欄位 - 更清楚追蹤折扣來源
- 新增
影響與建議:
⚠️ 注意事項:
- 遷移後就回不去舊模式了
- 既有的 CUD 合約照樣有效,不受影響
- 建議在 2026/1/21 前先檢查一下 BigQuery Export 的查詢要不要調整
✅ 優點:
- 帳單更簡潔易懂
- 自動套用最優惠價格
- 支援更多資源類型
📚 官方文件:
CUD 購買建議
CUD 適合的是那種「未來一兩年都會穩穩跑」的東西 — production 資料庫、長期在線的 web server、每天定時跑的批次作業,或是用量穩定成長、你大致估得出來的專案。反過來,需求忽高忽低的開發/測試環境、業務還在試水溫的新創、或只是做個 PoC 驗證概念的短命專案,就別簽 CUD,免得承諾了卻用不到,反而虧。
購買策略:
- 先看歷史用量:抓出過去 3-6 個月的基準用量(baseline usage)
- 保守一點估:CUD 承諾量抓基準用量的 70-80% 就好,留點 buffer
- 分散風險:分批買、每季檢討一次,別一口氣壓 3 年
- 混合搭配:CUD 顧基準用量,波峰用量交給 On-Demand + SUD
4.2 Sustained Use Discounts (SUD) - 持續使用折扣
運作機制
全自動,完全不用手動設定。Google 會自己追蹤每個資源的使用時數,單月用量一超過 25% 就開始打折。
SUD 的運作有個關鍵要先講清楚:它是按月、自動、邊際遞增的。也就是說,用得越久、折扣會分段往上加,而不是一過某個門檻就一口氣把整月帳單打 30%。GCP 把每月切成四段使用率區間,每一段套用不同的「邊際折扣率」,最後加總起來才是你這個月實際拿到的有效折扣。下面的級距表(以 N1 機型為例)就是這個邏輯:
折扣級距(N1 機型):
| 使用率 | 該區間邊際折扣 | 範例(n1-standard-4, $146.08/月 On-Demand) |
|---|---|---|
| 0-25% | 0% | 前 182.5 小時 → $0 discount |
| 25-50% | 20% | 此區間 → 約 $7.30 discount |
| 50-75% | 40% | 此區間 → 約 $14.61 discount |
| 75-100% | 60% | 此區間 → 約 $21.91 discount |
跑滿整個月(730 小時)時,這四段加總下來的有效折扣大約是 30%,也就是省下約 $43.8、月費從 $146.08 降到約 $102.3。N2/N2D/C2/C2D 的級距結構不同,整月跑滿的有效折扣最高 20%。
最高折扣:
| 機器類型 | 最高 SUD |
|---|---|
| N1, M1, M2, GPU | 30% |
| N2, N2D, C2, C2D | 20% |
SUD vs CUD 差異比較
| 項目 | SUD | CUD |
|---|---|---|
| 承諾期 | 無 | 1-3 年 |
| 設定方式 | 自動 | 手動購買 |
| 最高折扣 | 30% | 70% |
| 適用場景 | 波動工作負載 | 穩定工作負載 |
| 退款政策 | N/A(隨時可停) | 有限制 |
| 疊加性 | ✅ 可疊加 CUD | ✅ 超額用量享 SUD |
黃金組合:CUD + SUD
策略:
- CUD 顧住基準用量(70-80% 需求)→ 拿 50-70% 折扣
- 波峰超出的部分 → 自動吃 SUD 的 20-30% 折扣
範例:
場景: 平日需 80 vCPU,假日需 120 vCPU
策略:
- 購買 CUD: 80 vCPU (55% off)
- 超額 40 vCPU → 享 SUD (30% off)
成本計算:
Pure On-Demand: $5,110/月
CUD (80 vCPU) + SUD (40 vCPU): $2,920/月
節省: $2,190/月 (43%)
4.3 Spot VM - 最高 91% 折扣的終極武器
什麼是 Spot VM?
Spot VM 是 Google 的「剩餘運算資源拍賣」機制。GCP 把閒置的運算容量用超低價賣給你,但保留隨時把它收回去的權利。
Spot VM vs Preemptible VM:
| 項目 | Preemptible VM | Spot VM |
|---|---|---|
| 發布時間 | 2015 | 2021(建議使用) |
| 最長執行時間 | 24 小時強制中斷 | 無 24 小時上限(但仍可能隨時被搶占) |
| 折扣幅度 | 最高 91% | 最高 91%(兩者同一套定價模型) |
| 可用性 | 舊版(仍可用) | 新版(官方推薦) |
兩者其實是同一套定價模型,折扣都是浮動的 60-91%,所以折扣幅度不該拿來當差別。真正的差異只有一個:Preemptible 跑到 24 小時會被 GCP 強制停掉,Spot 沒有這個上限(一樣可能隨時被收回,但不會因為「跑太久」被趕)。這也是為什麼 2021 年後官方一律推薦改用 Spot。
適用場景
Spot 適合那些「斷了重來也沒差」的活 — ETL 批次處理、ML 模型訓練(能 checkpoint 就行,checkpoint 就是定期把進度存檔,被中斷後從存檔接著跑、不用從頭來)、影片渲染、CI/CD build、科學模擬這類,被搶占了就從上次存檔接著跑。反過來,碰到 production 資料庫、對外的 web server、不能斷的即時系統,或者沒有 checkpoint 機制、一斷就要從頭來的長時間運算,就別硬塞 Spot。
最佳實踐策略
1. 時段選擇
Spot VM 的可用性會隨時段差很多:
| 時段 | 可用性 | 建議 |
|---|---|---|
| 工作日 9am-6pm | 低(企業用量高) | ❌ 避免 |
| 工作日 6pm-9am | 中 | ⚠️ 可用但不穩定 |
| 週末 | 高(數據中心負載低) | ✅ 最佳時段 |
2. 區域選擇與價格比較
Spot VM 的價格會隨各區域的供需而不同:
# 查詢 Spot VM 價格(以 n1-standard-4 為例)
gcloud compute machine-types list \
--filter="name=n1-standard-4" \
--format="table(name,zone,guestCpus,memoryMb)"
# 比較不同區域 Spot 價格
# us-central1-a: $0.040/hour (91% off)
# us-east1-b: $0.055/hour (88% off)
# asia-east1-a: $0.065/hour (85% off)
建議:優先挑 us-central1(愛荷華)或 us-west1(奧勒岡),不只價格最低,可用性也高。
3. 設定最高價(Max Price)
設個上限,免得動態定價衝太高:
gcloud compute instances create my-spot-vm \
--zone=us-central1-a \
--machine-type=n1-standard-4 \
--provisioning-model=SPOT \
--instance-termination-action=DELETE \
--max-run-duration=3600s \
--maintenance-policy=TERMINATE
4. 處理中斷(Preemption Handling)
Spot VM 被收回前,GCP 會給你 30 秒的寬限期:
# 設定關機腳本(Shutdown script)
cat > shutdown.sh <<'EOF'
#!/bin/bash
echo "Spot VM is shutting down, saving state..."
# 保存進度到 Cloud Storage
gsutil cp /tmp/checkpoint.tar.gz gs://my-bucket/checkpoints/
# 通知 Slack
curl -X POST -H 'Content-type: application/json' \
--data '{"text":"Spot VM terminated"}' \
$SLACK_WEBHOOK_URL
EOF
# 建立 Spot VM with shutdown script
gcloud compute instances create my-spot-vm \
--metadata-from-file shutdown-script=shutdown.sh \
--provisioning-model=SPOT
5. 與 GKE 整合(推薦)
🔧 進階/可跳過:GKE(Kubernetes)的 NodePool 設定屬於遠超 ACE 範圍的深水區,初學者知道「GKE 可以用 Spot VM 當 node、被收回時會自動把工作搬到別台」這個觀念就夠了,下面的 YAML 不用硬啃。
用 GKE Autopilot 搭配 Spot VMs,就能自動做到容錯:
# GKE NodePool with Spot VMs
apiVersion: v1
kind: NodePool
metadata:
name: spot-pool
spec:
autoscaling:
enabled: true
minNodeCount: 0
maxNodeCount: 10
config:
machineType: n1-standard-4
spot: true # 註:GKE 的 Spot VM 用 spot: true;preemptible: true 是另一個(舊版)Preemptible VM 欄位,兩者不同
management:
autoRepair: true
autoUpgrade: true
GKE 會自動幫你處理:
- Spot VM 被收回時,自動把 pods 重新調度到其他 node
- On-Demand 跟 Spot VMs 混搭,確保服務不中斷
6. 實戰範例:ML 訓練成本優化
場景: 訓練 ResNet-50 模型,需 8 張 V100 GPU
成本比較:
On-Demand (8x V100):
- $2.48/hour x 8 = $19.84/hour
- 訓練 10 小時 = $198.40
Spot VM (8x V100):
- $0.74/hour x 8 = $5.92/hour (70% off)
- 預期中斷 2 次,總 12 小時 = $71.04
- 節省: $127.36 (64%)
實作:
- 每 30 分鐘儲存 checkpoint 到 Cloud Storage
- 被中斷時,從最新 checkpoint 恢復訓練
- 使用 GCS 的 Lifecycle Management,訓練完成後刪除舊 checkpoints
Spot VM 監控與告警
監控指標:
- Preemption Rate(中斷率):< 5% 為健康
- Average Availability(平均可用性):> 90% 為穩定
設定告警:
# Cloud Monitoring 告警:Spot VM 被中斷
gcloud alpha monitoring policies create \
--notification-channels=CHANNEL_ID \
--display-name="Spot VM Preemption Alert" \
--condition-display-name="Spot VM preempted" \
--condition-threshold-value=1 \
--condition-threshold-duration=60s
📝 考場提點
「折扣三選一」是 ACE 最高頻的選型題,看到題目先抓關鍵字對應答案:
- 工作負載穩定、24/7 長期跑、需求可預測 → CUD(要省最多就 3 年期)。
- 工作負載可容忍中斷/可重試的批次、ETL、ML 訓練 → Spot VM(最高 91% 折扣)。
- 什麼都不想設、用越多自動折 → SUD(自動套用,最高 30%,無需承諾)。
兩個經典陷阱:
- 題目出現 「mission-critical」「cannot tolerate interruption」「production database」 → 直接排除 Spot VM(會被收回),通常選 CUD。
- 題目出現 「no upfront commitment」「automatic」「without any configuration」 → 指向 SUD,不是 CUD(CUD 要簽約承諾)。
另外記住:Spot VM 與舊版 Preemptible VM 折扣一樣(都是 up to 91%),差別在 Preemptible 跑滿 24 小時會被強制停、Spot 沒這上限。
儲存與網路成本優化技巧
5.1 Storage Class 智慧選擇
四種 Storage Class 比較
| Class | 最低儲存時間 | 存取頻率 | 價格 ($/GB/月) | 讀取費用 ($/GB) |
|---|---|---|---|---|
| Standard | 無 | 頻繁 (每週多次) | $0.020 | $0 |
| Nearline | 30 天 | 不常 (每月 1 次) | $0.010 (50% off) | $0.01 |
| Coldline | 90 天 | 很少 (每季 1 次) | $0.004 (80% off) | $0.02 |
| Archive | 365 天 | 極少 (每年 1 次) | $0.0012 (94% off) | $0.05 |
選擇決策樹
是否每週存取?
├─ 是 → Standard Storage
└─ 否 → 是否每月存取?
├─ 是 → Nearline Storage
└─ 否 → 是否每季存取?
├─ 是 → Coldline Storage
└─ 否 → Archive Storage
Lifecycle Management(生命週期管理)
自動降級策略:
{
"lifecycle": {
"rule": [
{
"action": { "type": "SetStorageClass", "storageClass": "NEARLINE" },
"condition": { "age": 90 }
},
{
"action": { "type": "SetStorageClass", "storageClass": "COLDLINE" },
"condition": { "age": 365 }
},
{
"action": { "type": "Delete" },
"condition": { "age": 1825 }
}
]
}
}
範例:10 TB 備份資料,5 年總成本
| 策略 | 成本計算 | 總成本 |
|---|---|---|
| 全 Standard | 10 TB x $0.020 x 60 月 | $12,000 |
| Lifecycle 優化 | Year 1-2: Standard → $4,800 Year 3-5: Coldline → $1,440 | $6,240 |
| 節省 | $5,760 (48%) |
5.2 網路成本優化
三大網路成本來源
1. Egress(出站流量)計費
| 流量類型 | 價格 ($/GB) | 範例 |
|---|---|---|
| 同區域(Intra-zone) | $0 | VM → VM(同 zone) |
| 跨區域(Inter-region) | $0.01-$0.08 | us-central1 → asia-east1 |
| Internet Egress | $0.085-$0.23 | GCP → 使用者瀏覽器 |
優化策略:
- ✅ 將相關資源放在同一 zone(免費)
- ✅ 使用 Cloud CDN 減少 origin 流量
- ❌ 避免跨區域 database 查詢
2. Load Balancer 費用
| 類型 | 固定費用 | 流量費用 |
|---|---|---|
| HTTP(S) LB | $18/月 | $0.008/GB |
| TCP/UDP LB | $18/月 | $0.008/GB |
| Internal LB | $0 | $0.01/GB |
優化技巧:把多個 LB 合併成一個(用 URL maps 來分流)
3. Cloud CDN(內容傳遞網路)
成本比較:
場景: 平均 1 GB 圖片,每月被瀏覽 10,000 次(總傳輸量 10,000 GB)
不使用 CDN:
- Internet Egress: 10,000 GB x $0.12 = $1,200
使用 CDN:
- Cache Hit(90%,9,000 GB)走 CDN: 9,000 GB x $0.04 = $360
- Cache Miss(10%,1,000 GB)回源: 1,000 GB x $0.12 = $120
- 總計: $480(節省 60%)
10 個省錢最佳實踐 Checklist
☑️ 1. 啟用 Billing Alerts(預算告警)
設定步驟:
# Step 1: 建立預算
gcloud billing budgets create \
--billing-account=BILLING_ACCOUNT_ID \
--display-name="Monthly Budget" \
--budget-amount=10000 \
--threshold-rule=percent=50 \
--threshold-rule=percent=90 \
--threshold-rule=percent=100
# Step 2: 設定通知
# 當達 50%/90%/100% 時發送 email 告警
進階:自動關閉超支資源
# Cloud Function triggered by Pub/Sub budget alert
def stop_billing_instances(event, context):
budget_notification = json.loads(base64.b64decode(event['data']).decode())
if budget_notification['costAmount'] > budget_notification['budgetAmount']:
# 停止所有非 production VM
for instance in compute.instances().list(project=PROJECT_ID).execute():
if 'production' not in instance['labels']:
compute.instances().stop(instance=instance['name']).execute()
☑️ 2. 使用 Resource Labels 追蹤成本
標籤策略:
必要標籤:
- team: backend / frontend / data
- env: production / staging / dev
- project: project-alpha / project-beta
- cost-center: engineering / marketing
範例: gcloud compute instances create my-vm \
--labels=team=backend,env=production,cost-center=engineering
成本分攤報表:
-- BigQuery: 按 team 分攤成本
SELECT
labels.value AS team,
SUM(cost) AS total_cost
FROM
`billing_export.gcp_billing_export_v1_XXXXX`
CROSS JOIN UNNEST(labels) AS labels
WHERE
labels.key = 'team'
AND DATE(usage_start_time) >= '2026-12-01'
GROUP BY team
ORDER BY total_cost DESC;
☑️ 3. 刪除未使用的資源
常見浪費:
| 資源 | 偵測方法 | 月費用浪費 |
|---|---|---|
| Idle VMs | CPU < 5% 持續 7 天 | $50-$500 |
| Orphaned Disks | 未附加到 VM | $0.04/GB/月 |
| Unused IPs | 未綁定 VM | $3.65/IP/月 |
| Old Snapshots | > 90 天未使用 | $0.026/GB/月 |
偵測腳本:
# 找出 CPU < 5% 的 VM(過去 7 天)
gcloud monitoring time-series list \
--filter='metric.type="compute.googleapis.com/instance/cpu/utilization"' \
--format=json | jq '.[] | select(.points[].value.doubleValue < 0.05)'
# 找出 orphaned disks
gcloud compute disks list --filter="NOT users:*" --format="table(name,sizeGb,zone)"
# 找出未使用的靜態 IP
gcloud compute addresses list --filter="status=RESERVED" --format="table(name,region)"
☑️ 4. Right-Sizing(合適化 VM 規格)
使用 Recommender API:
# 取得 VM resize 建議
gcloud recommender recommendations list \
--project=PROJECT_ID \
--location=us-central1 \
--recommender=google.compute.instance.MachineTypeRecommender \
--format=json
範例建議:
{
"name": "projects/123/locations/us-central1/recommenders/.../recommendations/abc",
"description": "Save costs by resizing this VM",
"primaryImpact": {
"category": "COST",
"costProjection": {
"cost": {
"units": "-45"
},
"duration": "2592000s"
}
},
"content": {
"operationGroups": [
{
"operations": [
{
"action": "replace",
"path": "/machineType",
"value": "zones/us-central1-a/machineTypes/n1-standard-2"
}
]
}
]
}
}
建議:n1-standard-4 → n1-standard-2,每月省 $45
☑️ 5. 啟用 Auto Shutdown(自動關機)
開發/測試環境排程:
# 使用 Cloud Scheduler + Cloud Functions
# scheduler.yaml
- name: stop-dev-vms
schedule: "0 19 * * 1-5" # 工作日 7pm
target:
httpTarget:
uri: https://us-central1-PROJECT.cloudfunctions.net/stopDevVMs
- name: start-dev-vms
schedule: "0 8 * * 1-5" # 工作日 8am
target:
httpTarget:
uri: https://us-central1-PROJECT.cloudfunctions.net/startDevVMs
成本節省:
- 開發環境每天運行 12 小時(8am-8pm)
- 週末完全關閉
- 節省:65% 運算成本
☑️ 6. 使用 Custom Machine Types
場景:需要高 RAM 但 CPU 不高的應用(如:in-memory cache)
成本比較:
| 選項 | vCPU | RAM | 月費用 |
|---|---|---|---|
| n1-highmem-8 | 8 | 52 GB | $392 |
| Custom | 4 | 52 GB | $280 |
| 節省 | $112 (29%) |
# 建立 custom machine type
gcloud compute instances create my-custom-vm \
--custom-cpu=4 \
--custom-memory=52GB \
--zone=us-central1-a
☑️ 7. 善用 Free Tier(免費額度)
Always Free(永久免費):
| 服務 | 免費額度 | 超額價格 |
|---|---|---|
| Compute Engine | 1x e2-micro VM(us-central1/us-west1/us-east1) | 標準價格 |
| Cloud Storage | 5 GB Standard | $0.020/GB/月 |
| Cloud Functions | 2M invocations/月 | $0.40/M invocations |
| Cloud Build | 2,500 build-minutes/月(default pool, e2-standard-2) | $0.006/分鐘 |
策略:
- 個人專案用 e2-micro(免費)
- 測試環境用 Free Tier 搭配 Spot VM
- 小型 static website 可全免費(Cloud Storage + Cloud CDN)
📖 延伸閱讀:完整免費資源清單請參考 GCP 免費資源完全指南,含防爆帳單設定教學。
☑️ 8. 區域價格套利
價格差異:
| 區域 | n1-standard-4 | 價差 |
|---|---|---|
| us-central1(愛荷華) | $146.08/月 | Baseline |
| asia-northeast1(東京) | $191.03/月 | +31% |
| europe-west2(倫敦) | $180.48/月 | +24% |
策略:
- 非延遲敏感服務:選最便宜區域(us-central1)
- 需低延遲:選最近區域,但用 Spot VM 抵消價差
☑️ 9. 啟用 Organization Policies
限制資源建立:
# 禁止建立昂貴的 VM types
constraints/compute.restrictMachineTypes:
deniedValues:
- 'm1-ultramem-*'
- 'm2-ultramem-*'
constraints/compute.restrictRegions:
allowedValues:
- 'us-central1'
- 'us-west1'
強制標籤:
constraints/gcp.resourceLocations:
allowedValues:
- in:us-locations
- in:asia-locations
☑️ 10. 定期成本審查(Cost Review)
每週:
- 查看 Billing Reports(本週 vs 上週)
- 檢查異常增長的專案/服務
每月:
- 產生 Cost Summary Report
- 與預算對比,分析差異原因
- 更新 CUD/Spot VM 策略
每季:
- 全面資源盤點(使用 Asset Inventory)
- 評估新的折扣方案(GCP 常推新優惠)
- Benchmark 與 AWS/Azure 價格
成本異常告警設定教學
7.1 Budget Alerts(預算告警)
完整設定範例:
# 建立多層級預算告警
gcloud billing budgets create \
--billing-account=012345-6789AB-CDEFGH \
--display-name="Production Budget - 2026" \
--budget-amount=50000 \
--threshold-rule=percent=50,basis=CURRENT_SPEND \
--threshold-rule=percent=90,basis=CURRENT_SPEND \
--threshold-rule=percent=100,basis=FORECASTED_SPEND \
--all-updates-rule-monitoring-notification-channels=projects/PROJECT_ID/notificationChannels/CHANNEL_ID \
--all-updates-rule-pubsub-topic=projects/PROJECT_ID/topics/billing-alerts
告警策略:
| 閾值 | 基準 | 動作 |
|---|---|---|
| 50% | 實際消費 | Email 通知 team lead |
| 90% | 實際消費 | Email + Slack 通知所有人 |
| 100% | 預測消費 | Email + Slack + 自動停止 dev/staging VMs |
7.2 Anomaly Detection(異常偵測)
使用 Cloud Monitoring + BigQuery:
-- 偵測成本週增長 > 30% 的專案
WITH weekly_cost AS (
SELECT
project.name AS project_name,
DATE_TRUNC(DATE(usage_start_time), WEEK) AS week,
SUM(cost) AS total_cost
FROM `billing_export.gcp_billing_export_v1_XXXXX`
GROUP BY project_name, week
),
cost_change AS (
SELECT
project_name,
week,
total_cost,
LAG(total_cost) OVER (PARTITION BY project_name ORDER BY week) AS prev_week_cost,
(total_cost - LAG(total_cost) OVER (PARTITION BY project_name ORDER BY week))
/ NULLIF(LAG(total_cost) OVER (PARTITION BY project_name ORDER BY week), 0) AS growth_rate
FROM weekly_cost
)
SELECT
project_name,
week,
total_cost,
prev_week_cost,
ROUND(growth_rate * 100, 2) AS growth_percent
FROM cost_change
WHERE growth_rate > 0.3 -- 成長 > 30%
AND week = DATE_TRUNC(CURRENT_DATE(), WEEK)
ORDER BY growth_rate DESC;
自動化告警:
# Cloud Function: 每日執行上述查詢,發現異常時通知
import google.cloud.bigquery as bq
import slack_sdk
def detect_cost_anomaly(event, context):
client = bq.Client()
query = """...""" # 上述 SQL
results = client.query(query).result()
anomalies = [row for row in results if row.growth_percent > 30]
if anomalies:
slack_client = slack_sdk.WebClient(token=SLACK_TOKEN)
message = f"⚠️ Cost Anomaly Detected!\n"
for anomaly in anomalies:
message += f"- {anomaly.project_name}: +{anomaly.growth_percent}%\n"
slack_client.chat_postMessage(
channel="#billing-alerts",
text=message
)
📝 考場提點
成本「可見性與歸屬」也是 ACE 常考的工具對應題,記住這幾組關鍵字 → 答案:
- 問**「追蹤哪個團隊/專案/環境花了多少」「成本歸屬」「cost allocation」** → Labels 標記資源(team、env…)+ Billing Export to BigQuery 做分析。
- 問**「超過預算要自動處理/自動停資源」** → 這是經典陷阱:Budget Alert 只發通知,不會自己停任何資源。要真的自動停,得讓 Budget Alert 發 Pub/Sub 訊息,再用 Cloud Function 接收後去關 VM。看到「automatically stop / shut down resources when over budget」千萬別選只設 Budget Alert。
- 問**「不寫程式、要視覺化分析帳單」** → Billing Reports 頁面(內建 Group by project/service/label);要更深入自訂查詢才上 BigQuery Export。
總結與下一步行動
一句話小結
要省錢,先看得到(Labels + 報表,知道錢花在哪),再買對折扣(CUD 顧住穩定的基準用量、Spot 接那些可重來的容錯工作、SUD 用越多自動折),最後讓自動化幫你守底線(Budget Alert + Cloud Scheduler 自動關閉開發環境)。順序很重要:沒有可見性,後面的折扣與自動化都是瞎猜。
順帶一提,這幾年 GCP 在成本工具上加了不少新東西 — Optimization Hub(集中顯示所有優化建議)、FinOps Hub 的浪費偵測、Gemini Cloud Assist 的自然語言查詢。對實務有幫助,但這些都不是 ACE 的考點,知道有這些工具即可,不用硬背。
成本優化成熟度模型
Level 1: 基礎(反應式)
- ✅ 啟用 Billing Alerts
- ✅ 每月查看帳單
- ✅ 刪除明顯未使用的資源
Level 2: 進階(主動式)
- ✅ 使用 Labels 追蹤成本
- ✅ 購買 CUD 涵蓋穩定工作負載
- ✅ 開發環境自動關機
- ✅ 定期 Right-Sizing
Level 3: 專家(預測式)
- ✅ BigQuery Export + BI Dashboard
- ✅ 異常偵測自動告警
- ✅ CUD + SUD + Spot VM 組合策略
- ✅ FinOps 團隊定期審查
- ✅ 成本納入架構設計考量
30 天行動計畫
Week 1: 建立可見性
- Day 1-2: 啟用 Billing Reports,分析現狀
- Day 3-4: 設定 Budget Alerts(50%/90%/100%)
- Day 5-7: 啟用 BigQuery Export,建立基礎 Dashboard
Week 2: 快速勝利(Quick Wins)
- Day 8-10: 刪除 orphaned disks、unused IPs、old snapshots
- Day 11-12: 停止 idle VMs(CPU < 5%)
- Day 13-14: 設定開發環境自動關機(省 50%+)
Week 3: 折扣策略
- Day 15-17: 分析過去 3 個月用量,規劃 CUD 購買
- Day 18-20: 識別容錯工作負載,遷移至 Spot VM
- Day 21: 驗證 SUD 自動套用情況
Week 4: 持續優化
- Day 22-24: 實施 Resource Labels 策略
- Day 25-27: 設定 Lifecycle Management(Storage)
- Day 28-30: 建立每週成本審查流程
預期成果:30 天內節省 30-50% 總成本
延伸學習資源
官方文件:
工具:
社群:
系列文章推薦
- 上一篇:ACE-301:企業上雲實戰:GCP 遷移評估與執行策略
- 下一篇:ACE-303:GCP 認證攻略:從 ACE 到 PCA 的完整學習路徑
- 相關主題:GCP-102:GCP 新手上路:環境設定與權限管理(預算告警設定)
ACE 考試重點整理
必背知識點
- CUD(Committed Use Discount):1 年約 37% 折扣,3 年約 55% 折扣,適合穩定工作負載
- SUD(Sustained Use Discount):自動折扣,用越多折越多(最高 30%),無需承諾
- Spot VM(原 Preemptible VM):最高 91% 折扣,但可能被中斷,適合批次/容錯工作
- Billing Export to BigQuery 可做細緻的成本分析
- Budget Alert 可設定預算閾值自動通知(50%/90%/100%)
- Labels 是成本歸屬的關鍵——用 label 標記團隊、環境、專案
常見陷阱題
Q:工作負載 24/7 穩定運行,如何最大程度省錢? A:3 年 CUD(55% 折扣)。Spot VM 不適合(會被中斷),SUD 折扣不夠深。
Q:批次資料處理工作可以容忍中斷和重試,如何省錢? A:Spot VM(最高 91% 折扣)。搭配 MIG 自動重建被中斷的實例。
Q:如何追蹤哪個團隊花了多少雲端費用? A:使用 Labels 標記資源(team=frontend),搭配 Billing Export to BigQuery 做分析。
Q:設定 Budget Alert 後,超過預算會自動停止資源嗎? A:不會。Budget Alert 只發通知,不會自動停止。要自動控制需搭配 Cloud Functions 處理 Pub/Sub 通知。