理解 Google Cloud 計費與成本管理
在雲端環境中,資源的彈性雖然帶來了便利,但也可能導致意料之外的成本。對於 Associate Cloud Engineer (ACE) 來說,掌握計費管理 (Billing) 是確保專案可持續運行的關鍵技能。Google Cloud 的計費架構設計旨在提供透明度、可預測性以及細粒度的控制。
計費管理的核心在於 Cloud Billing Account。這是一個在 Google Cloud 層級定義的實體,用於支付資源的使用費用。一個計費帳戶可以連結到一個或多個專案,但一個專案在同一時間只能連結到一個計費帳戶。
白話文解釋
為了讓計費概念更接地氣,我們可以使用以下類比:
1. 房屋租賃與水電費 (房屋仲介類比)
想像你在管理一整棟公寓:
- 計費帳戶 (Billing Account):就是你的銀行帳戶或信用卡,負責支付整棟樓的水電費。
- 專案 (Projects):就是每一間出租的房間。
- 預算 (Budgets):你為每間房間設定的水電費上限。如果某個房客(開發者)沒關冷氣(VM),電費飆升,系統會發簡訊(警示)提醒你。
- 資源使用 (Resource Usage):具體用了多少度電。
即便你有好幾間房,只要它們都連結到你的同一個銀行帳戶,你就會收到一張總帳單。
2. 手機門號資費 (電話總機類比)
- 計費帳戶:電信公司的合約持有者(可能是公司)。
- 專案:公司發給每個員工的手機門號。
- 計費匯出 (Billing Export):每個月詳細的通話明細,讓你知道誰打了最久的長途電話(哪項服務最花錢)。
- 配額 (Quotas):你的合約規定每個月只能打 100 分鐘,打超過了就會被停機(保護機制)。
3. 自助餐計費 (瑞士刀類比)
- 計費帳戶:你的錢包。
- 資源 (Resources):自助餐台上各種菜色。有的按件計費(API 呼叫),有的按重量計費(儲存空間),有的按時間計費(VM 執行時間)。
- 儀表板 (Dashboards):你在用餐過程中隨時查看自己盤子裡菜色的總價。
Cloud Billing 帳戶結構
在 GCP 的資源階層中,計費帳戶位於專案之上,但它可以跨越組織邊界。
計費帳戶類型
- 自助式 (Self-serve):使用信用卡或扣款卡,帳單金額會自動扣款。
- 開立發票 (Invoiced):適用於大型組織,Google 會定期寄送發票,通常有較長的付款期限。
計費相關角色
roles/billing.admin: 全權管理計費帳戶。roles/billing.user: 允許使用者將專案連結到該計費帳戶。roles/billing.viewer: 只能查看帳單資訊,不能修改。
計費帳戶是與 Google 結算費用的實體。它不屬於特定的專案,而是專案去「連結」它。 Source ↗
將專案連結到計費帳戶
專案必須連結到計費帳戶才能使用付費服務。
如果一個專案沒有連結計費帳戶,它只能使用免費層級 (Free Tier) 範圍內的資源。一旦連結,該專案產生的所有費用都會由對應的計費帳戶承擔。 Source ↗
gcloud 指令練習
# 列出可用的計費帳戶
gcloud billing accounts list
# 將專案連結到計費帳戶
gcloud billing projects link MY_PROJECT_ID --billing-account 012345-567890-ABCDEF
設定預算與電子郵件警示
預算是防止「雲端帳單驚嚇」的第一道防線。
預算運作方式
你可以針對整個計費帳戶或特定專案設定預算門檻。
- 金額 (Amount): 可以是固定金額,或參考上個月的支出。
- 範圍 (Scope): 選擇特定的專案、服務(如只有 Compute Engine)或標籤 (Labels)。
警示門檻 (Alert Thresholds)
標準做法是設定多個觸發點:50%、90% 和 100%。當支出達到門檻時,GCP 會發送電子郵件給計費管理員 (Billing Admins) 和計費使用者 (Billing Users)。 Source ↗
Pub/Sub 整合
對於進階自動化,你可以將預算通知發送到 Pub/Sub。例如,當預算達到 100% 時,自動觸發 Cloud Function 來關閉不重要的 VM。
配置計費數據匯出至 BigQuery
當你需要進行深度成本分析時,控制台的圖表可能不夠用。這時你需要 計費匯出 (Billing Export)。
配置匯出步驟
- 建立 BigQuery 資料集:在同一個組織下的某個專案中建立。
- 啟用匯出:在計費管理介面中選擇 "Billing export",指向該資料集。
- 選擇類型:
- 標準使用成本 (Standard usage cost):每日詳細的使用成本。
- 詳細使用成本 (Detailed usage cost):包含標籤 (Labels) 和資源層級的詳細資訊。
- 定價匯出 (Pricing export):你的帳戶特有的定價資訊。
計費匯出並不具備回溯性。它只會從啟用那一刻起開始匯出資料。因此,強烈建議在專案啟動初期就啟用匯出。 Source ↗
可視化成本與使用情況
匯出到 BigQuery 後,你可以:
- 使用 SQL 查詢特定的成本趨勢。
- 連結 Looker Studio (前 Data Studio) 建立美觀的成本儀表板。
- 使用 Cloud Billing 報表 在控制台中快速查看按服務或專案分類的支出。
要把專案在兩個計費帳戶之間搬移,必須同時擁有兩個角色:在目標計費帳戶上的 roles/billing.user(才能把專案接過去),以及在該專案上的 roles/billing.projectManager(Project Billing Manager,才能從來源帳戶解除連結)。光是在來源帳戶持有 roles/billing.admin 是不夠的——ACE 情境題裡「開發者無法重新連結專案」通常就是卡在這個拆開的權限設計。
Source ↗
用於成本分配的標籤 (Labels)
考試陷阱:如果你想知道「開發部門」和「生產部門」各自花了多少錢,最有效的工具是標籤 (Labels) 而非建立多個計費帳戶。 Source ↗
標籤是鍵值對 (Key-Value pairs,例如 env:prod 或 dept:marketing),可以附加在資源上,並在計費匯出中呈現,方便進行費用分攤 (Chargeback)。
成本管理的最佳實務
- 實施階層式預算:從組織級到專案級都設定預算。
- 善用承諾使用折扣 (Committed Use Discounts, CUDs):對於可預測的負載,承諾使用 1 或 3 年可獲得大幅折扣。
- 清理未使用的資源:定期檢查孤兒磁碟 (Orphaned Disks) 或未使用的靜態 IP。
- 權限最小化:不要隨便給予
billing.admin權限。
ACE 的常見計費情境
- 情境:某公司想要確保「行銷專案」產生的發票與「研發專案」分開。
- 解決方案:建立兩個不同的計費帳戶,分別連結對應的專案。
- 情境:你需要當預算達到 100% 時「自動」停止資源。
- 解決方案:設定預算通知到 Pub/Sub,由 Cloud Function 執行
gcloud compute instances stop。
- 解決方案:設定預算通知到 Pub/Sub,由 Cloud Function 執行
常見問題 (FAQ)
問:一個專案可以連結多個計費帳戶嗎? 答:不行,一個專案在任何給定時間只能與一個計費帳戶關聯。
問:預算達到 100% 時,GCP 會自動關閉我的資源嗎? 答:預設不會。預算只會觸發通知。自動關閉需要額外透過 Pub/Sub 和代碼實現。
問:什麼是計費子帳戶 (Billing Subaccount)? 答:這通常出現在轉售商 (Reseller) 模式中,用於在大型帳戶下劃分多個子客戶。
問:我可以更改計費帳戶的幣別嗎? 答:計費帳戶建立後,幣別是不可更改的。如果需要更改幣別,必須建立新的帳戶。
問:為什麼我已經設了預算,還是收到了超額帳單? 答:預算通知有延遲(通常是幾小時),且預算不具有強制限制資源使用的能力。
ACE 總結清單
- 掌握
roles/billing.admin與roles/billing.user的區別。 - 知道如何將專案重新連結 (Re-link) 到不同的計費帳戶。
- 理解計費匯出到 BigQuery 的流程。
- 了解標籤如何協助成本分攤。
- 記住預算警示預設不會停止資源。