Cloud Cost Agent (AWS + GCP + Azure)
主要3プロバイダーを対象とした、統一されたネイティブクラウドコスト最適化エージェントスキル。
必要条件: AWS CLI v2、gcloud、Azure CLIが読み取りアクセス権(請求、レコメンダー、アドバイザーサービス)で設定されていること。一部のソースは一度だけのオプトインが必要です:AWS Compute Optimizer と Cost Optimization Hub(登録)、GCP Recommender(API有効化、約24~48時間のデータ蓄積)。いくつかのGCPフィルターで jq を使用します。
基本ルール: 常にプロバイダーの公式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に従うか、AWSでは--no-paginate/--max-itemsを、gcloudでは--page-size/--limitを意図的に使用します。1ページだけの読み取りでは誤った合計になります。 - クラウドから取得した値はすべて引用符で囲む/エスケープする。 API出力からのリソース名、タグ、IDにはシェルのメタ文字が含まれる可能性があります。それらを引用符で囲まずに別のシェルコマンドに挿入しないでください。
- APIコストとループに注意する。
aws ce(Cost Explorer)はリクエストあたり約$0.01の費用がかかります。Cost Explorerの呼び出しをループさせないでください。結果をセッション内でキャッシュし、監査あたりの呼び出し回数を数回に制限します。 - 優先順位:推定節約額が高い順 → 労力が低い順。
- クイックウィン(アイドルリソースの削除、小規模インスタンスへのリサイジング、明確なケースでのコミットメント利用の有効化)を優先します。
移植性のある日付ヘルパー
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 形式の日付を挿入させるだけでも構いません。)
使用方法
エージェントにプロバイダーと目標を伝えます。例:
AWS の過去30日間を監査GCP と Azure のクイックウィンを見つける全クラウドのリサイジング推奨
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 # オプトイン
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 Cost カテゴリ
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 コマンドはありません)。Billing → BigQueryエクスポートを有効にし、gcp_billing_export_resource_v1_<BILLING_ACCOUNT_ID> テーブルにクエリを実行します。
注:2026-01-21時点でエクスポートスキーマが変更されました — CUD割引は
credits配列から新しいconsumption_modelフィールドに移動され、price.list_price/price.effective_price_defaultが追加されました。CUD/クレジットロジックをそれに応じて更新してください。
Azure — 詳細データにはCost Management エクスポート(またはCost Details API)を推奨します。az consumption はMicrosoftの非推奨パスにあります(簡易確認のフォールバックとしてのみ保持):
# プライマリ: エクスポートをストレージにスケジュール/実行(1回限りの実行には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 Query 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 Costの推奨にはすでにVMのリサイジング/十分に活用されていないリソースが含まれています(セクション2)。
5. コミットメントと割引
AWS — Savings Plans購入推奨。4つのパラメータはすべて必須です:
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の消費ベースコミットメントレコメンダーを介したCommitted Use Discounts。
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. 優先順位付けテンプレート(任意のプロバイダー向け)
要約する際は:
- 推定月間/年間節約額の合計。
- クイックウィンバケット(VeryLow/Lowの労力または同等)。
- 上位5~8項目: リソース、現在の状態、推奨アクション、節約額、労力/リスク。
- 最優先項目に対する具体的な次のコマンド。
プロバイダー: GCP
潜在的な月間節約額の合計: $2,340
クイックウィン:
- アイドルVMを削除 ... : $180/月 (VeryLow)
- 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推奨の主要ソースです。
- 生の使用量データには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アクション移行(aws-portal廃止): https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/migrate-granularaccess-iam-mapping-reference.html
GCP
- レコメンダー一覧: 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
特定のプロバイダー、または3つすべてを対象に実行してください。ネイティブに。効果的に。