クラウド費用が右肩上がりに増え続ける一方で、手作業のレポートとスポット対応だけでは限界が来ています。本記事では、Azure Cost Management と Azure Machine Learning を組み合わせて「将来の支出を予測し、自動でリソースを調整する」自律型コスト・ガバナンスを、実装ロードマップと具体的な設定例付きで解説します。
AIで実現する Azure 自律コスト・ガバナンスとは
Azure でのコスト最適化は、これまでは「毎月レポートを見て、担当者がサイズダウンや停止を検討する」といった人手中心の運用が一般的でした。しかし、サービス数・環境数が増えると、以下のような課題がすぐに顕在化します。
- コスト急増に気付くのが遅れ、月末に「時すでに遅し」になる
- 誰のリソースか分からず、止めてよいのか判断に時間がかかる
- 予約インスタンスやセービングプランの検討が後回しになり、割引機会を逃す
これに対し、本記事で扱う「自律コスト・ガバナンス」は次のような状態を目指します。
- Azure Cost Management の履歴データを Azure ML に取り込み、将来の支出を予測
- 予測値と実績、リソースの利用率をもとに、ライトサイジングや停止を自動判断
- 予約インスタンス/セービングプランは AI で候補を算出し、承認フローだけ人が見る
ポイントは、「AI にすべてを丸投げする」のではなく、データ → 予測 → ルール → 自動化 → ガバナンス → 可視化という段階構造をきちんと作ることです。次の章から、実際のロードマップに沿って具体的に見ていきます。
目的とKPIの設計:コスト最適化プロジェクトの出発点
最初にやるべきことは、技術ではなく目的とKPIの定義です。ここが曖昧だと、「なんとなくダッシュボードだけ増えた」状態で終わります。
代表的な目的とKPIの例は以下の通りです。
- 目的例
- 月間クラウド費用を前年比で 20% 削減
- 主要サブスクリプションの予測精度(MAPE)を 20% 未満に維持
- 月次のコスト調査・報告にかかる人手時間を 50% 削減
- 対象範囲
- 管理グループ単位でのコスト最適化(例:全社 IT、子会社単位など)
- 対象サービス:VM、SQL Database、App Service、Storage など高額リソースを優先
- ガードレール(必ず最初に決める制約条件)
- 本番系の停止・サイズ変更は承認必須
- 業務時間帯(例:平日 8:00~20:00)は自動停止禁止
- 予約購入の実行は年間予算オーナーの承認が必要
これらを整理しながら、次のような KPI テーブルを作っておくと、後のダッシュボード設計までスムーズにつながります。
| KPI | 定義 | 目標値例 | よくある失敗 |
|---|---|---|---|
| 月間コスト削減率 | 自動化施策で削減できた金額 ÷ 施策前想定コスト | 10〜20% | スポット的な停止だけで、継続的な削減につながらない |
| 予測精度(MAPE) | 主要サブスクリプションの月次コスト予測誤差 | <= 20% | 予測モデルの評価をせずに本番利用してしまう |
| 自動化カバー率 | 対象リソースのうち、自動制御対象とした割合 | 初年度 30〜50% | いきなり全リソース対象にして、影響範囲が読めなくなる |
| ロールバック件数 | 自動化後に元に戻した操作数 | 0〜少数 | ロールバック手順が整理されておらず、トラブル時に復旧が遅れる |
ここで決めた KPI が、Azure ML モデルの精度指標や自動化プレイブックの評価軸となります。
費用データ基盤の整備:Azure Cost Managementを機械可読に
AI でコストを予測する前に、「費用の見える化」を人ではなく機械が扱える形にすることが必須です。このフェーズでは、タグ設計・データ取得・保管方式を固めます。
タグ設計と Azure Policy による必須化
まずは、コストの紐付け単位を決めます。一般的には、以下のようなタグを推奨します。
Department(部門)Project(プロジェクト名)Environment(Production/Staging/Dev/Test)Owner(メールアドレス)CostCenter(経理上の費用コード)
上記タグを Azure Policy で「必須化」し、未タグのリソースはデプロイを拒否、または監査・修正(補完)するようにします。重要なリソースを自動化対象から外すための除外タグとして、例えば以下を決めておくと安全です。
cost:auto-exempt=true(自動コスト最適化の対象外)
コストデータの取得と保管先設計
Azure Cost Management / Billing からは、以下のようなデータソースを組み合わせて取得します。
| データソース | 主な内容 | 用途 |
|---|---|---|
| Cost Management エクスポート | 日次の利用明細とチャージ | 学習用の履歴コスト、部門別配賦 |
| Cost Management Query API | 日次・月次の集計結果 | ダッシュボード・アラートのリアルタイム集計 |
| Usage / Consumption API | リソース単位の詳細な利用情報 | ライトサイジング候補の抽出 |
| Price Sheet API | SKU ごとの単価情報 | 将来コストシミュレーション(サイズ変更・予約購入) |
| 予約/セービングプラン推奨 API | 使用状況からの予約・プラン購入の推奨 | AI モデルと組み合わせた購入候補の精査 |
保管先としては、以下のようなシンプルな構成が扱いやすく現実的です。
- Azure Storage(CSV/Parquet)または Data Lake に日次追記で格納
- 例:
year=2025/month=11/day=30/cost_detail.parquet
- 例:
- Log Analytics にサマリ情報を送信し、Kusto クエリで異常検知・メトリクス化
加えて、Budget とアラート設定は最低限の安全網として必須です。各サブスクリプションに対して、以下のような閾値でアラートを設定します。
- 予算の 50% 到達:担当チームに注意喚起メール
- 80% 到達:マネージャー層も含めたエスカレーション
- 100% 到達:緊急対応プレイブックを起動
ここまで整備すると、AI モデルから見ても人間から見ても「コスト情報が整理された状態」になります。
Azure Machine Learning によるコスト予測モデル設計
次に、整備したコストデータをもとに Azure ML で予測モデルを構築します。最初のゴールは、「来月いくらかかりそうか」「どのサービスが増えそうか」を日次レベルで見通せるようにすることです。
ベースラインモデルと特徴量設計
最初は難しいモデルを狙う必要はありません。以下のようなアプローチで十分です。
- AutoML の時系列予測を利用(Forecasting タスク)
- 手動モデルの場合、Prophet や ARIMA などのクラシック手法を試す
特徴量例:
- 統計系
- サービス種別(VM、Storage、SQL など)
- SKU、リージョン、オペレーティングシステム
- タグ情報(Department/Project/Environment)
- 時系列系
- 曜日、月、四半期、祝日フラグ
- 移動平均(7日、30日)、移動標準偏差
- 月初・期末・キャンペーン期間フラグ
単なる「日付とコストのペア」ではなく、業務イベントやタグ情報を掛け合わせることで、予測のブレを抑えやすくなります。
評価指標とバックテスト
モデルの評価には、以下のような指標と手法を用います。
- MAPE(Mean Absolute Percentage Error) … 直感的でわかりやすく、目標値は 20% 未満が目安
- WAPE(Weighted Absolute Percentage Error) … 高額サブスクリプションに重みを置いて評価
- ローリングウィンドウによるバックテスト … 過去 6〜12 か月を一定幅で区切り、擬似的に「当時の自分」にモデルを適用して検証
このバックテストで、「もしこのモデルを 1 年前から使っていたら、どのくらい予測できていたか?」を自己採点してから本番に入れるのが重要です。
運用:再学習と異常値検知
運用フェーズでは、次のようなサイクルを回します。
- 週 1〜日次での再学習(AutoMLパイプラインを再実行)
- モデルの精度が悪化したらドリフト検知フラグを立て、特徴量の見直しやモデル更新
- 急激なコスト急増は、AI モデル以前に「閾値ルールで即時アラート」する(異常検知)
例えば、Log Analytics や Azure Monitor で「前日比 +30%以上のコスト増加」を検知したらアラートを飛ばし、AI による月次予測とは別レーンで即座に対応する、といった二層構造が現実的です。
制御ロジックの設計:AIの予測をどう意思決定に変換するか
AI による予測はあくまで「材料」です。それをもとに、どのリソースをどう動かすかは、明確な制御ロジック(意思決定ルール)として整理します。
意思決定の層構造
代表的なルール層は次の通りです。
- ルールA:利用率に基づくライトサイジング
- 直近 7〜14 日間の平均 CPU 使用率が 10〜15% 未満の VM / VMSS をサイズダウン候補に
- ディスク IOPS / スループットが容量やSKUに比べて明らかに低いものを縮小候補に
- 長期間トラフィックのないパブリック IP・ロードバランサーを削除候補に
- ルールB:予測値に基づく予約系の検討
- Azure ML の予測コスト × 稼働率 × 期間で、予約インスタンス・セービングプランの採算性を評価
- 90日以上、利用量が一定以上継続すると判断できる SKU のみを候補とする
- ルールC:重要度に応じた自動/半自動化
- 本番環境(Environment=Production)は承認必須・業務時間帯の自動変更禁止
- 開発・検証環境(Dev/Test)は、業務外時間帯の自動停止をフル自動化
しきい値設計の初期値の目安
運用開始時の「仮置き値」として、次のようなしきい値をよく使います。
- VM / VMSS のライトサイジング
- 平均 CPU 使用率 <= 10〜15% が 7〜14 日継続 → 1 段階サイズダウンを提案
- サイズダウン前後で性能テストを自動実行する仕組みがあれば尚良し
- 予測 vs 実績
- 実績コストが予測値より +20〜30% を超えた場合 → 即時アラート+抑制プレイブック起動
- 予約系
- 過去 90 日のうち 80 日以上、特定 SKU の利用が継続している場合に候補とする
- 自動購入は行わず、「推奨 → 金額・期間承認 → 実行」の三段階を維持
これらのルールを整理すると、次のような「制御マトリクス」を作ることができます。
| ルール | 対象リソース | 実行種別 | 承認要否 |
|---|---|---|---|
| ライトサイジング | VM/VMSS(Dev/Test) | サイズダウン・停止 | 不要(自動) |
| ライトサイジング | VM/VMSS(Production) | サイズダウン提案のみ | 要(メール/Teams) |
| 非稼働リソース整理 | パブリックIP、未使用ディスク | 削除 | 環境に応じて切替(多くは自動) |
| 予約系最適化 | VM、SQL、App Service | 予約/セービングプラン購入 | 必須(財務・予算オーナー) |
この表をもとに、後述の Logic Apps / Runbook でプレイブックを実装していきます。
自動化の実行エンジン:Logic Apps・Functions・Runbookの比較
意思決定ルールが固まったら、いよいよ自動化です。Azure では主に次の 3 パターンの実行エンジンがあります。
- Azure Logic Apps … ノーコード/ローコードでワークフローを組める。承認フローとも相性が良い。
- Azure Functions … コードで柔軟にロジックを書きたい場合に有効。
- Azure Automation Runbook … PowerShell/Runbook ベースで、運用チームに慣れ親しんだ形。
例えば、VM スケールセットの自動サイズ調整プレイブックは、以下のような流れで構成できます。
- スケジューラー(Logic Apps or Automation)で毎日深夜に起動
- Cost Management データと Azure Monitor メトリクスから対象 VMSS の利用率を取得
- ルールに合致する VMSS に対して、以下のシーケンスを実行
- 対象リソースに除外タグ(
cost:auto-exempt=true)がないことを確認 - メンテナンス時間帯かどうかをチェック
- インスタンスを停止 → SKU サイズ変更 → 起動
- 成功/失敗を Log に記録し、必要に応じて通知
- 対象リソースに除外タグ(
サンプルの PowerShell Runbook イメージは次のようになります(簡略版)。
# 対象 VMSS のサイズを 1 段階ダウンするイメージ
param(
[string] $ResourceGroupName,
[string] $VmssName,
[string] $NewSku
)
$vmss = Get-AzVmss -ResourceGroupName $ResourceGroupName -VMScaleSetName $VmssName
$vmss.Sku.Name = $NewSku
# インスタンスの停止
Stop-AzVmss -ResourceGroupName $ResourceGroupName -VMScaleSetName $VmssName -Force
# サイズ変更を反映
Update-AzVmss -ResourceGroupName $ResourceGroupName -Name $VmssName -VirtualMachineScaleSet $vmss
# 再起動
Start-AzVmss -ResourceGroupName $ResourceGroupName -VMScaleSetName $VmssName
実運用では、これに加えて「変更前の状態を保存する」「ロールバック用の Runbook を用意する」などの安全装置を必ず組み込みます。
安全装置としての制御(ガードレール)の実装
- 実行時間帯の制御:業務時間帯の変更禁止、メンテナンスウィンドウのみ実行
- 除外タグの尊重:指定タグが付いたリソースはスキップ
- ロールバック:変更前の SKU やインスタンス数を Log や Key Vault に保存し、即時復元可能にする
- 通知:実行結果をメールや Teams に投稿し、失敗時はオンコールへエスカレーション
ガバナンス設計:壊さないための安全装置
自動化を進めるほど重要になるのが、ガバナンス(壊さない仕組み)です。
Azure Policy による技術的ガードレール
- 許可リージョンの制限(海外リージョンの誤使用やコンプライアンス違反を防止)
- VM SKU の制限(高額 SKU の無断利用防止)
- タグ必須ポリシー(Department / Project / Environment / Owner など)
- パブリック IP の無制限作成禁止や NSG 設定のチェック
自動化プレイブックが新たなリソースを作成するケース(例えば、テスト用の一時 VM)でも、これらのポリシーを満たすように実装することで、「自動化がガバナンス違反を起こす」事態を防げます。
RBAC と変更管理
- 自動実行アカウントには最小権限(必要なリソースタイプの Contributor など)を付与
- Runbook や Functions のコード変更は、Pull Request ベースのレビューと承認を必須化
- 実行ログ(Who/What/When)は Log Analytics や SIEM に送信し、定期的な Change Advisory でレビュー
「誰がいつどの自動化を走らせ、何を変更したのか」が追跡できる状態は、トラブル時の原因特定だけでなく、監査対応にも直結します。
監視・可視化と継続改善:FinOpsとして定着させる
自律コスト・ガバナンスは、「作って終わり」ではなく、継続的な改善を前提とした仕組みです。その中心にあるのが、ダッシュボードと KPI です。
ダッシュボードに載せるべきビュー
- 予算 vs 実績 vs 予測(今月、四半期、年度)
- 部門別・プロジェクト別にブレイクダウン
- 削減額の可視化
- ライトサイジングによる削減額
- 予約・セービングプランによる割引金額
- 上位コスト要因
- トップ N サブスクリプション、トップ N リソースグループ、トップ N サービス別
- 運用指標
- 自動化実行件数、成功率、ロールバック件数
- 未タグリソース率、ガバナンス違反検出件数
これらを Power BI や Azure Dashboard で可視化し、月次の FinOps 会議(IT・経理・各部門)の共通の土台とすることで、仕組みが「現場の文化」として定着していきます。
4週間で作る最小実装(MVP)ロードマップ
ここからは、現実的なスケジュール感での最小実装(MVP)の例を示します。理想は高く、スコープは小さく、を意識したプランです。
| 週 | 主なタスク | 成果物・チェックポイント |
|---|---|---|
| 週1 | タグ/ポリシー整備、Budget/アラート設定、Cost Export/Query API の設定 | 日次で更新されるコストデータ基盤、未タグ率の可視化 |
| 週2 | Azure ML でベースライン予測(30/60/90日)、精度評価、異常検知ルールの暫定実装 | 予測モデル(MAPE の測定)、急増アラートの試験運用 |
| 週3 | 1系統の VM スケールセットで、自動サイズ調整の PoC(業務外時間のみ) | ライトサイジングプレイブック、ロールバック手順書、影響範囲の検証結果 |
| 週4 | 予約/セービングプランの「推奨 → 承認 → 実行」フロー、ダッシュボードと KPI 設計 | 部門別ダッシュボード、予約購入承認フロー、初期成果のレビュー |
週4終了時に、小さくとも「実際に削減効果が見えたか」「予測はどの程度当たっているか」を振り返り、対象サブスクリプションやリソース種別を段階的に広げていきます。
実装チェックリストと現場で役立つTips
抜け漏れを防ぐためのチェックリストと、実務で役立つポイントをまとめます。
実装チェックリスト
- 重要リソースに除外タグ(
cost:auto-exempt=true)を付与している - 停止/サイズ変更の手順とロールバック手順を Runbook 化している
- 業務時間帯の変更禁止、変更凍結期間(繁忙期など)を自動化側で考慮している
- アラート・承認者(メール/Teams/オンコール)の通知先が整理されている
- コストデータの遅延(数時間〜日単位)を前提に、閾値・予測の解釈をしている
- 通貨・税・為替の取り扱いルールを統一し、レポートでブレが出ないようにしている
現場Tips
- まずは Advisor の推奨や Azure のベストプラクティスを、そのまま自動化ルールの初期値として取り込むと早い
- テスト用サンドボックスで Dry-run → 限定実行 → 本番と段階的に範囲を広げる
- Copilot in Azure(利用可能な環境では)でコスト急増の要因分析をサポートさせると、調査時間を短縮できる
- 予約系は「割引が大きい=リスクも大きい」ため、推奨・承認・実行の三段階を厳守する
サンプルアーキテクチャと実装イメージ
最後に、自律コスト・ガバナンスの全体像をイメージしやすいよう、シンプルなアーキテクチャ例と実装イメージを示します。
サンプルアーキテクチャ
- データ層
- Azure Cost Management エクスポート → Azure Storage / Data Lake
- Log Analytics → コストサマリ・自動化ログの保管
- AI/分析層
- Azure Machine Learning → コスト予測モデル、ライトサイジング候補抽出
- Power BI → ダッシュボード・レポート
- 自動化層
- Logic Apps → 定期実行・承認フロー
- Automation Runbook / Functions → 実際のリソース操作(停止・サイズ変更・削除・予約購入)
- ガバナンス層
- Azure Policy → リソース制約・タグ必須・SKU制限
- RBAC / 管理グループ → 権限の分離と範囲制御
実装ステップをコードでイメージする
例えば、「コストデータ取得 → Azure ML で予測 → 自動化プレイブックにフィード」という流れは、以下のような擬似コードでイメージできます。
# 1. Cost Management から日次データ取得(イメージ)
cost_df = get_cost_data_from_export(storage_account, container)
# 2. Azure ML でモデル学習・予測
model = train_forecast_model(cost_df)
forecast = model.predict(horizon_days=90)
# 3. 予測結果と実績を付き合わせ、しきい値判定
alerts, rightsizing_targets, ri_candidates = evaluate_rules(cost_df, forecast)
# 4. Logic Apps / Runbook に渡して、自動化プレイブックを起動
trigger_playbook("rightsizing", rightsizing_targets)
trigger_playbook("ri_suggestions", ri_candidates)
実際には、これらを Azure ML パイプラインや Functions、Logic Apps のコネクタとして実装していくことになりますが、考え方としては「データ → 予測 → 判定 → 実行」のシンプルなパイプラインです。
まとめ:小さく始めて学習する自律コスト運用へ
本記事で解説したように、Azure 上で AI を活用した自律コスト・ガバナンスを実現するには、
- 費用の見える化とタグ・ポリシーなどの基礎固め
- Azure ML による予測モデルと異常検知
- 明確な制御ロジックと、Logic Apps / Runbook を使った自動化
- Azure Policy と RBAC によるガバナンス、安全なロールバック手順
- ダッシュボードと KPI による継続改善
といったステップを、段階的に積み上げていくことが重要です。
最初から全社スコープを目指すのではなく、1系統のリソース(例:特定プロジェクトの VM スケールセット)と承認付きの自動化から始め、予測精度と削減効果を確認しながら少しずつ範囲を広げていきましょう。
最終的には、データ(見える化) → 予測(ML) → ルール(意思決定) → 自動化(実行) → ガバナンス(安全装置) → 可視化/改善というサイクルを、組織全体で回し続けることが、「止まらないクラウド費用」を「学習しながら最適化されるコスト」へ変えていく近道になります。

コメント