az-cost-optimize について
Azure リソースと IaC ファイルを分析し、コスト削減の機会を見つけるワークフロースキルです。コストと利用状況の根拠を検証し、承認後に個別の GitHub issue と統括用 EPIC issue を作成します。
主な機能
- 01Azure リソースと IaC ファイルを検出
- 02利用指標と現在のコストを確認
- 03根拠に基づく削減案を作成
- 04優先度に応じて提案を評価
- 05承認後に GitHub issue を作成
活用シーン
- 01Azure インフラのコスト削減余地を調査
- 02提案を追跡可能な作業項目に変換
- 03EPIC で複数の最適化を調整
MCP 対応
Azure MCP ツールでベストプラクティスの取得、リソース検出、監視データの確認を行い、必要に応じて Azure CLI に切り替えます。ユーザーの承認後、GitHub MCP ツールで最適化 issue と EPIC issue を作成します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ github/ awesome-copilot --skill az-cost-optimizeインストール後、Claude Code で/az-cost-optimizeを入力して読み込まれたか確認します。
詳細
Azure コスト最適化
このワークフローは、Infrastructure-as-Code (IaC) ファイルと Azure リソースを分析し、コスト最適化の推奨事項を生成します。最適化の機会ごとに個別の GitHub issue を作成し、さらに実装を調整するための EPIC issue を 1 つ作成することで、コスト削減施策の効率的な追跡と実行を可能にします。
前提条件
- Azure MCP サーバーが構成済みで認証されていること
- GitHub MCP サーバーが構成済みで認証されていること
- 対象の GitHub リポジトリが特定されていること
- Azure リソースがデプロイされていること(IaC ファイルは任意ですが、あると役立ちます)
- 利用可能な場合は、直接 Azure CLI を使用するよりも Azure MCP ツール(
azmcp-*)を優先してください
ワークフローの手順
ステップ 1: Azure のベストプラクティスを取得する
アクション: 分析の前にコスト最適化のベストプラクティスを取得します ツール: Azure MCP ベストプラクティスツール プロセス:
- ベストプラクティスの読み込み:
azmcp-bestpractices-getを実行して、最新の Azure 最適化ガイドラインの一部を取得します。これはすべてのシナリオを網羅しているとは限りませんが、基盤となります。- これらのプラクティスを可能な限り活用して、以降の分析と推奨事項に反映させます
- 最適化の推奨事項において、MCP ツールの出力または一般的な Azure ドキュメントのいずれかに基づいてベストプラクティスを参照します
ステップ 2: Azure インフラストラクチャを検出する
アクション: Azure リソースと構成を動的に検出して分析します ツール: Azure MCP ツール + Azure CLI フォールバック + ローカルファイルシステムへのアクセス プロセス:
-
リソースの検出:
azmcp-subscription-listを実行して、利用可能なサブスクリプションを検索しますazmcp-group-list --subscription <subscription-id>を実行して、リソースグループを検索します- 該当するグループ内のすべてのリソースの一覧を取得します:
az resource list --subscription <id> --resource-group <name>を使用します
- 各リソースタイプについて、可能であれば MCP ツールを先に使用し、次に CLI をフォールバックとして使用します:
azmcp-cosmos-account-list --subscription <id>- Cosmos DB アカウントazmcp-storage-account-list --subscription <id>- ストレージアカウントazmcp-monitor-workspace-list --subscription <id>- Log Analytics ワークスペースazmcp-keyvault-key-list- Key Vaultaz webapp list- Web Apps(フォールバック - 利用可能な MCP ツールなし)az appservice plan list- App Service プラン(フォールバック)az functionapp list- Function Apps(フォールバック)az sql server list- SQL Server(フォールバック)az redis list- Redis Cache(フォールバック)- ... その他のリソースタイプについても同様に続けます
-
IaC の検出:
file_searchを使用して IaC ファイルをスキャンします: "/*.bicep"、"/*.tf"、"/main.json"、"/template.json"- リソース定義を解析して、意図された構成を把握します
- 検出されたリソースと比較して、不一致を特定します
- 後続の実装に関する推奨事項のために、IaC ファイルの有無を記録します
- リポジトリ内の他のファイルは使用しないでください。IaC ファイルのみを使用します。他のファイルの使用は、信頼できる情報源ではないため許可されません。
- IaC ファイルが見つからない場合は、STOP して、IaC ファイルが見つからなかったことをユーザーに報告します。
-
構成の分析:
- 各リソースの現在の SKU、階層、設定を抽出します
- リソースの関係と依存関係を特定します
- 利用可能な場合は、リソースの使用率パターンをマッピングします
ステップ 3: 使用状況メトリクスの収集と現在のコストの検証
アクション: 使用率データを収集し、実際のリソースコストを検証します ツール: Azure MCP 監視ツール + Azure CLI プロセス:
-
監視ソースの特定:
azmcp-monitor-workspace-list --subscription <id>を使用して Log Analytics ワークスペースを特定しますazmcp-monitor-table-list --subscription <id> --workspace <name> --table-type "CustomLog"を使用して利用可能なデータを検出します
-
使用状況クエリの実行:
azmcp-monitor-log-queryを以下の定義済みクエリとともに使用します:- クエリ: "recent" で最近のアクティビティパターンを取得
- クエリ: "errors" で問題を示すエラーレベルのログを取得
- カスタム分析には、KQL クエリを使用します:
// CPU utilization for App Services AppServiceAppLogs | where TimeGenerated > ago(7d) | summarize avg(CpuTime) by Resource, bin(TimeGenerated, 1h) // Cosmos DB RU consumption AzureDiagnostics | where ResourceProvider == "MICROSOFT.DOCUMENTDB" | where TimeGenerated > ago(7d) | summarize avg(RequestCharge) by Resource // Storage account access patterns StorageBlobLogs | where TimeGenerated > ago(7d) | summarize RequestCount=count() by AccountName, bin(TimeGenerated, 1d) -
ベースラインメトリクスの算出:
- CPU/メモリ使用率の平均
- データベーススループットのパターン
- ストレージアクセス頻度
- 関数実行レート
-
現在のコストの検証:
- ステップ 2 で検出した SKU/階層の構成を使用します
- https://azure.microsoft.com/pricing/ で現在の Azure の価格を確認するか、
az billingコマンドを使用します - 記録: リソース → 現在の SKU → 推定月額コスト
- 推奨事項に進む前に、現実的な現在の月額合計を算出します
ステップ 4: コスト最適化の推奨事項の生成
アクション: リソースを分析して最適化の機会を特定します ツール: 収集したデータを使用したローカル分析 プロセス:
-
検出したリソースタイプに基づいて最適化パターンを適用します:
コンピューティングの最適化:
- App Service プラン: CPU/メモリ使用量に基づいて適正サイズに調整
- Function Apps: 使用量が少ない場合は Premium → 従量課金プランへ
- 仮想マシン: 過大なインスタンスをスケールダウン
データベースの最適化:
- Cosmos DB:
- 変動の大きいワークロードではプロビジョニング済み → サーバーレスへ
- 実際の使用量に基づいて RU/s を適正サイズに調整
- SQL Database: DTU 使用量に基づいてサービス階層を適正サイズに調整
ストレージの最適化:
- ライフサイクルポリシーを実装 (Hot → Cool → Archive)
- 冗長なストレージアカウントを統合
- アクセスパターンに基づいてストレージ階層を適正サイズに調整
インフラストラクチャの最適化:
- 未使用/冗長なリソースを削除
- 効果が見込める箇所に自動スケーリングを実装
- 非本番環境をスケジュール設定
-
エビデンスに基づく削減額の算出:
- 現在の検証済みコスト → 目標コスト = 削減額
- 現在および目標の両方の構成について、価格の出典を記録します
-
各推奨事項の優先度スコアを算出します:
Priority Score = (Value Score × Monthly Savings) / (Risk Score × Implementation Days) High Priority: Score > 20 Medium Priority: Score 5-20 Low Priority: Score < 5 -
推奨事項の検証:
- Azure CLI コマンドが正確であることを確認
- 推定削減額の計算を検証
- 実装リスクと前提条件を評価
- すべての削減額の計算に裏付けとなるエビデンスがあることを確認
ステップ 5: ユーザーによる確認
アクション: GitHub issue を作成する前に概要を提示して承認を得ます プロセス:
-
最適化の概要を表示:
🎯 Azure Cost Optimization Summary 📊 Analysis Results: • Total Resources Analyzed: X • Current Monthly Cost: $X • Potential Monthly Savings: $Y • Optimization Opportunities: Z • High Priority Items: N 🏆 Recommendations: 1. [Resource]: [Current SKU] → [Target SKU] = $X/month savings - [Risk Level] | [Implementation Effort] 2. [Resource]: [Current Config] → [Target Config] = $Y/month savings - [Risk Level] | [Implementation Effort] 3. [Resource]: [Current Config] → [Target Config] = $Z/month savings - [Risk Level] | [Implementation Effort] ... and so on 💡 This will create: • Y individual GitHub issues (one per optimization) • 1 EPIC issue to coordinate implementation ❓ Proceed with creating GitHub issues? (y/n) -
ユーザーの確認を待機: ユーザーが確認した場合にのみ続行します
ステップ 6: 個別の最適化 Issue を作成する
アクション: 最適化の機会ごとに個別の GitHub Issue を作成します。それらに「cost-optimization」(緑色)、「azure」(青色) のラベルを付けます。
必要な MCP ツール: 各推奨事項に対して create_issue
プロセス:
-
個別の Issue を作成する には、次のテンプレートを使用します:
タイトルの形式:
[COST-OPT] [Resource Type] - [Brief Description] - $X/month savings本文テンプレート:
## 💰 Cost Optimization: [Brief Title] **Monthly Savings**: $X | **Risk Level**: [Low/Medium/High] | **Implementation Effort**: X days ### 📋 Description [Clear explanation of the optimization and why it's needed] ### 🔧 Implementation **IaC Files Detected**: [Yes/No - based on file_search results] ```bash # If IaC files found: Show IaC modifications + deployment # File: infrastructure/bicep/modules/app-service.bicep # Change: sku.name: 'S3' → 'B2' az deployment group create --resource-group [rg] --template-file infrastructure/bicep/main.bicep # If no IaC files: Direct Azure CLI commands + warning # ⚠️ No IaC files found. If they exist elsewhere, modify those instead. az appservice plan update --name [plan] --sku B2📊 根拠
- 現在の構成: [詳細]
- 使用パターン: [監視データからの根拠]
- コストへの影響: $X/月 → $Y/月
- ベストプラクティスとの整合性: [該当する場合は Azure のベストプラクティスへの参照]
✅ 検証手順
- 非本番環境でテストする
- パフォーマンスが低下しないことを確認する
- Azure Cost Management でコスト削減を確認する
- 必要に応じて監視とアラートを更新する
⚠️ リスクと考慮事項
- [リスク 1 と緩和策]
- [リスク 2 と緩和策]
優先度スコア: X | 価値: X/10 | リスク: X/10
Step 7: Create EPIC Coordinating Issue
Action: Create master issue to track all optimization work. Label it with "cost-optimization" (green color), "azure" (blue color), and "epic" (purple color).
MCP Tools Required: create_issue for EPIC
Note about mermaid diagrams: Ensure you verify mermaid syntax is correct and create the diagrams taking accessibility guidelines into account (styling, colors, etc.).
Process:
-
Create EPIC Issue:
Title:
[EPIC] Azure Cost Optimization Initiative - $X/month potential savingsBody Template:
# 🎯 Azure Cost Optimization EPIC **Total Potential Savings**: $X/month | **Implementation Timeline**: X weeks ## 📊 Executive Summary - **Resources Analyzed**: X - **Optimization Opportunities**: Y - **Total Monthly Savings Potential**: $X - **High Priority Items**: N ## 🏗️ Current Architecture Overview ```mermaid graph TB subgraph "Resource Group: [name]" [Generated architecture diagram showing current resources and costs] end📋 実装のトラッキング
🚀 高優先度 (最初に実装)
- #[issue-number]: [Title] - $X/month savings
- #[issue-number]: [Title] - $X/month savings
⚡ 中優先度
- #[issue-number]: [Title] - $X/month savings
- #[issue-number]: [Title] - $X/month savings
🔄 低優先度 (できれば対応)
- #[issue-number]: [Title] - $X/month savings
📈 進捗のトラッキング
- 完了: Y 件の最適化のうち 0 件
- 実現した削減額: $X/月のうち $0
- 実装状況: 未着手
🎯 成功基準
- すべての高優先度の最適化が実装されている
- 推定削減額の 80% 超が実現されている
- パフォーマンスの低下が見られない
- コスト監視ダッシュボードが更新されている
📝 メモ
- Issue の完了に合わせてこの EPIC をレビューおよび更新する
- 実際の削減額と推定削減額を比較して監視する
- 定期的なコスト最適化レビューの実施を検討する
Error Handling
- Cost Validation: If savings estimates lack supporting evidence or seem inconsistent with Azure pricing, re-verify configurations and pricing sources before proceeding
- Azure Authentication Failure: Provide manual Azure CLI setup steps
- No Resources Found: Create informational issue about Azure resource deployment
- GitHub Creation Failure: Output formatted recommendations to console
- Insufficient Usage Data: Note limitations and provide configuration-based recommendations only
Success Criteria
- ✅ All cost estimates verified against actual resource configurations and Azure pricing
- ✅ Individual issues created for each optimization (trackable and assignable)
- ✅ EPIC issue provides comprehensive coordination and tracking
- ✅ All recommendations include specific, executable Azure CLI commands
- ✅ Priority scoring enables ROI-focused implementation
- ✅ Architecture diagram accurately represents current state
- ✅ User confirmation prevents unwanted issue creation