Contents
1. コスト可視化の重要性と NTT 東日本の提言
クラウド利用が拡大するほど、 「見える化」 が欠如すると予算オーバーやリソース浪費が顕在化します。本節では、NTT 東日本が公開したコラムから抽出した 3 つの要点と、その実装効果を概観します。
参照情報
- NTT 東日本「クラウド費用の可視化・管理」 コラム(閲覧日: 2026‑05‑20)
https://business.ntt-east.co.jp/content/cloudsolution/column-476.html
1‑1. 可視化、レビュー、アラートの 3 本柱
| 項目 | 内容 | 実装効果 |
|---|---|---|
| 可視化 | Azure Cost Management の「サービス別・リソース別」レポートを作成 | 無駄なリソースが一目で判明 |
| レビュー | 月次の利用率分析と予算実績比較 | 過剰プロビジョニングの早期検出 |
| アラート | 予算超過や異常使用時にメール/Teams 通知 | インシデント発生から対策までを数分に短縮 |
2. 不要リソース削除・強制タグ付け・コストアラート設定の実装手順
この章では、「見える化 → 自動化 → ガバナンス」 の流れで Azure 環境を最適化する具体的なフローを示します。各サブセクションは 1 文の導入文で始め、設定例やスクリプトを添付しています。
2‑1. 未使用リソースの自動検出と安全削除
未使用 VM やデータベースが残っているケースはコスト増大の典型です。以下の手順で Advisor + Resource Graph + Azure DevOps を組み合わせ、ヒューマンチェックを挟んだ安全な削除プロセスを構築します。
- Azure Advisor の「未使用リソース」レポート
-
ポータル > Advisor > “コスト最適化” → 「低利用率の VM」一覧を取得。
-
Resource Graph で対象リソースを抽出(CLI 例)
bash
az graph query -q "
resources
| where type == 'microsoft.compute/virtualmachines'
| where properties.extended.instanceView.statuses[?(@.code == 'PowerState/deallocated')]
| project name, resourceGroup, location, tags"
- 削除承認パイプライン(Azure DevOps YAML の抜粋)
yaml
stages:
- stage: ReviewDelete
jobs:
- job: DeleteVMs
pool: vmImage: 'ubuntu-latest'
steps:
- script: |
az vm delete --ids $(VM_IDS) --yes
displayName: 'Delete approved VMs'
approval:
timeout: 2d
ポイント:自動検出だけでなく、レビュー/承認ステップを挟むことで誤削除リスクを実質的にゼロに近づけます。
参考画像:未使用 VM レポートのスクリーンショット → https://example.com/screenshots/advisor-unused-vm.png(閲覧日: 2026‑05‑20)
2‑2. 強制タグ付けポリシーの作成と適用
タグは費用集計だけでなく、組織全体のガバナンスに不可欠です。以下の手順で Azure Policy を利用し、必須タグが未設定の場合はリソース作成をブロックします。
- ポリシー定義(JSON)
json
{
"properties": {
"displayName": "Require CostCenter and Environment tags",
"policyRule": {
"if": {
"field": "[concat('tags[', parameters('tagName'), ']')]",
"exists": "false"
},
"then": {
"effect": "deny"
}
},
"parameters": {
"tagName": {
"type": "String",
"metadata": { "description": "Tag name to require" }
}
}
}
}
- ポリシーの割り当て(CLI 例)
bash
az policy assignment create \
--name RequireTags \
--policy "/providers/Microsoft.Authorization/policyDefinitions/<definitionId>" \
--params '{"tagName": {"value":"CostCenter"}}' \
--scope "/subscriptions/<subscription-id>"
- コンプライアンス確認
- ポータル > Policy > 「コンプライアンス」タブで違反リソース数をモニタリング。
ポイント:必須タグが自動的に付与されるわけではないため、既存リソースには Azure PowerShell の
Set-AzTagスクリプト で一括付与することも推奨します。
スクリプト例(PowerShell)
powershell
Get-AzResource -TagName "CostCenter" -TagValue $null |
ForEach-Object {
Set-AzTag -ResourceId $_.ResourceId -Tag @{ CostCenter = "UNKNOWN"; Environment = "PROD" } -Operation Merge
}
2‑3. コストアラートと自動チケット化
予算超過時の即応性を高めるため、Azure Cost Management の「予算」機能 と Power Automate を連携させ、Teams 通知+ServiceNow チケット作成まで自動化します。
- 予算作成手順(ポータル)
-
Azure Cost Management → “予算” → 「+ 追加」 → 金額・期間を設定し、閾値を 80 % と 100 % に構成。
-
アラート受信先の設定
-
アクショングループでメール+Teams Webhook を登録。
-
Power Automate フロー例(画像参照)
![Power Automate Flow] (https://example.com/screenshots/pa-cost-alert.png)(閲覧日: 2026‑05‑20)
- トリガー:
When a cost alert is triggered - アクション①:Teams にメッセージ送信
- アクション②:ServiceNow の
Create Incidentコネクタでチケット生成
ポイント:自動化により、アラート発生から対策開始までのリードタイムを 5 分以内に短縮できます。
3. VM スペック最適化と Spot VM の活用
VM は過剰スペックがコスト増大の最大要因です。本章では メトリクス分析 → サイズ推奨 → Spot VM 入札 のサイクルを具体的に示します。
3‑1. ワークロード別 VM サイズ評価手順
| 手順 | 内容 |
|---|---|
| ① メトリクス収集 | az monitor metrics list で CPU、メモリ、ディスク IOPS を過去 30 日間取得 |
| ② 推奨 SKU 抽出 | az vm list-skus --resource-type virtualMachines --location <region> --all → 利用率 ≤70 % の SKU を抽出 |
| ③ スケールセットで自動サイズ変更 | Azure VM Scale Set に「インスタンスサイズの自動スケーリング」ルールを設定(CPU 80 % 超過で上位 SKU に切替) |
メトリクス取得 CLI 例
|
1 2 3 4 5 |
az monitor metrics list \ --resource /subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.Compute/virtualMachines/<vm> \ --metric "Percentage CPU" "Available Memory Bytes" \ --interval PT1H --aggregation Average |
推奨 SKU フィルタ例(jq 使用)
|
1 2 |
az vm list-skus --location japaneast --size Standard_B2ms | jq '.[] | select(.capabilities[].value|tonumber < 70)' |
ポイント:30 日間の平均利用率が 70 % 以下であれば、
Standard_B*系にダウングレードし、最大 60 % のコスト削減が見込めます。
3‑2. Spot VM(スポット仮想マシン)の入札と中断対策
Spot VM は余剰キャパシティを利用できるため オンデマンド料金の最大 80 % 削減 が可能ですが、割り当てが取り消されるリスクがあります。以下は安全に導入するためのベストプラクティスです。
| 項目 | 推奨設定 |
|---|---|
| 対象シナリオ | バッチジョブ、CI/CD ビルド、テスト環境(停止可) |
| 入札価格 | オンデマンド料金の 70 % 以下に設定(例: az vm create --priority Spot --max-price 0.07) |
| 中断通知 | Event Grid → Function App (SpotVM Eviction) でイベント捕捉、ジョブをキューに再投入 |
| フェイルオーバー構成 | Spot プール 80 % + 標準プール 20 % のハイブリッドスケールセットで可用性確保 |
Spot VM 作成 CLI 例
|
1 2 3 4 5 6 7 8 9 10 11 |
az vm create \ --resource-group rg-demo \ --name spot-vm-01 \ --image UbuntuLTS \ --size Standard_D2s_v3 \ --priority Spot \ --eviction-policy Deallocate \ --max-price 0.07 \ --admin-username azureuser \ --generate-ssh-keys |
中断イベント処理(Function App)サンプルコード(Python)
|
1 2 3 4 5 6 7 8 9 |
import json, logging, os def main(event: dict): for record in event["records"]: data = json.loads(record["body"]) if data["eventType"] == "Microsoft.Compute/spotVmEviction": vm_id = data["resourceId"] logging.info(f"Spot VM {vm_id} が中断されました。ジョブを再キューへ送信します。") # ここにキューへの再投入ロジックを書く |
ポイント:中断時の自動フェイルオーバー設計が不十分だとジョブ失敗リスクが高まります。必ず Event Grid と Function の組み合わせで「eviction」通知をハンドリングしてください。
4. Blob Storage のアクセス層選定と料金比較
データ保管コストは保存容量とアクセス頻度で大きく変動します。本節では Hot / Cool / Archive の 3 層の特徴、公式料金へのリンク、そして実務で使えるライフサイクルポリシー例を示します。
公式料金ページ(2026‑05‑20 参照)
https://learn.microsoft.com/ja-jp/azure/storage/blobs/storage-blob-pricing
4‑1. 各アクセス層の特徴と公式単価
| アクセス層 | 主な用途 | ストレージ単価(2026‑01 時点) ※日本リージョン(東日本) |
読み取り/書き込み単価 |
|---|---|---|---|
| Hot | 高頻度アクセスデータ | ¥2.48 / GB·月 | 読取 ¥0.124 / 10,000 回、書込 ¥0.053 / 1,000 回 |
| Cool | 月間アクセス <100 回 | ¥1.16 / GB·月 | 読取 ¥0.152 / 10,000 回、書込 ¥0.064 / 1,000 回 |
| Archive | 長期保存・低頻度アクセス | ¥0.61 / GB·月 | 復元リクエスト ¥0.20 / 10,000 回(復元に最低 180 秒) |
注記:料金は Microsoft の公式ページを基に算出し、2026‑01 の更新情報を使用しています。最新料金は上記リンク先をご確認ください。
4‑2. ライフサイクル管理ポリシーの実装例
以下の JSON は 30 日後に Cool に移行、180 日後に Archive に自動移行 するポリシーです。Azure Portal の「ストレージアカウント > データ保護 > ライフサイクル管理」からインポートできます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
{ "rules": [ { "name": "move-to-cool", "enabled": true, "type": "Lifecycle", "definition": { "actions": { "baseBlob": { "tierToCool": { "daysAfterModificationGreaterThan": 30 } }, "snapshot": { "delete": { "daysAfterCreationGreaterThan": 365 } } }, "filters": { "blobTypes": [ "blockBlob" ], "prefixMatch": [ "" ] } } }, { "name": "move-to-archive", "enabled": true, "type": "Lifecycle", "definition": { "actions": { "baseBlob": { "tierToArchive": { "daysAfterModificationGreaterThan": 180 } } }, "filters": { "blobTypes": [ "blockBlob" ], "prefixMatch": [ "" ] } } } ] } |
ポイント:ポリシー適用後は Azure Monitor の「ストレージ アクティビティ」ログで実際の階層移行件数をモニタリングし、期待通りにコスト削減が進んでいるか確認してください。
5. Savings Plan と予約インスタンス(RI)の比較と適合ワークロード例
長期コミット型割引は Savings Plan と 予約インスタンス (RI) の二本柱です。本節では公式ガイドへのリンク、最新割引率の目安、そして選定フレームワークを示します。
Microsoft 公式比較ページ(2026‑05‑20 参照)
https://learn.microsoft.com/ja-jp/azure/cost-management-billing/savings-plan/decide-between-savings-plan-reservation
5‑1. Savings Plan の概要と対象サービス
| 項目 | 内容 |
|---|---|
| 対象 | VM、Azure Container Instances、SQL Database (単一インスタンス)、Azure Synapse、App Service など多数 |
| コミット方式 | 使用量(USD/時間)に対して 1 年または 3 年の前払い/分割払い |
| 柔軟性 | インスタンスタイプ・リージョン横断で自動適用、スケールアウト/イン時も割引が継続 |
| 割引率(目安) | 1 年 ≈ 30 %、3 年 ≈ 45 %(サービス別に変動) |
実装例:
az consumption savings-plan order create --sku <sku-id> --term P3Y --billing-scope /subscriptions/<sub-id>
5‑2. 予約インスタンス(RI)の特徴と期間別割引率
| 期間 | 割引率 (目安) | 推奨ワークロード例 |
|---|---|---|
| 1 年 | 20 %〜30 % | 開発・テスト環境、季節的に利用が見込めるアプリ |
| 3 年 | 35 %〜45 % | 本番稼働の永続 VM、SQL Database DTU インスタンス、Cosmos DB プロビジョンドスループット |
注意点:RI はインスタンスタイプ・リージョンが固定されるため、変更が必要になった場合は再購入が必須です。一方で Savings Plan は「使用量ベース」なので、変動が激しいマイクロサービス環境に適しています。
5‑3. 選定フレームワーク(チェックリスト)
- リソースの安定性
- 高い → RI 推奨
-
変動あり → Savings Plan
-
リージョン横断の必要性
-
必要 → Savings Plan
-
予算確保の柔軟性
- 前払いが可能 → 両方可
- 分割払い希望 → Savings Plan(分割プランあり)
6. コスト削減効果測定と導入ハードル別比較表
本章では KPI の設計方法 と、各施策の「設定容易さ・リスク・長期コミット」の観点から比較した表を提示します。
6‑1. KPI 設計とレポート自動化
| KPI | 定義 | 推奨取得元 |
|---|---|---|
| Cost Savings | 割引適用前後のコスト差額(¥) | Azure Cost Management → 「予算」実績 |
| Utilization Rate | 実稼働時間 ÷ 購入時間 | Azure Monitor の「CPU 使用率」+ VM SKU 予約情報 |
| Spend Forecast Accuracy | (予測 – 実績) / 予測 ×100% | Cost Management の「予測」機能 + Power BI |
ダッシュボード構築手順(Power BI)
- Azure Cost Management → 「エクスポート」設定で日次 CSV を Storage に保存。
- Power BI Desktop でストレージの CSV を取得し、上記 KPI 用にカスタム列を作成。
- 「KPI カード」ビジュアルで月次・四半期ごとに自動更新するよう設定(スケジュールリフレッシュは日次)。
ポイント:数値化された指標があれば、経営層への報告や予算交渉が客観的根拠を持って行えます。
6‑2. 手法別比較表(設定容易さ・リスク・長期コミット)
| 手法 | 設定容易さ ★☆☆☆☆〜★★★★★ | リスク | 長期コミット |
|---|---|---|---|
| 不要リソース自動削除 | ★★☆☆☆(Advisor + Graph のクエリ作成) | 低(承認ステップで防止) | なし |
| 強制タグ付け (Policy) | ★★★★★(ポリシー定義だけで即適用) | 中(既存リソースの再タグ付けが必要) | なし |
| コストアラート | ★★★★★★(数クリックで完了) | 低 | なし |
| VM スペック最適化 | ★★☆☆☆(メトリクス分析とテスト必須) | 中(サイズ変更で性能劣化の可能性) | なし |
| Spot VM | ★★★☆☆(入札価格設定・フェイルオーバー設計が必要) | 高(中断時ジョブ失敗リスク) | なし |
| Blob 階層化 | ★★★★★★(ライフサイクルポリシーはテンプレート利用可) | 低 | なし |
| Savings Plan | ★★★☆☆(使用量予測とコミット設定が必要) | 中(過剰コミットで割引無駄) | 1‑3 年 |
| 予約インスタンス (RI) | ★★☆☆☆(SKU と期間選定に慎重さが必須) | 高(ロックインリスク) | 1‑3 年 |
まとめ:導入コストとリスクのバランスを見て、まずは「コストアラート」や「Blob 階層化」の低ハードル施策から始め、効果測定後に Savings Plan/RI のような長期割引へシフトすることが推奨されます。
7. まとめと次のアクション
本ガイドは 「可視化 → 自動化 → 最適化」 のサイクルを実装するための全体像と、すぐに使える CLI / PowerShell スクリプト・ポリシー定義例を網羅しました。以下の 3 ステップで導入を進めてください。
- 可視化基盤構築
-
Azure Cost Management に予算とアラートを設定し、タグポリシーで費用集計の土台を固める。
-
自動削除・サイズ最適化パイプライン実装
- Advisor + Resource Graph のクエリを Azure DevOps もしくは GitHub Actions に組み込み、レビュー承認フローで安全に削除。
-
VM スケールセットと Spot VM を併用し、バッチ処理のコストを最大 80 % 削減。
-
長期割引戦略の選定
- ワークロード安定性とリージョン横断性を評価し、Savings Plan と RI のハイブリッド活用で 30‑45 % の追加削減を目指す。
次に読むべき資料
- 「Azure Cost Management 詳細ガイド」 https://learn.microsoft.com/ja-jp/azure/cost-management-billing/(閲覧日: 2026‑05‑20)
- 「Spot VM ベストプラクティス」 https://learn.microsoft.com/ja-jp/azure/virtual-machines/spot-vms(閲覧日: 2026‑05‑20)
これらの手順と KPI を定期的にレビューすれば、予算超過リスクを最小化しつつ、クラウド投資対効果(ROI)を最大限に引き上げることが可能です。ぜひ本ガイドを社内ナレッジベースとして活用し、継続的なコスト最適化文化を醸成してください。