mcpField
A
azure-cost-optimization

azure-cost-optimization

公式
github.com/microsoftセキュリティ1.6k208.3k 回インストール今日更新
リポジトリ

azure-cost-optimization について

azure-cost-optimizationは、Azureサブスクリプションの節約機会を探すスキルです。支出削減、孤立リソースの整理、サービスの適正サイズ化を行うチーム向けで、実コストと利用状況をレポートにまとめます。変更や削除の前に承認と安全手順を求めます。

主な機能

  1. 01孤立・未使用リソースの特定
  2. 02利用状況に基づく適正サイズ化
  3. 03実コストとメトリクスの照会
  4. 04レポートと監査記録の作成
  5. 05実施時の安全要件

活用シーン

  1. 01サブスクリプションの節約機会分析
  2. 02未使用ディスクやネットワークインターフェースの特定
  3. 03VMやコンテナーのサイズ評価
  4. 04コスト根拠付き最適化レポートの作成

MCP 対応

ベストプラクティスやサービスのリソース情報にはAzure MCPを優先し、スキャンにはそのazqr拡張を使用します。AKS固有の操作ではmcp_azure_mcp_aksを優先します。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/microsoft/azure-skills --skill azure-cost-optimization

インストール後、Claude Code で/azure-cost-optimizationを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
auth-best-practices.md
azure-aks-anomalies.md
azure-aks-cost-addon.md
azure-quick-review.md
azure-redis.md
azure-resource-graph.md
references/sdk/
azure-resource-manager-redis-dotnet.md
templates/
redis-detailed-cache-analysis.md
redis-subscription-level-report.md

詳細

Azure コスト最適化スキル

孤立したリソースのクリーンアップ、適正サイズへの変更、実際の使用状況データに基づく最適化の推奨事項を通じて、Azure サブスクリプションを分析し、コスト削減の機会を特定します。

このスキルを使用する場面

ユーザーから次の依頼があった場合に、このスキルを使用します。

  • Azure のコストを最適化する、または支出を削減する
  • コスト削減のために Azure サブスクリプションを分析する
  • コスト最適化レポートを作成する
  • 孤立したリソースや未使用のリソースを見つける
  • Azure VM、コンテナー、またはサービスの適正サイズを判断する
  • Azure で支出が過剰になっている箇所を特定する
  • 特に Redis のコストを最適化する - Redis に特化した分析については、Azure Redis コスト最適化を参照してください

手順

ユーザーとの会話で、次の手順に従ってください。

Step 0: 前提条件の確認

開始する前に、次のツールとアクセス許可が利用可能であることを確認してください。

必須ツール:

  • Azure CLI がインストールされ、認証済みであること(az login)
  • Azure CLI 拡張機能:costmanagement、resource-graph
  • Azure Quick Review(azqr)がインストールされていること。詳細はAzure Quick Reviewを参照してください

必須のアクセス許可:

  • Cost Management Reader ロール
  • Monitoring Reader ロール
  • サブスクリプション/リソース グループの Reader ロール

確認用コマンド:

az --version
az account show
az extension show --name costmanagement
azqr version
Step 1: ベストプラクティスの読み込み

推奨事項の参考として、Azure のコスト最適化に関するベストプラクティスを取得します。

// Use Azure MCP best practices tool
mcp_azure_mcp_get_azure_bestpractices({
  intent: "Get cost optimization best practices",
  command: "get_bestpractices",
  parameters: { resource: "cost-optimization", action: "all" }
})
Step 1.5: Redis に特化した分析(条件付き)

ユーザーが特に Redis のコスト最適化を依頼した場合は、Redis 専用のスキルを使用してください。

📋 参考資料:Azure Redis コスト最適化

Redis に特化した分析を使用する場面:

  • ユーザーが「Redis」、「Azure Cache for Redis」、または「Azure Managed Redis」に言及している
  • 焦点がサブスクリプション全般の分析ではなく、Redis リソースの最適化である
  • ユーザーが Redis に特化した推奨事項(SKU のダウングレード、失敗したキャッシュなど)を求めている

主な機能:

  • 対話形式のサブスクリプション絞り込み(プレフィックス、ID、または「すべてのサブスクリプション」)
  • Redis に特化した最適化ルール(失敗したキャッシュ、過剰なティア、タグの欠落)
  • Redis のコスト分析用レポートテンプレート
  • redis_list コマンドを使用

利用可能なレポートテンプレート:

注:Redis を含むサブスクリプション全体のコストを最適化する場合は、Step 2 に進んでください。Redis のみに焦点を当てて分析する場合は、Redis 専用の参考資料の手順に従ってください。

Step 1.6: 分析範囲の選択(Redis に特化した分析の場合)

Redis のコスト最適化を行う場合は、分析範囲をユーザーに選択してもらいます。

次の選択肢を提示してください:

  1. 特定の Subscription ID - 1 つのサブスクリプションを分析する
  2. サブスクリプション名 - ID の代わりに表示名を使用する
  3. サブスクリプションのプレフィックス - 指定したプレフィックスで始まるすべてのサブスクリプションを分析する(例:「CacheTeam」)
  4. すべてのサブスクリプション - アクセス可能なすべてのサブスクリプションをスキャンする
  5. テナント全体 - 組織全体を分析する

ユーザーの回答を待ってから、Step 2 に進んでください。

ステップ 1.7:AKS 固有の分析(条件付き)

ユーザーが AKS のコスト最適化を明示的に依頼した場合は、AKS 専用のリファレンスファイルを使用します。

AKS 固有の分析を使用する場合:

  • ユーザーが「AKS」、「Kubernetes」、「クラスター」、「ノードプール」、「ポッド」、「kubectl」に言及している
  • ユーザーが AKS コスト分析アドオンまたは名前空間ごとのコスト可視化を有効にしたい
  • ユーザーがコストの急増やクラスター使用率の異常を報告している、または予算アラートを希望している

ツールの選択:

  • まず MCP を優先:AKS の操作(クラスターの一覧表示、ノードプールの取得、構成の調査)には mcp_azure_mcp_aks を使用します。より豊富なメタデータを提供し、このリポジトリの AKS スキル規約との一貫性もあります。
  • CLI にフォールバック:特定の操作を MCP サーフェス経由で実行できない場合に限り、az aks と kubectl を使用します。

リファレンスファイル(依頼に必要なものだけを読み込みます):

注:AKS リソースグループを含むサブスクリプション全体の一般的なコスト最適化については、ステップ 2 に進んでください。AKS に焦点を当てた分析については、上記の該当するリファレンスファイルの手順に従ってください。

ステップ 1.8:分析範囲を選択する(AKS 固有の分析の場合)

AKS のコスト最適化を実施する場合は、分析範囲を選択するようユーザーに尋ねます。

次の選択肢を提示します:

  1. 特定のクラスター名 - 単一の AKS クラスターを分析します
  2. リソースグループ - リソースグループ内のすべてのクラスターを分析します
  3. サブスクリプション ID - サブスクリプション内のすべてのクラスターを分析します
  4. すべてのクラスター - アクセス可能なすべてのサブスクリプションのクラスターをスキャンします

ステップ 2 に進む前に、ユーザーの応答を待ちます。

ステップ 2:Azure Quick Review を実行する

azqr を実行して孤立したリソースを見つけます(すぐにコストを削減できます)。

📋 リファレンス:Azure Quick Review - azqr スキャンの実行手順

// Use Azure MCP extension_azqr tool
extension_azqr({
  subscription: "<SUBSCRIPTION_ID>",
  "resource-group": "<RESOURCE_GROUP>"  // optional
})

azqr の結果で確認する項目:

  • 孤立したリソース:未接続のディスク、未使用の NIC、アイドル状態の NAT ゲートウェイ
  • 過剰にプロビジョニングされたリソース:保持期間の過剰設定、サイズが大きすぎる SKU
  • コストタグの不足:適切なコスト配分が設定されていないリソース

注:Azure Quick Review のリファレンスドキュメントには、フィルター構成の作成、output/ フォルダーへの出力の保存、コスト最適化に向けた結果の解釈についての手順が記載されています。

ステップ 3:リソースを検出する

サブスクリプションをまたいだリソースを効率的に検出するには、Azure Resource Graph を使用します。孤立したリソースの検出とコスト最適化のパターンについては、Azure Resource Graph クエリを参照してください。

Azure MCP ツールまたは CLI を使用して、サブスクリプション内のすべてのリソースを一覧表示します。

# Get subscription info
az account show

# List all resources
az resource list --subscription "<SUBSCRIPTION_ID>" --resource-group "<RESOURCE_GROUP>"

# Use MCP tools for specific services (preferred):
# - Storage accounts, Cosmos DB, Key Vaults: use Azure MCP tools
# - Redis caches: use mcp_azure_mcp_redis tool (see ./references/azure-redis.md)
# - Web apps, VMs, SQL: use az CLI commands
ステップ 4:実際のコストをクエリする

Azure Cost Management API から実際のコストデータを取得します(過去 30 日間)。

コストクエリファイルを作成する:

次の内容で temp/cost-query.json を作成します。

{
  "type": "ActualCost",
  "timeframe": "Custom",
  "timePeriod": {
    "from": "<START_DATE>",  
    "to": "<END_DATE>"
  },
  "dataset": {
    "granularity": "None",
    "aggregation": {
      "totalCost": {
        "name": "Cost",
        "function": "Sum"
      }
    },
    "grouping": [
      {
        "type": "Dimension",
        "name": "ResourceId"
      }
    ]
  }
}

必要な操作:ISO 8601 形式(例:2025-11-03T00:00:00Z)で <START_DATE>(30 日前)と <END_DATE>(今日)を計算します。

コストクエリを実行する:

# Create temp folder
New-Item -ItemType Directory -Path "temp" -Force

# Query using REST API (more reliable than az costmanagement query)
az rest --method post `
  --url "https://management.azure.com/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.CostManagement/query?api-version=2023-11-01" `
  --body '@temp/cost-query.json'

**重要:**監査証跡のため、クエリ結果を output/cost-query-result<timestamp>.json に保存します。

ステップ 5:料金を検証する

fetch_webpage を使用して、Azure 公式料金ページから現在の料金を取得します。

// Validate pricing for key services
fetch_webpage({
  urls: ["https://azure.microsoft.com/en-us/pricing/details/container-apps/"],
  query: "pricing tiers and costs"
})

検証する主なサービス:

重要:無料利用枠を確認してください。多くの Azure サービスには十分な無料利用枠があり、コストが $0 である理由を説明できる場合があります。

ステップ 6:使用率メトリックを収集する

Azure Monitor にクエリを実行して、適正なサイズへの変更に関する推奨事項の裏付けとなる使用率データを取得します(過去 14 日間)。

# Calculate dates for last 14 days
$startTime = (Get-Date).AddDays(-14).ToString("yyyy-MM-ddTHH:mm:ssZ")
$endTime = Get-Date -Format "yyyy-MM-ddTHH:mm:ssZ"

# VM CPU utilization
az monitor metrics list `
  --resource "<RESOURCE_ID>" `
  --metric "Percentage CPU" `
  --interval PT1H `
  --aggregation Average `
  --start-time $startTime `
  --end-time $endTime

# App Service Plan utilization
az monitor metrics list `
  --resource "<RESOURCE_ID>" `
  --metric "CpuTime,Requests" `
  --interval PT1H `
  --aggregation Total `
  --start-time $startTime `
  --end-time $endTime

# Storage capacity
az monitor metrics list `
  --resource "<RESOURCE_ID>" `
  --metric "UsedCapacity,BlobCount" `
  --interval PT1H `
  --aggregation Average `
  --start-time $startTime `
  --end-time $endTime
ステップ 7:最適化レポートを生成する

output/ フォルダーに、コスト最適化レポートを包括的に作成します。

create_file ツールを使用し、パスを output/costoptimizereport<YYYYMMDD_HHMMSS>.md に指定します。

レポートの構成:

# Azure Cost Optimization Report
**Generated**: <timestamp>

## Executive Summary
- Total Monthly Cost: $X (💰 ACTUAL DATA)
- Top Cost Drivers: [List top 3 resources with Azure Portal links]

## Cost Breakdown
[Table with top 10 resources by cost, including Azure Portal links]

## Free Tier Analysis
[Resources operating within free tiers showing $0 cost]

## Orphaned Resources (Immediate Savings)
[From azqr - resources that can be deleted immediately]
- Resource name with Portal link - $X/month savings

## Optimization Recommendations

### Priority 1: High Impact, Low Risk
[Example: Delete orphaned resources]
- 💰 ACTUAL cost: $X/month
- 📊 ESTIMATED savings: $Y/month
- Commands to execute (with warnings)

### Priority 2: Medium Impact, Medium Risk
[Example: Rightsize VM from D4s_v5 to D2s_v5]
- 💰 ACTUAL baseline: D4s_v5, $X/month
- 📈 ACTUAL metrics: CPU 8%, Memory 30%
- 💵 VALIDATED pricing: D4s_v5 $Y/hr, D2s_v5 $Z/hr
- 📊 ESTIMATED savings: $S/month
- Commands to execute

### Priority 3: Long-term Optimization
[Example: Reserved Instances, Storage tiering]

## Total Estimated Savings
- Monthly: $X
- Annual: $Y

## Implementation Commands
[Safe commands with approval warnings]

## Validation Appendix

### Data Sources and Files
- **Cost Query Results**: `output/cost-query-result<timestamp>.json`
  - Raw cost data from Azure Cost Management API
  - Audit trail proving actual costs at report generation time
  - Keep for at least 12 months for historical comparison
  - Contains every resource's exact cost over the analysis period
- **Pricing Sources**: [Links to Azure pricing pages]
- **Free Tier Allowances**: [Applicable allowances]

> **Note**: The `temp/cost-query.json` file (if present) is a temporary query template and can be safely deleted. All permanent audit data is in the `output/` folder.

ポータルリンクの形式:

https://portal.azure.com/#@<TENANT_ID>/resource/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/<RESOURCE_PROVIDER>/<RESOURCE_TYPE>/<RESOURCE_NAME>/overview
ステップ 8:監査証跡を保存する

検証用に、すべてのコストクエリの結果を保存します。

create_file ツールを使用し、パスを output/cost-query-result<YYYYMMDD_HHMMSS>.json に指定します。

{
  "timestamp": "<ISO_8601>",
  "subscription": "<SUBSCRIPTION_ID>",
  "resourceGroup": "<RESOURCE_GROUP>",
  "queries": [
    {
      "queryType": "ActualCost",
      "timeframe": "MonthToDate",
      "query": { },
      "response": { }
    }
  ]
}
ステップ 9:一時ファイルを削除する

レポートの生成後、一時クエリファイルとフォルダーを削除します。

# Delete entire temp folder (no longer needed)
Remove-Item -Path "temp" -Recurse -Force -ErrorAction SilentlyContinue

注:temp/cost-query.json ファイルが必要なのは、API の実行中のみです。実際のクエリと結果は、監査用に output/cost-query-result*.json に保存されています。

出力

このスキルでは、次のものが生成されます。

  1. コスト最適化レポート(output/costoptimizereport<timestamp>.md)

    • 合計コストと主な要因を含むエグゼクティブサマリー
    • Azure ポータルへのリンクを含む詳細なコスト内訳
    • 実際のデータと推定削減額に基づく、優先順位付けされた推奨事項
    • 安全性に関する警告を含む実装コマンド
  2. コストクエリの結果(output/cost-query-result<timestamp>.json)

    • すべてのコストクエリと応答の監査証跡
    • 推奨事項の検証に関する証拠

重要な注意事項

データの分類
  • 💰 実データ = Azure Cost Management API から取得
  • 📈 実測指標 = Azure Monitor から取得
  • 💵 検証済み価格 = Azure の公式料金ページから取得
  • 📊 推定削減額 = 実データと検証済み価格に基づいて算出
ベストプラクティス
  • 必ず最初に実際のコストをクエリしてください。決して推定や憶測で済ませないでください。
  • 公式な情報源から価格を検証し、無料枠を考慮してください。
  • コストクエリには REST API を使用してください(az costmanagement query よりも信頼性が高いため)。
  • 監査証跡を保存し、すべてのクエリと応答を含めてください。
  • すべてのリソースに Azure ポータルへのリンクを含めてください。
  • レポートファイルの作成時は UTF-8 エンコーディングを使用してください。
  • コストが月額 10 ドル未満の場合は、金銭的な節約よりも運用改善を重視してください。
  • 明示的な承認なしに、破壊的な操作を決して実行しないでください。
よくある落とし穴
  • コストを憶測する:必ず Cost Management API から実データをクエリしてください。
  • 無料枠を無視する:多くのサービスには十分な無料利用枠があります(例:Container Apps は月あたり 180K vCPU 秒が無料)。
  • 誤った日付範囲を使用する:コストには 30 日、利用状況には 14 日を使用してください。
  • ポータルリンクが機能しない:テナント ID とリソース ID の形式を確認してください。
  • コストクエリの失敗:az costmanagement query ではなく、JSON 本文を指定して az rest を使用してください。
安全性に関する要件
  • リソースを削除する前に承認を得てください。
  • まず本番環境以外で変更をテストしてください。
  • 検証用のドライランコマンドを提示してください。
  • ロールバック手順を含めてください。
  • 実装後の影響を監視してください。

SDK クイックリファレンス

  • Redis の管理:.NET

コメント