Azure國際帳號優惠 Azure 賬單明細導出與核對
為什麼你的 Azure 賬單總像在玩「大家找碴」?
\n你是不是也經歷過:財務部傳來一張 Excel,標題是〈請確認 8 月 Azure 支出異常飆升〉;IT 主管盯著 Cost Management 儀表板皺眉說「這筆 $1,247.83 的 Virtual Machine 費用,我根本沒開過」;而你翻遍所有 Resource Group,只看到三台閒置的 B2s 測試機——加起來也不到 $30/月。
\n別慌。這不是系統故障,也不是有人偷偷開了加密貨幣挖礦叢集(雖然得先檢查一下),而是 Azure 賬單的「明細層級」與「人類直覺」之間,存在一道幽微但致命的鴻溝。Azure 不會寄給你一張印著「VM-A-PROD-DB-SERVER:$892.50(含 73% 預留實例折扣)」的發票——它給你的是一份 23 欄、87,412 列、含 17 種計費類型、時區混搭(UTC+0 vs UTC+8)、資源 ID 長度堪比基因序列的 CSV 檔案。
\n所以,「導出」只是開始,「核對」才是生死關卡。
\n\nAzure國際帳號優惠 四把鑰匙:導出賬單明細的正確姿勢
\n① Portal 點選法(適合緊急查證,不建議長期使用)
\n登入 Azure Portal → 左側選單「Cost Management + Billing」→「Cost Management」→「Cost analysis」→ 右上角「Export」→ 選擇「Current view as CSV」或「All data as CSV」。注意!「Current view」只匯出畫面上看到的聚合後資料(例如按 Service Name 分組的總額),根本不是明細! 必須選「All data」才會拿到每筆消費紀錄(每行代表一次計費事件)。導出前,請務必先設定好時間範圍(建議精確到「Billing Period」而非「Usage Date」)、分組依據(至少勾選「Resource ID」和「Meter Category」),否則你會收到一份連自己都認不出來的亂碼。
\n\n② PowerShell 大法(自動化首選,需安裝 Az.Billing 模組)
\n# 登入並切換至訂閱\nConnect-AzAccount
Set-AzContext -SubscriptionId 'xxx-xxx-xxx'
# 取得最新帳單週期 ID(關鍵!)
$billingPeriod = Get-AzBillingPeriod | Select-Object -First 1
# 導出明細(支援 JSON 或 CSV)
Get-AzBillingPeriod -Name $billingPeriod.Name | \
Get-AzBillingPeriodUsageDetail -Expand 'properties/meterDetails' | \
ConvertTo-Csv -NoTypeInformation | \
Out-File \"Azure_Billing_$(Get-Date -Format 'yyyyMMdd_HHmm')_Raw.csv\"\n優點:可寫入排程任務(Windows Task Scheduler 或 Azure Automation),每日凌晨自動抓前一日明細;缺點:API 回應上限 10,000 筆,大客戶需加 -Top 50000 並分頁處理。
③ Azure CLI(Linux/macOS 工程師的摯愛)
\naz login
az account set --subscription "Prod-Subscription"
# 直接輸出 JSON,再用 jq 精準過濾
az billing period list --query '[0].name' -o tsv | \
xargs -I {} az billing period show --billing-period-name {} --expand 'properties/meterDetails' -o json | \
jq '.properties.usageDetails[] | select(.meterCategory==\"Virtual Machines\") | {resourceId, meterName, quantity, costInUSD}' > vm_usage.json\n小技巧:用 jq 抓出「costInUSD」、「usageStart」、「meterSubCategory」三欄,立刻篩掉 80% 無關噪音。
④ REST API(最靈活,適合整合 ERP 或自建 BI)
\n端點:GET https://management.azure.com/providers/Microsoft.Billing/billingPeriods/{periodName}/providers/Microsoft.Consumption/usageDetails?api-version=2023-11-01&$expand=meterDetails&$top=10000
認證:Bearer Token(從 az account get-access-token --resource https://management.core.windows.net/ 取得)
重點提醒:API 回應中 usageStart 和 usageEnd 是 UTC 時間,而財務報表常用「台灣時間(UTC+8)」,若未轉換,你會發現「8/1 的費用」其實是 7/31 16:00–8/1 15:59 的消耗——這就是跨日誤差的根源。
CSV 明細表:12 個欄位,只有 5 個真正重要
\n打開導出的 CSV,別被 23 欄嚇跑。以下是你每天必須盯死的「黃金五欄」:
\n- \n
- resourceId:唯一身分證。格式如
/subscriptions/xxx/resourceGroups/rg-prod-eastus/providers/Microsoft.Compute/virtualMachines/web01。核對時複製整段貼進 Portal 搜尋框,一秒定位。 \n - meterCategory + meterSubCategory + meterName:三者合體才是真名。例如
MeterCategory=Virtual Machines, MeterSubCategory=Compute, MeterName=B2s≠MeterCategory=Virtual Machines, MeterSubCategory=Storage, MeterName=Managed Disks——後者算在 Storage 底下,別漏掉! \n - quantity:單位未必是「小時」!B2s VM 是「小時」,但「Data Transfer」可能是「GB」,「SQL Database vCore」是「vCore-Hour」。看錯單位,金額直接差十倍。 \n
- costInUSD:表面是金額,實則藏陷阱。若為負值(如
-124.73),大概率是預留實例(RI)或 Savings Plan 的抵扣金額——它不會出現在「帳單總額」裡,但會出現在明細裡,且抵扣發生時間可能比原始消費晚 2–3 天。 \n
其他欄位如 billingAccountId、subscriptionGuid 只用於跨訂閱彙總;tags 欄位若空白,代表該資源未打標籤——這正是你下次推動「強制標籤政策」的最佳證據。
核對 SOP:三階過濾,砍掉 92% 無效比對
\n- \n
- 第一階:時間對齊——將 CSV 全部
usageStart欄轉成「台灣時間」,再依「年月」分組(非「帳單週期」)。因為 Azure 帳單週期是每月 1 日 00:00–次月 1 日 00:00(UTC),換算成台灣時間是每月 1 日 08:00–次月 1 日 08:00,與財務慣用「自然月」不同步。 \n - 第二階:資源歸因——用 Excel Power Query 或 Python pandas,以
resourceId為 key,LEFT JOIN 公司內部的「資源負責人清冊」(含部門、專案代號、SLA 等級)。無主資源自動標紅,列入下週 IT 檢討議程。 \n - 第三階:異常偵測——設定規則:單日
costInUSD > $500且quantity > 24(代表非 24 小時制計費)→ 自動發 Slack 通知;meterName含「Dev/Test」但costInUSD > $200→ 觸發自動停機腳本。 \n
血淚實錄:我們曾為 0.3 美元吵了三天
\n某金融客戶的 5 月帳單出現一筆 $0.32 的 Application Gateway Data Processed 費用。網路組堅持「沒開 AGW」,資安組說「WAF 規則有啟用」,開發組翻 Git 歷史確認「AGW 已下線三個月」。最後追蹤到:某工程師在測試環境部署 Terraform 時,忘記加上 enabled = false,導致 AGW 進入「空轉待命」狀態——雖無流量,但 Azure 仍按分鐘計收「管理平面」基本費。解決方案?不是刪資源,而是補上 sku = { name = "WAF_v2" tier = "WAF_v2" },讓系統識別為「已啟用但無流量」,改收 $0.00。
七個你絕不能忽略的實戰提醒
\n- \n
- 💡 Azure Advisor 不會提醒你「帳單格式變更」,但每年 Q1 都會更新 API 版本(如 2023-11-01 → 2024-02-01),舊腳本可能突然回傳空陣列。 \n
- 💡 「免費層」服務(如 App Service Free)若超出配額,會自動升級為 Basic 層,費用暴增但 Portal 不跳警告,只默默出現在明細裡。 \n
- 💡 使用「Azure Hybrid Benefit」時,明細中
costInUSD會顯示「$0.00」,但meterName會標註「(AHB)」,務必與 Windows Server 授權清冊交叉比對。 \n - 💡 導出 CSV 的「Encoding」預設是 UTF-8 without BOM,若用 Excel 開會亂碼,請改用 Notepad++ 轉成 UTF-8 with BOM 再開啟。 \n
- 💡 「跨區域複製」的 Storage 費用,會同時出現在「來源 region」的「Outbound Data Transfer」和「目標 region」的「Inbound Data Transfer」兩欄,別重複計算。 \n
- 💡 若啟用「Budget Alerts」,閾值是「預估費用」,而明細是「實際結算費用」,兩者可能差 ±5%,別拿 Alert 數字去硬套明細。 \n
- 💡 最後,也是最重要的:每月 5 日前,把導出的 CSV、核對紀錄、異常說明,用「Readme.md」格式寫進公司內部 Wiki,標題統一為「[YYYY-MM] Azure 賬單核對報告」——因為明年審計師敲門時,你不會想靠記憶回答「那筆 $2,189 的 Cosmos DB 費用,到底誰核准的?」 \n


