Cloud Cost Agent (AWS + GCP + Azure)
統一的代理技能,針對 三大頂級雲端供應商的原生成本優化。
需求:AWS CLI v2、gcloud 及/或 Azure CLI,並已設定為具有對帳單/建議程式/顧問服務的讀取權限。部分來源需要一次性啟用:AWS Compute Optimizer 和 Cost Optimization Hub(註冊),GCP Recommender(啟用 API,約需 24-48 小時的數據)。jq 用於一些 GCP 篩選器中。
核心規則:一律使用供應商的官方 CLI 和推薦引擎。不使用第三方工具。
安全性與最佳實踐(所有供應商)
- 唯讀優先。 切勿在未向使用者引用確切命令並取得明確核准的情況下執行變更命令(
aws ec2 terminate-instances/stop-instances、gcloud compute instances delete、az vm delete/deallocate、任何purchase/create/modify)。 - 一律使用供應商認證(
--profile、gcloud --project、az account set)。 - 使用
--query/--format json/-o json以獲得乾淨的輸出。 - 處理分頁。 這些 API 會對結果進行分頁。在報告總計之前彙總每個頁面 — 請遵循
NextToken/nextPageToken,或刻意使用--no-paginate/--max-items(AWS)和--page-size/--limit(gcloud)。只讀取單頁會導致總計錯誤。 - 引用/跳脫所有雲端衍生值。 API 輸出的資源名稱、標籤和 ID 可能包含 shell 元字元。切勿未經引用就將其插入到另一個 shell 命令中。
- 注意 API 成本與迴圈。
aws ce(Cost Explorer)每次請求收費約 $0.01 美元。不要對 Cost Explorer 呼叫進行迴圈;將結果快取在 session 中,並將每次稽核的呼叫次數維持在少數幾次。 - 優先順序:最高預估節省 → 最低工作量。
- 偏好快速勝利(刪除閒置資源、縮小規模、在清楚時啟用承諾使用)。
可攜式日期輔助工具
BSD/macOS 和 GNU/Linux 的 date 不同。以可攜式方式計算一次時間範圍,然後重複使用 $START/$END:
START=$(date -u -d '30 days ago' +%Y-%m-%d 2>/dev/null || date -u -v-30d +%Y-%m-%d)
END=$(date -u +%Y-%m-%d)
(或者直接讓代理插入文字形式的 YYYY-MM-DD 日期。)
如何使用
告訴代理供應商和目標。範例:
audit AWS last 30 daysfind quick wins on GCP and Azurerightsizing recommendations for all clouds
1. 前置檢查與身分驗證
AWS
aws sts get-caller-identity
aws ce get-cost-and-usage \
--time-period Start=$START,End=$END \
--granularity MONTHLY --metrics "UnblendedCost"
一次性註冊(第 2 與第 4 節需要):
aws compute-optimizer get-enrollment-status
aws compute-optimizer update-enrollment-status --status Active # opt in
aws cost-optimization-hub list-enrollment-statuses --region us-east-1
aws cost-optimization-hub update-enrollment-status --status Active --region us-east-1
GCP
gcloud auth list
gcloud config set project YOUR_PROJECT
gcloud billing accounts list
Azure
az account show
az account set --subscription "SUB_ID"
2. 集中式/高影響力建議
AWS — Cost Optimization Hub(最佳彙總器)
COH 是一個僅在 us-east-1 中可達的全域服務,且需要註冊(請參閱前置檢查)。
aws cost-optimization-hub list-recommendations \
--region us-east-1 \
--filter '{"implementationEfforts":["VeryLow","Low"]}' \
--query 'items[?estimatedMonthlySavings > `10`] | sort_by(@, &estimatedMonthlySavings) | reverse(@)' \
--output json
有效的 implementationEfforts:VeryLow | Low | Medium | High | VeryHigh。
GCP — Recommender(主要來源)
--location 是必填的。VM/閒置建議程式是可用區域層級的(例如 us-central1-a);請迭代您使用的區域。基於支出的承諾建議程式是**global,且範圍限定在帳單帳戶**。
# 調整 VM 大小(區域層級 — 每個區域重複)
gcloud recommender recommendations list \
--recommender=google.compute.instance.MachineTypeRecommender \
--project=YOUR_PROJECT --location=us-central1-a --format=json
# 閒置 VM(區域層級 — 每個區域重複)
gcloud recommender recommendations list \
--recommender=google.compute.instance.IdleResourceRecommender \
--project=YOUR_PROJECT --location=us-central1-a \
--format="table(description, primaryImpact.costProjection.cost.units, stateInfo.state)"
# 承諾使用折扣(全域,範圍限定於帳單帳戶)
gcloud recommender recommendations list \
--recommender=google.cloudbilling.commitment.SpendBasedCommitmentRecommender \
--billing-account=BILLING_ACCOUNT_ID --location=global --format=json
其他成本建議程式:google.compute.disk.IdleResourceRecommender(閒置磁碟)、google.compute.address.IdleResourceRecommender(閒置 IP)、google.compute.image.IdleResourceRecommender(閒置映像檔)、google.compute.commitment.UsageCommitmentRecommender(基於資源的 CUD)。
Azure — Advisor 成本類別
az advisor recommendation list \
--category Cost \
--query "[].{Resource: shortDescription.problem, Impact: impact, AnnualSavings: extendedProperties.annualSavingsAmount, Currency: extendedProperties.savingsCurrency}" \
-o table
# 僅高影響力項目
az advisor recommendation list --category Cost \
--query "[?impact=='High'].{Id:id, Resource:resourceMetadata.resourceId, Savings:extendedProperties.annualSavingsAmount}" -o json
extendedProperties 欄位因建議類型而異 — 請處理 null 值。
3. 成本與使用量明細
AWS(請記住每次呼叫約 $0.01 美元的成本 — 不要迴圈):
aws ce get-cost-and-usage \
--time-period Start=$START,End=$END \
--granularity DAILY --metrics "UnblendedCost" \
--group-by Type=DIMENSION,Key=SERVICE
GCP — 詳細的成本/使用量來自 BigQuery 帳單匯出(沒有 gcloud 命令可以取得細粒度成本行)。啟用帳單 → BigQuery 匯出,然後查詢 gcp_billing_export_resource_v1_<BILLING_ACCOUNT_ID>。
注意:截至 2026-01-21,匯出結構描述已變更 — CUD 折扣已從
credits陣列移至新的consumption_model欄位,並新增了price.list_price/price.effective_price_default。請相應更新任何 CUD/credit 邏輯。
Azure — 偏好 Cost Management 匯出(或 Cost Details API)以取得詳細資料;az consumption 處於 Microsoft 的淘汰路徑上(僅保留作為快速查看的備用方案):
# 主要方式:排程/執行一次匯出到儲存體(一次性執行僅需 5 個必要參數)
az costmanagement export create \
--name AdhocExport --type Usage \
--scope "/subscriptions/SUB_ID" \
--storage-account-id "/subscriptions/.../storageAccounts/ACCT" \
--storage-container exports --timeframe MonthToDate
# 備用快速查看(已淘汰的 API):
az consumption usage list --start-date $START --end-date $END \
--query "[].{Resource:instanceName, Service:consumedService, Cost:pretaxCost}" -o table
若需在沒有儲存體的情況下進行臨時彙總,請透過 az rest 呼叫 Cost Management 查詢 REST API(沒有 az costmanagement query 子命令)。
4. 調整大小與運算建議
AWS — Compute Optimizer(需要註冊;請參閱前置檢查)。深度調整大小 + 閒置檢測:
aws compute-optimizer get-ec2-instance-recommendations
aws compute-optimizer get-auto-scaling-group-recommendations
aws compute-optimizer get-ebs-volume-recommendations
aws compute-optimizer get-lambda-function-recommendations
aws compute-optimizer get-rds-database-recommendations
aws compute-optimizer get-idle-recommendations
Cost Explorer 也提供 EC2 調整大小建議(--service 為必填,僅 "AmazonEC2" 有效):
aws ce get-rightsizing-recommendation --service "AmazonEC2"
GCP — 機器類型建議程式(注意 tonumber:GCP 將 cost.units 回傳為字串):
gcloud recommender recommendations list \
--recommender=google.compute.instance.MachineTypeRecommender \
--project=YOUR_PROJECT --location=us-central1-a --format=json \
| jq '.[] | select((.primaryImpact.costProjection.cost.units|tonumber) < 0)'
Azure — Advisor 成本建議已包含 VM 調整大小/使用率不足的資源(第 2 節)。
5. 承諾與折扣
AWS — Savings Plans 購買建議。所有四個參數皆為必填:
aws ce get-savings-plans-purchase-recommendation \
--savings-plans-type COMPUTE_SP \
--term-in-years ONE_YEAR \
--payment-option NO_UPFRONT \
--lookback-period-in-days THIRTY_DAYS
(savings-plans-type:COMPUTE_SP|EC2_INSTANCE_SP|SAGEMAKER_SP;term-in-years:ONE_YEAR|THREE_YEARS;payment-option:NO_UPFRONT|PARTIAL_UPFRONT|ALL_UPFRONT;lookback-period-in-days:SEVEN_DAYS|THIRTY_DAYS|SIXTY_DAYS。)
GCP — 透過基於支出的承諾建議程式取得承諾使用折扣(第 2 節)。
Azure — 保留/節省方案建議透過 Advisor 顯示(每個訂閱);如需帳單帳戶範圍,請透過 az rest 使用 Consumption Reservation Recommendations REST API:
az advisor recommendation list --category Cost \
--query "[?contains(shortDescription.problem, 'reserved') || contains(shortDescription.problem, 'reservation')]"
6. 優先級範本(適用於任何供應商)
總結時:
- 預估的每月/每年總節省金額。
- 快速勝利群組(工作量非常低/低或同等級)。
- 前 5-8 個項目:資源、目前狀態、建議動作、節省金額、工作量/風險。
- 針對首要項目的具體下一個命令。
供應商:GCP
每月潛在總節省金額:$2,340
快速勝利:
- 刪除閒置 VM ...:180 美元/月(非常低)
- 調整大小 n1-standard-8 → n2-standard-4:420 美元/月
下一個命令:
gcloud recommender recommendations list --recommender=google.compute.instance.IdleResourceRecommender --project=... --location=us-central1-a
供應商特定快速參考
AWS
- Cost Optimization Hub(
us-east-1,已註冊)提供廣泛的彙總檢視。 - Compute Optimizer(已註冊)提供深度調整大小 + 閒置檢測。
- Cost Explorer(
aws ce)用於支出明細、調整大小建議、Savings Plans — 注意每次呼叫的成本。
GCP
務必傳遞 --location。重要建議程式:
- MachineTypeRecommender(調整大小,區域層級)
- IdleResourceRecommender 用於 VM/磁碟/IP/映像檔(區域/地區層級)
- SpendBasedCommitmentRecommender(CUD,全域,帳單帳戶)
Azure
- Advisor 是成本建議的主要來源。
- Cost Management 匯出(或 Cost Details API)用於原始使用量;
az consumption僅作為已淘汰的備用方案。
完整稽核流程(建議)
- 進行身分驗證;確認註冊狀態(Compute Optimizer、COH)。
- 拉取指定時間範圍內的高層級成本摘要。
- 拉取建議(Hub / Recommender / Advisor),彙總所有頁面。
- 篩選出節省金額超過門檻且工作量較低的項目。
- 如有需要,與原始使用量進行交叉比對。
- 產生優先排序清單 + 3 項具體的下一步動作(唯讀;任何變更都需標記以取得核准)。 7.(選擇性)對其他供應商重複上述步驟。
參考資料
AWS
- Cost Explorer:https://docs.aws.amazon.com/cli/latest/reference/ce/
- Compute Optimizer:https://docs.aws.amazon.com/cli/latest/reference/compute-optimizer/
- Cost Optimization Hub:https://docs.aws.amazon.com/cost-management/latest/userguide/cost-optimization-hub.html
- Billing IAM action migration (aws-portal retirement):https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/migrate-granularaccess-iam-mapping-reference.html
GCP
- Recommenders 列表:https://cloud.google.com/recommender/docs/recommenders
recommendations list:https://cloud.google.com/sdk/gcloud/reference/recommender/recommendations/list- BigQuery 帳單匯出:https://cloud.google.com/billing/docs/how-to/export-data-bigquery
Azure
- Advisor 建議:https://learn.microsoft.com/cli/azure/advisor/recommendation
- Cost Management 匯出:https://learn.microsoft.com/cli/azure/costmanagement/export
- Consumption API 遷移:https://learn.microsoft.com/azure/cost-management-billing/automate/migrate-consumption-usage-details-api
使用特定供應商或在所有三個供應商上執行。保持原生。保持高效。