治理習慣的責任是讓基礎設施在規模長大後仍然可被盤點、可被追責、可被回收。資源歸屬靠 tagging、密鑰安全靠 secret 管理(見 tagging 與 secrets),本篇處理兩個後續問題:成本怎麼拆解到擁有者,以及治理規範的節奏怎麼拿捏 — 什麼該第一天就立、什麼等到痛點出現再加。

先界定邊界。成本這一塊分兩層:把資源歸屬到擁有者與用途的地基(tagging、chargeback 的依據)在這裡,運行期怎麼用 reserved instance、spot、rightsizing 去壓低帳單,是 devops 模組八:成本管理 的範圍。

成本可見性:每筆花費都對得到擁有者與用途

成本可見性的目標是讓帳單上的每一筆花費都能回答「這是誰的、為了什麼」。雲帳單預設是一筆按服務類型加總的數字 — EC2 多少、RDS 多少 — 這個視角能告訴你花在哪類資源,卻答不出花在哪個團隊、哪個產品線、哪個功能。當這個問題答不出來,成本就變成一筆沒人負責的公共支出,沒有人有動機去優化自己看不到的帳。

Tag 驅動的成本分攤

把成本拆解到擁有者的地基,正是 tagging。雲廠商的成本分攤工具(AWS Cost Explorer、Cost Allocation Tags、GCP 的 billing label)能用 tag 當分群維度,前提是那些 tag 要先在 billing 後台啟用為「成本分攤標籤(Cost Allocation Tag)」。啟用是一次性設定,之後新建的資源只要帶了這個 tag,費用就會自動歸入對應維度。

啟用後,cost-centerowner 就從單純的標籤升級成帳單的可查詢維度:

1# 用 AWS CLI 查某個 cost-center 的月費用
2aws ce get-cost-and-usage \
3  --time-period Start=2026-06-01,End=2026-06-30 \
4  --granularity MONTHLY \
5  --filter '{"Tags":{"Key":"cost-center","Values":["cc-1024"]}}' \
6  --metrics BlendedCost \
7  --group-by Type=TAG,Key=owner

「team-payments 這個月花多少」「staging 環境占總成本幾成」變成一張報表而不是一場會議。

成本異常告警

可見性先於優化,這個順序不能反。看不見的成本無法被歸屬,無法歸屬就無法問責,沒有問責就沒有人去做優化。在可見性建立之後,下一步是設一條成本異常告警:

 1resource "aws_ce_anomaly_monitor" "cost" {
 2  name              = "daily-cost-anomaly"
 3  monitor_type      = "DIMENSIONAL"
 4  monitor_dimension = "SERVICE"
 5}
 6
 7resource "aws_ce_anomaly_subscription" "alert" {
 8  name      = "cost-anomaly-alert"
 9  frequency = "DAILY"
10
11  monitor_arn_list = [aws_ce_anomaly_monitor.cost.arn]
12
13  subscriber {
14    type    = "SNS"
15    address = aws_sns_topic.cost_alerts.arn
16  }
17
18  threshold_expression {
19    dimension {
20      key           = "ANOMALY_TOTAL_IMPACT_ABSOLUTE"
21      values        = ["100"]
22      match_options = ["GREATER_THAN_OR_EQUAL"]
23    }
24  }
25}

當告警觸發時,因為有 tag,可以立刻定位是哪個團隊的哪類資源在漲,而不是面對一個無法拆解到具體團隊或資源類型的總數。常見的成本異常來源:開發者開了一組大型 instance 測試後忘了關、某個 auto-scaling group 的最大值設太高在流量尖峰長出了大量機器、NAT Gateway 被大量出站流量灌到帳單翻倍。這些情境只要 tag 到位,都能在異常告警觸發後幾分鐘內找到根因。

到了「知道誰花多少、接下來怎麼省」這一步 — reserved instance 的承諾折扣、spot 的可中斷算力、閒置資源的 rightsizing 與排程關機 — 就進入 devops 模組八:成本管理 的運行期優化範圍。這一章負責的是讓那些優化「有帳可查、有人可問」。

成本治理在不同規模下的操作形態差異很大。Netflix 把多套關聯式資料庫統一到 Aurora 後成本下降 28%,核心操作是「把資源種類收斂、讓成本歸因的維度減少」——這在 tagging 已經到位的前提下才做得到,見 9.C23 Netflix:Aurora 整併。另一個極端是 Arcjet 用 Redis Streams 取代 managed Kafka,年費從六位數美金降到約 $1k,代價是自行維護 retention 與 consumer group 監控——這個取捨的前提是團隊有能力承擔額外的運維面,見 3.C43 Arcjet:Redis Streams 取代 Kafka

最小可行節奏:先把地基跑起來,再逐步加

治理的最小可行節奏,是早期只立「拔掉就會痛、補起來很貴」的那幾條規範,其餘留到規模逼出需求時再加。治理機制本身有維護成本 — 每一條策略規則、每一個審批關卡、每一套標籤分類法都要有人維護、有人解釋、有人在它擋錯東西時來救。在團隊還小、資源還少時堆滿企業級治理框架,付出的是當下的速度,換來的是一套還用不到的複雜度。

補救成本曲線

判斷一條治理規範該不該現在就立,看它的「補救成本曲線」— 越晚導入、事後補救的代價越高的規範,越應該提前立:

規範補救成本曲線day-1 該立說明
Tagging陡峭幾百個沒 tag 的資源要回頭考古,建立時順手標只要幾秒
Secrets 不進 code幾乎垂直密鑰一旦進了 git 歷史就無法清除,只能輪替
成本分攤維度中等是(輕量)依賴 tagging,tag 立了它就近乎免費啟用
Secret 自動輪替平緩手動輪替在早期可接受,自動化在 secret 數量增多後再投入
細緻的審批流程平坦補救成本低、可以隨時加,早期硬上反而拖慢交付
多層級策略引擎(OPA / Sentinel)平坦等到 tag policy 擋不住的邊界案例出現再引入

這個曲線給出的節奏是:補救成本陡的從第一天就用 IaC 強制,補救成本平的等到痛點確實出現 — 開始有人手滑誤刪、開始有跨團隊的權限爭議 — 再有針對性地加。那時你也才知道該往哪個方向加。

過度治理的訊號

過度治理跟過度設計是同一類問題,訊號很類似:

  • 建一個測試用的小資源需要走三層審批流程
  • 團隊花在解釋為什麼某個護欄擋錯的時間,比護欄實際擋住的風險還多
  • 策略規則的 exception 清單比規則本身還長
  • 新人第一週的大部分時間花在理解治理框架而非理解業務

這些訊號出現時,該回頭簡化 — 砍掉沒帶來價值的規則、把誤判率高的規則降級為 warning 而非 blocking。治理框架跟程式碼一樣需要重構。

和其他模組的節奏對齊

這個節奏跟模組零的成熟度階梯是同一套思路:基礎設施的治理跟基礎設施本身一樣,是逐級長出來的,不是一次到位設計完的。把規範變成自動護欄的工程(PR 階段擋缺 tag、CI 掃 secret)值得早投入,因為自動化的護欄維護成本低、且越早接管越省人力 — 這部分怎麼落地在模組七:infra 走 PR 流程 展開。

跨分類引用