目次

AWS Billing and Cost Management 完全ガイド v2.0

AWS の使用コスト可視化・最適化・予測プラットフォーム


概要

AWS Billing and Cost Management は 「AWS の使用コストを可視化・最適化・予測するための統合サービス群」 であり、Cost Explorer(コスト分析)・Budgets(予算アラーム)・Cost Anomaly Detection(異常検知)・Savings Plans・Reserved Instances・Cost Optimization Hub・AWS Billing Conductor を統合して、AWS 支出を組織全体で効率的に管理する。

企業のクラウドコスト管理を実現するために、以下の主要課題を解決する:

  1. 複雑な AWS 料金体系の可視化: オンデマンド・リザーブドインスタンス・Savings Plans・スポット・フリーティアが混在する複雑な価格構造を階層的に分析
  2. 予算超過の事前防止: リアルタイムアラームと自動アクションで過剰支出を防止
  3. コスト最適化の定量化: 未使用リソース・低使用率インスタンス・RI 未活用を自動検出して削減額を数字で提示
  4. マルチアカウント管理: Organizations 統合請求で全アカウントの一元管理と割引共有

このサービスを選ぶ理由は、AWS ネイティブの正確性 にある。Cloudability・CloudHealth・Spot.io などの汎用クラウドコスト管理ツールでは表現できない AWS 固有の計算論理(RI 共有・Savings Plans のスコープ・Compute Savings Plans の柔軟性)を正確に反映できるのは Billing and Cost Management のみ。


課題と特徴

AWS Billing and Cost Management が解決する課題

❌ 課題:AWS コスト管理が断片的で非効率
  → サービス別 / タグ別 / アカウント別のコスト分析が手動作業
  → 月末になって初めて予算超過に気付く
  → RI / Savings Plans の活用率が把握できず、無駄な購入を続ける
  → 未使用 EIP・EBS スナップショット・古い Snapshot がリソース肥満化
  → 部門別・チーム別のコスト配賦ができず、誰が何に使ったかが不明

✅ 解決:Billing and Cost Management で能動的・リアルタイム・自動化
  → Cost Explorer で即座にサービス / タグ / アカウント別コストを可視化
  → Budgets で予算閾値に達した時点で SNS アラーム・自動対応
  → Cost Anomaly Detection で ML が異常スパイクを自動検知
  → Cost Optimization Hub で RI / Savings Plans / 削除対象リソースを自動提案
  → Cost Categories で複雑な配賦ルールを定義・自動化

コアの特徴

特徴 説明
Cost Explorer 過去 13 か月・最大 12 か月先のコスト予測、サービス / リージョン / タグ / アカウント別分析
Budgets コスト・使用量・RI/SP カバレッジの予算設定、80%/100% 閾値アラーム、自動アクション
Cost Anomaly Detection ML ベースの異常スパイク検知(無料)、サービス / リンクアカウント / コストカテゴリ別
Cost and Usage Report (CUR) 最詳細なコストデータ(行レベル)、S3 CSV/Parquet 出力、Athena/Redshift/QuickSight 分析
Data Exports(CUR 2.0) CUR の次世代版、更新頻度向上(1 日 → 3 時間)、BigQuery 連携対応予定
Savings Plans コンピューティング / EC2 / SageMaker、1 年 / 3 年コミット、最大 66% 割引、RI より柔軟
Reserved Instances EC2 / RDS / ElastiCache / OpenSearch、Standard / Convertible、最大 72% 割引
Cost Optimization Hub AI 駆動の削減提案(RI / SP・削除・リサイズ・リージョン変更)、月額削減予測を表示
AWS Billing Conductor 顧客別 / BU 別の二次請求、ショーバック・チャージバック、EDP 連携
Cost Categories 複雑な配賦ルール(split charge / dynamic)を定義、Cost Explorer / CUR に反映
Free Tier 監視 フリーティア使用量の追跡、超過予測、予期しない課金の防止
Carbon Footprint Tool AWS 使用による CO2 排出量計算・追跡、ESG 報告対応
Organizations 統合請求 全アカウントの一元請求、RI / SP / 割引の組織全体共有

アーキテクチャ(Mermaid 図 1)

graph TB
    subgraph "Billing Data Sources"
        A["AWS Service Usage<br/>EC2 / RDS / S3<br/>Lambda / SageMaker"]
        B["Pricing Data<br/>On-Demand / RI<br/>Savings Plans"]
        C["Usage Events<br/>CloudTrail / Usage API"]
    end
    
    subgraph "Cost Processing Pipeline"
        D["Cost Calculation Engine<br/>Blended / Unblended<br/>Amortized / Net"]
        E["Tagging & Allocation<br/>Cost Categories<br/>Split Charge Rules"]
    end
    
    subgraph "Cost Management Console & APIs"
        F["Cost Explorer<br/>Custom Reports<br/>Forecasting"]
        G["Budgets<br/>Anomaly Detection<br/>Optimization Hub"]
        H["CUR / Data Exports<br/>S3 CSV/Parquet<br/>BigQuery Ready"]
    end
    
    subgraph "Analysis & Integration"
        I["QuickSight<br/>BI Dashboard"]
        J["Athena<br/>SQL Analysis"]
        K["3rd-party Tools<br/>Vantage / Kubecost<br/>Datadog Cost Mgmt"]
    end
    
    subgraph "Automation & Action"
        L["Savings Plans API<br/>RI Marketplace<br/>Auto Purchase"]
        M["Lambda / SNS<br/>Auto Remediation<br/>EC2 Stop / Resize"]
        N["Cost Anomaly<br/>Auto Response<br/>Ticket Creation"]
    end
    
    A --> D
    B --> D
    C --> D
    D --> E
    E --> F
    E --> G
    E --> H
    F --> I
    G --> J
    H --> K
    G --> M
    N --> M
    L --> G

主要コンポーネント詳細

1. Cost Explorer

機能:過去 13 か月のコスト・使用量の詳細分析、12 か月先の予測、サービス / リージョン / タグ / アカウント別フィルタリング

Cost Explorer の主要指標:

BlendedCost:
    AWS が請求する正式なコスト
    リザーブドインスタンス割引が平均化されて含まれる
    Organizations 統合請求の場合、RI 割引は自動配分

UnblendedCost:
    RI 割引を考慮しない実際の使用料金
    アカウント別・リソース別の正確なコスト把握

AmortizedCost:
    RI / Savings Plans の購入コストを使用月に按分
    長期コミットメントのコスト を月単位で平準化
    RI 前払い分を均等配分

NetUnblendedCost / NetAmortizedCost:
    クレジット・割引を差引後の実コスト
    内部チャージバック・部門配賦の厳密計算

API 例:

# 過去 6 か月のサービス別コスト(月次粒度)
aws ce get-cost-and-usage \
  --time-period Start=2025-10-01,End=2026-04-01 \
  --granularity MONTHLY \
  --metrics BlendedCost UnblendedCost AmortizedCost \
  --group-by Type=DIMENSION,Key=SERVICE \
  --query 'ResultsByTime[].{Month: TimePeriod.Start, Groups: Groups}' \
  --profile production

# タグ別・アカウント別の詳細分析
aws ce get-cost-and-usage \
  --time-period Start=2026-03-01,End=2026-04-01 \
  --granularity DAILY \
  --metrics BlendedCost UsageQuantity \
  --group-by Type=DIMENSION,Key=LINKED_ACCOUNT \
           Type=TAG,Key=Environment \
           Type=TAG,Key=Project \
  --filter '{
    "And": [
      {"Dimensions": {"Key": "SERVICE", "Values": ["Amazon Elastic Compute Cloud - Compute"]}},
      {"Tags": {"Key": "CostCenter", "Values": ["engineering"]}}
    ]
  }' \
  --profile production

2. AWS Budgets

機能:コスト・使用量・RI カバレッジの予算設定、複数段階の閾値アラーム、SNS / Slack / ChatBot 通知、自動アクション

Budgets の種類:

Cost Budget:
    月額 $5,000 など、総コストの上限を設定
    通知タイミング:80% ($ 4,000)・100% ($5,000)・120%

Usage Budget:
    EC2 インスタンスの時間数が「月 500 時間」を超えないよう設定
    コスト以外の使用量で制御(スケーリングの抑制に有効)

RI Utilization Budget:
    リザーブドインスタンスの使用率が 85% 以上であることを保証
    RI 未活用の検知・報告

Savings Plans Coverage Budget:
    Savings Plans が全コンピュート使用の 80% 以上をカバーすることを強制
    RI / OP/SP バランスの監視

Budgets Actions(自動対応):

  • IAM ポリシー付与: 予算超過時に制限ポリシーをロールに自動アタッチ
  • EC2 インスタンス停止: CloudWatch + Lambda で該当インスタンスを自動停止
  • RDS 停止: 本番環境外の Dev/Test DB の自動シャットダウン

設定例:

# 月次 $5,000 予算、80% でアラーム
aws budgets create-budget \
  --account-id 123456789012 \
  --budget '{
    "BudgetName": "production-monthly-budget",
    "BudgetLimit": {"Amount": "5000", "Unit": "USD"},
    "TimeUnit": "MONTHLY",
    "BudgetType": "COST"
  }' \
  --notifications-with-subscribers '[
    {
      "Notification": {
        "NotificationType": "ACTUAL",
        "ComparisonOperator": "GREATER_THAN",
        "Threshold": 80,
        "ThresholdType": "PERCENTAGE"
      },
      "Subscribers": [{
        "SubscriptionType": "SNS",
        "Address": "arn:aws:sns:ap-northeast-1:123456789012:cost-alerts"
      }]
    },
    {
      "Notification": {
        "NotificationType": "FORECASTED",
        "ComparisonOperator": "GREATER_THAN",
        "Threshold": 100,
        "ThresholdType": "PERCENTAGE"
      },
      "Subscribers": [{
        "SubscriptionType": "SLACK",
        "Address": "https://hooks.slack.com/services/xxx"
      }]
    }
  ]'

# 予算超過時に Dev ロールにアクセス制限ポリシーを自動付与
aws budgets create-budget-action \
  --account-id 123456789012 \
  --budget-name production-monthly-budget \
  --notification-type ACTUAL \
  --action-type APPLY_IAM_POLICY \
  --action-threshold '{"ActionThresholdValue": 100, "ActionThresholdType": "PERCENTAGE"}' \
  --definition '{
    "IamActionDefinition": {
      "PolicyArn": "arn:aws:iam::aws:policy/DenyEC2Launch",
      "Roles": ["arn:aws:iam::123456789012:role/DeveloperRole"]
    }
  }' \
  --execution-role-arn arn:aws:iam::123456789012:role/BudgetsActionRole \
  --approval-model AUTOMATIC

3. Cost Anomaly Detection

機能:ML ベースで通常と異なる急激なコスト増加を自動検知、サービス / リンクアカウント / コストカテゴリ別、無料

Anomaly Detection のモニタリングモード:

DIMENSIONAL:
    サービス別・リージョン別・リンクアカウント別
    どの次元での異常を検出するか指定
    例:EC2 だけのスパイクを検知

CUSTOM:
    コストカテゴリ別(Project / CostCenter)
    複数タグの組み合わせで異常検知
    例:「Engineering チームの EC2」のスパイク

使用例:

# サービス別異常検知モニター
aws ce create-anomaly-monitor \
  --anomaly-monitor '{
    "MonitorName": "service-level-monitor",
    "MonitorType": "DIMENSIONAL",
    "MonitorDimension": "SERVICE"
  }' \
  --query 'AnomalyMonitorArn'

# $100 以上の異常を毎日通知
aws ce create-anomaly-subscription \
  --anomaly-subscription '{
    "SubscriptionName": "daily-cost-anomalies",
    "MonitorArnList": ["arn:aws:ce:ap-northeast-1:123456789012:anomaly-monitor/service-level"],
    "Subscribers": [{
      "Address": "arn:aws:sns:ap-northeast-1:123456789012:anomaly-alerts",
      "Type": "SNS"
    }],
    "Threshold": 100,
    "Frequency": "DAILY"
  }'

# 検出された異常を Lambda で自動対応
aws ce list-anomalies \
  --time-period Start=2026-03-01,End=2026-04-01 \
  --granularity MONTHLY | jq '.Anomalies[] | select(.Impact.MaxImpact > 500)'

4. Cost and Usage Report (CUR) & Data Exports

CUR(レガシー)

  • 行レベルの最詳細データ(数百万行)
  • S3 にCSV/Parquet で定期出力(日次 / 月次)
  • Athena / Redshift で分析
  • 更新頻度:12-24 時間

Data Exports(CUR 2.0)

  • CUR の次世代版、Apache Parquet のみ(CSV 廃止予定)
  • 更新頻度向上:3 時間以内
  • BigQuery / Snowflake への直接統合
  • コスト最適化推奨の統合
  • 2024 年から段階的ロールアウト

Data Exports 種類:

1. Legacy CUR:
   - レガシー互換性のため従来 CUR をそのまま出力
   - csv / parquet

2. Amortized CUR:
   - RI / Savings Plans 購入コストを使用月に按分
   - 内部チャージバック・正確なコスト分配に最適

3. NetAmortized CUR:
   - Amortized に加えてクレジット・割引を差引
   - 実際の支払いコスト

設定例:

# Data Exports(新)の設定
aws ce put-data-exports \
  --export '{
    "Name": "monthly-amortized-export",
    "DataQuery": {
      "TimePeriod": {"Unit": "MONTHLY"},
      "Granularity": "MONTHLY",
      "Filter": {
        "Dimensions": {
          "Key": "SERVICE",
          "Values": ["Amazon Elastic Compute Cloud - Compute", "Amazon Relational Database Service"]
        }
      },
      "Metrics": ["AmortizedCost", "UnblendedCost", "NetAmortizedCost"]
    },
    "RefreshCadence": "SYNCHRONOUS",
    "S3OutputConfig": {
      "S3Bucket": "my-cost-data-bucket",
      "S3Prefix": "exports/",
      "S3Region": "ap-northeast-1",
      "FileFormat": "PARQUET"
    }
  }'

# Athena で分析
CREATE EXTERNAL TABLE IF NOT EXISTS cost_data (
  identity_line_item_id STRING,
  identity_time_interval STRING,
  product_product_name STRING,
  pricing_public_on_demand_cost DECIMAL(18,6),
  cost_amortized_cost DECIMAL(18,6),
  resource_tags_user_project STRING
)
PARTITIONED BY (year STRING, month STRING)
STORED AS PARQUET
LOCATION 's3://my-cost-data-bucket/exports/';

-- 月別・プロジェクト別コスト集計
SELECT 
  year,
  month,
  resource_tags_user_project as project,
  SUM(cost_amortized_cost) as total_amortized_cost,
  COUNT(*) as line_items
FROM cost_data
WHERE year = '2026' AND month >= '03'
GROUP BY year, month, project
ORDER BY year, month, project;

5. Savings Plans & Reserved Instances

Savings Plans(推奨)

  • 1 年 / 3 年のコミットメント
  • Compute Savings Plans: インスタンスタイプ・リージョン・OS を柔軟に変更可(最大 66% 割引)
  • EC2 Savings Plans: EC2 のみ、ファミリー変更可(最大 72% 割引)
  • SageMaker Savings Plans: SageMaker インスタンス(最大 70% 割引)
  • RI より柔軟で、容量を超える部分は ON/DEMAND で課金(損失がない)

Reserved Instances

  • 1 年 / 3 年のコミットメント
  • Standard RI: 固定構成、最大 72% 割引、変更・売却可能
  • Convertible RI: 属性変更可(インスタンスファミリー・リージョン等)、最大 66% 割引
  • RI Marketplace で余剰 RI を売却・購入

推奨提案 API:

# Savings Plans 購入推奨
aws ce get-savings-plans-purchase-recommendation \
  --savings-plans-type COMPUTE_SP \
  --term-in-years ONE_YEAR \
  --payment-option ALL_UPFRONT \
  --lookback-period-in-days SIXTY_DAYS \
  --query 'SavingsPlansPurchaseRecommendationMetadata.{
    TotalRecommendationCount: json_extract(SavingsPlansPurchaseRecommendation, "$.SavingsPlansPurchaseRecommendationDetails"),
    GenerationTimestamp: GenerationTimestamp
  }'

# RI 購入推奨
aws ce get-reservation-purchase-recommendation \
  --service "Amazon Elastic Compute Cloud - Compute" \
  --lookback-period-in-days THIRTY_DAYS \
  --term-in-years ONE_YEAR \
  --payment-option ALL_UPFRONT \
  --query 'Recommendations[].{
    InstanceType: RecommendationDetails[0].InstanceDetails.EC2InstanceDetails.InstanceType,
    MonthlyRecurringCost: RecommendationDetails[0].EstimatedMonthlyRecurringCostAfterPurchase,
    MonthlySavings: RecommendationDetails[0].EstimatedMonthlySavings
  }' | jq '.[] | select(.MonthlySavings != "0.0")'

6. Cost Optimization Hub

機能:AI 駆動の自動削減提案、RI・SP・削除・リサイズ・リージョン移動、月額削減見積を提示

Cost Optimization Hub の推奨カテゴリ:

Compute Right-Sizing:
    低使用率 EC2(< 10% CPU)→ 小さいインスタンスへリサイズ
    削減額:月 $50-500 / インスタンス

Reserved Instance Purchase:
    ON/DEMAND 使用が 80% 以上 → RI 購入推奨
    削減額:月 $100-1000 / RI

Savings Plans Purchase:
    複数インスタンスファミリーの使用 → Compute SP
    削減額:月 $200-2000

Stop/Delete Unused Resources:
    未使用 EC2・EBS・Snapshot・EIP → 削除推奨
    削減額:月 $10-100 / リソース

Region Optimization:
    高コスト地域の使用 → 低コスト地域への移動
    削減額:15-40% のコスト削減

API 使用例:

# 最適化機会を一覧表示(ページネーション対応)
aws ce-recommendations list-recommendations-by-resource \
  --resource-arn "arn:aws:ec2:ap-northeast-1:123456789012:instance/i-0123456789abcdef" \
  --recommendation-type "RightSizeInstance" \
  --query 'RecommendationDetails[].{
    RecommendationType: Type,
    EstimatedMonthlySavings: EstimatedMonthlySavings,
    CurrentInstanceType: CurrentInstanceDetails.InstanceType,
    RecommendedInstanceType: RecommendationOptions[0].InstanceDetails.InstanceType
  }'

# 全アカウントのコスト最適化スコア
aws ce-hub get-optimization-summary \
  --query 'OptimizationSummary.{
    TotalRecommendationCount: RecommendationCount,
    EstimatedMonthlySavings: EstimatedMonthlySavings,
    RecommendationsByType: GroupedRecommendationCount
  }'

7. AWS Billing Conductor(パートナー・MSP 向け)

機能:顧客別・BU 別の二次請求、カスタム料率の適用、ショーバック・チャージバック

Billing Conductor の用途:

SaaS ベンダー が AWS インフラコストを顧客に転嫁:
    顧客 A の使用コストを自動計算
    カスタムマークアップ(15% など)を適用
    月次インボイスを自動生成

大企業の内部チャージバック:
    ビジネスユニット A の使用分を自動集計
    IT 部門が内部請求
    部門別のコスト意識向上

AWS Partner・MSP:
    複数顧客の使用分を一元管理
    顧客ごとに異なる契約条件を適用
    コミッションの自動計算

主要ユースケース(10+)

1. スタートアップのコスト削減

課題: 初期段階で AWS 使用を最適化していないため毎月 $50K を無駄に支出 解決:

  • Cost Explorer で EC2 / Lambda 別の使用パターンを分析
  • Cost Optimization Hub で「未使用 EIP 削除」「低使用率 EC2 をリサイズ」を実施
  • Savings Plans を購入して月 15% 削減(月 $7.5K 節約)

2. エンタープライズの部門別配賦

課題: 複数部門が同じ AWS アカウントを共有、各部門のコスト把握ができない 解決:

  • Cost Categories で「CostCenter」タグをルール化(split charge で共有 EBS の配分も自動化)
  • Cost Explorer でチーム別コストを月次レポート化
  • Organizations 統合請求で全体のボリュームディスカウントを享受(30% 割引達成)

3. 異常なコスト増加の早期検知

課題: 毎月 $10K のはずが突然 $15K に。月末まで気付かず、追加で $50K 支出 解決:

  • Cost Anomaly Detection を有効化(無料)
  • スパイク検知時に SNS で DataOps チームに即通知
  • Lambda で自動調査・通知(影響範囲の特定)、事態収束に 2 時間以内

4. RI・Savings Plans の最適化

課題: RI を購入したものの使用率が 40% に低下(インスタンスタイプ変更したため) 解決:

  • Cost Optimization Hub で「RI 未活用」を検出
  • Convertible RI への交換か RI Marketplace で売却を推奨
  • 次の購入は Compute Savings Plans(柔軟性向上)、購買コスト削減 15%

5. 本番 / ステージング / 開発のコスト分離

課題: 3 つの環境が同じアカウント、容易に環境別コストを把握できない 解決:

  • 「Environment」タグを全リソースに付与(IAM ポリシーで強制)
  • Cost Explorer で Environment=prod / staging / dev でグループ化
  • Budgets を環境別に設定、dev 環境の超過を自動 EC2 停止

6. マルチアカウント・マルチリージョンの可視化

課題: 5 つのアカウント × 3 リージョンで使用されているコストを全体把握できない 解決:

  • Organizations 統合請求で全アカウント・全リージョンのコストを一元化
  • Data Exports を S3 → QuickSight で BI ダッシュボード化
  • リージョン別・アカウント別・サービス別のドリルダウン分析が可能

7. フリーティア超過の防止

課題: 開発環境で EC2 を起動したまま忘れて $300 超過課金 解決:

  • Free Tier 監視で「EC2 無料利用分が 75% を超過」でアラーム
  • Budgets Actions で開発用ロールに EC2 起動制限ポリシーを自動付与
  • 翌月から超過 0、コスト削減 $300

8. クラウド TCO(Total Cost of Ownership)の正確な見積

課題: CFO に「3 年で AWS に投資する ROI」を説得できない 解決:

  • Cost Explorer で過去 12 か月の実績コストを整理
  • Savings Plans / RI の活用で実現可能な削減額を計算
  • 3 年コミット scenario を Cost Optimization Hub で比較
  • CFO 報告用の削減見積書を自動生成(月 $20K → $15K)

9. パートナー・MSP の顧客請求自動化

課題: 複数顧客の AWS 使用分を月末に手動でまとめて請求(工数 30 時間/月) 解決:

  • AWS Billing Conductor で顧客別請求グループを設定
  • 顧客ごとのマークアップ率を定義(15-25%)
  • 月末に自動請求書を生成・配信(工数 2 時間に短縮)

10. セキュリティ監視と Cost Anomaly の連携

課題: 攻撃により EC2 が暴走、$10K / 日の異常課金を後から発見 解決:

  • Cost Anomaly Detection + CloudTrail ログを Lambda で連携
  • スパイク検知 → CloudTrail で「誰が何をしたか」を自動追跡
  • 疑わしい操作を検出 → Security Hub に自動レポート → 侵害範囲を3時間以内に特定

設定・操作の具体例

CLI による Cost Explorer 分析

# ケース 1: 過去 3 か月のサービス別コスト(月次粒度)
aws ce get-cost-and-usage \
  --time-period Start=2025-12-01,End=2026-03-01 \
  --granularity MONTHLY \
  --metrics BlendedCost \
  --group-by Type=DIMENSION,Key=SERVICE \
  | jq '.ResultsByTime[] | {Month: .TimePeriod.Start, Services: .Groups[]}'

# ケース 2: 特定タグでフィルタ(Project=WebApp, Environment=prod)
aws ce get-cost-and-usage \
  --time-period Start=2026-03-01,End=2026-04-01 \
  --granularity DAILY \
  --metrics BlendedCost UsageQuantity \
  --filter '{
    "And": [
      {"Tags": {"Key": "Project", "Values": ["WebApp"]}},
      {"Tags": {"Key": "Environment", "Values": ["prod"]}}
    ]
  }' \
  | jq '.ResultsByTime[] | {Date: .TimePeriod.Start, Cost: .Total.BlendedCost}'

# ケース 3: EC2 + RDS のみの比較
aws ce get-cost-and-usage \
  --time-period Start=2026-02-01,End=2026-04-01 \
  --granularity MONTHLY \
  --metrics BlendedCost \
  --filter '{
    "Dimensions": {
      "Key": "SERVICE",
      "Values": [
        "Amazon Elastic Compute Cloud - Compute",
        "Amazon Relational Database Service"
      ]
    }
  }' \
  --group-by Type=DIMENSION,Key=SERVICE

Terraform で Budgets を一元管理

# Terraform で部門別予算を定義
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

provider "aws" {
  region = "ap-northeast-1"
}

variable "budgets" {
  type = map(object({
    limit  = number
    alert_threshold = number
    alert_email = string
  }))
  default = {
    engineering = { limit = 10000, alert_threshold = 80, alert_email = "eng-finance@example.com" }
    marketing   = { limit = 5000,  alert_threshold = 80, alert_email = "mkt-finance@example.com" }
    sales       = { limit = 3000,  alert_threshold = 80, alert_email = "sales-finance@example.com" }
  }
}

resource "aws_budgets_budget" "department" {
  for_each = var.budgets

  account_id  = data.aws_caller_identity.current.account_id
  name        = "${each.key}-monthly-budget"
  budget_type = "COST"
  limit_unit  = "USD"
  limit_amount = each.value.limit
  time_period_start = "2026-04-01"
  time_unit   = "MONTHLY"

  cost_filter {
    name   = "TagKeyValue"
    values = ["CostCenter${each.key}"]
  }

  notification {
    comparison_operator        = "GREATER_THAN"
    notification_type          = "ACTUAL"
    threshold                  = each.value.alert_threshold
    threshold_type             = "PERCENTAGE"
    notification_trigger_type  = "FORECASTED_TOTAL"
  }
}

resource "aws_budgets_budget_notification" "email" {
  for_each = var.budgets

  account_id              = aws_budgets_budget.department[each.key].account_id
  budget_name             = aws_budgets_budget.department[each.key].name
  comparison_operator     = "GREATER_THAN"
  notification_type       = "ACTUAL"
  threshold               = each.value.alert_threshold
  threshold_type          = "PERCENTAGE"
  notification_trigger_type = "FORECASTED_TOTAL"
}

resource "aws_budgets_budget_notification_subscription" "email" {
  for_each = var.budgets

  account_id              = aws_budgets_budget_notification.email[each.key].account_id
  budget_name             = aws_budgets_budget_notification.email[each.key].budget_name
  comparison_operator     = each.value.alert_threshold
  notification_type       = "ACTUAL"
  subscription_type       = "EMAIL"
  subscriber_address      = each.value.alert_email
}

data "aws_caller_identity" "current" {}

output "budget_names" {
  value = {
    for k, v in aws_budgets_budget.department :
    k => v.name
  }
}

CloudFormation で Cost Optimization Hub 推奨を自動取得

AWSTemplateFormatVersion: '2010-09-09'
Description: 'Cost Optimization Hub Integration Lambda'

Resources:
  CostOptimizationLambdaRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
      Policies:
        - PolicyName: CostOptimizationAccess
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Action:
                  - ce:GetOptimizationSummary
                  - ce:ListRecommendations
                Resource: '*'

  CostOptimizationLambda:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: cost-optimization-reporter
      Runtime: python3.11
      Role: !GetAtt CostOptimizationLambdaRole.Arn
      Handler: index.lambda_handler
      Code:
        ZipFile: |
          import boto3
          import json
          from datetime import datetime

          ce = boto3.client('ce')

          def lambda_handler(event, context):
              # Get optimization summary
              summary = ce.get_optimization_summary()
              
              total_savings = summary['OptimizationSummary']['EstimatedMonthlySavings']
              recommendation_count = summary['OptimizationSummary']['RecommendationCount']
              
              # List recommendations by type
              recs_by_type = {}
              for rec_type in ['RightSizeInstance', 'PurchaseReservationInstance', 'PurchaseSavingsPlans']:
                  recs = ce.list_recommendations_by_resource(RecommendationType=rec_type)
                  recs_by_type[rec_type] = len(recs.get('RecommendationDetails', []))
              
              report = {
                  'timestamp': datetime.now().isoformat(),
                  'total_monthly_savings_potential': total_savings,
                  'total_recommendations': recommendation_count,
                  'recommendations_by_type': recs_by_type
              }
              
              print(json.dumps(report, indent=2))
              return report

  CostOptimizationSchedule:
    Type: AWS::Events::Rule
    Properties:
      Description: 'Daily cost optimization report'
      ScheduleExpression: 'cron(0 9 * * ? *)'  # 9 AM UTC daily
      State: ENABLED
      Targets:
        - Arn: !GetAtt CostOptimizationLambda.Arn
          Id: CostOptimizationTarget

  CostOptimizationLambdaPermission:
    Type: AWS::Lambda::Permission
    Properties:
      FunctionName: !Ref CostOptimizationLambda
      Action: lambda:InvokeFunction
      Principal: events.amazonaws.com
      SourceArn: !GetAtt CostOptimizationSchedule.Arn

Outputs:
  LambdaFunctionArn:
    Value: !GetAtt CostOptimizationLambda.Arn
    Description: Cost Optimization Lambda ARN

類似サービス比較表

特徴 AWS Billing Cloudability (IBM Apptio) CloudHealth (Broadcom) Kubecost Vantage Spot.io
AWS ネイティブ統合 ✅ 完全統合 ⭕ API 統合 ⭕ API 統合 ❌ Kubernetes のみ ⭕ API 統合 ⭕ API 統合
マルチクラウド ❌ AWS のみ ✅ AWS/Azure/GCP ✅ AWS/Azure/GCP ✅ K8s 複数クラウド ✅ AWS/Azure/GCP ✅ AWS/Azure/GCP
リアルタイムアラーム ✅ 分単位 ⭕ 時間単位 ⭕ 時間単位 ✅ 秒単位 ⭕ 時間単位 ✅ リアルタイム
AI 駆動最適化 ✅ Hub で提案 ✅ 推奨エンジン ✅ Intelligent Ops ✅ オートスケール ✅ 提案 ✅ 自動最適化
予算管理 ✅ Budgets ✅ ポリシーエンジン ✅ ガバナンス ⭕ カスタム ✅ 予算
コスト 無料-$0.01/API $3K-30K/年 $4K-50K/年 無料-$5K/年 $1K-20K/年 $5K-100K/年
オンプレ対応
容易性 ✅ ネイティブ ⭕ 中程度 ⭕ 中程度 ✅ Helm Chart ✅ UI 直感的 ⭕ API 駆動

ベストプラクティス

✅ 推奨される設定・運用

  1. タグ戦略の事前設計(リソース作成時)

    • 必須タグ:Environment / Project / CostCenter / Owner
    • IAM ポリシーで必須タグなしのリソース作成を拒否
    • 月初に「タグなしリソース」の削除をレビュー
  2. Cost Categories で複雑な配賦ルールを自動化

    • Split Charge で共有 EBS・NAT Gateway のコストを部門に自動配分
    • Dynamic Allocation で時間帯別のコスト配賦(営業時間のみ課金等)
  3. Savings Plans は「Compute SP」を優先

    • 最も柔軟(インスタンスファミリー・リージョン・OS 変更可)
    • RI より 2-3% 割引率が低いが「容量超過 = ON/DEMAND で自動課金」で損失ない
    • RI Marketplace で余剰を売却可能
  4. Cost Anomaly Detection は無料で常時有効化

    • 月 $100 以上のスパイクを検知設定
    • SNS で DataOps・Finance チームに即通知
    • Lambda で自動対応(CloudTrail ログ取得・Security Hub 連携)
  5. 組織全体の整合性を Organizations で実現

    • 統合請求で RI・SP・割引を全アカウント共有
    • タグポリシーで全アカウントのタグ命名を統一
    • 金融コンプライアンス:管理アカウントで全請求書を一元保管
  6. 月次レビュー・報告を自動化

    • Data Exports を QuickSight / Tableau BI ダッシュボードに接続
    • 部門別コスト・月次差分・RI 利用率を月初に CFO に自動配信
    • Cost Optimization Hub の推奨を月次で CEE に報告

❌ よくある失敗パターン

  1. タグなしリソース・タグ命名が統一されていない

    • 結果:コスト配賦が不可能、部門別請求ができない
    • 対策:IAM ポリシーで必須タグを強制、毎月タグ監査実施
  2. RI を大量購入したが、使用率が低下

    • 結果:6 か月後に「あ、このインスタンスタイプ使わなくなった」で損失
    • 対策:Compute Savings Plans またはConvertible RI を推奨、定期見直し
  3. Cost Anomaly Detection を有効化したが通知を無視

    • 結果:異常スパイク → 月末まで気付かず → 追加支出
    • 対策:アラーム → Lambda 自動対応(CloudTrail・Security Hub 連携)を設定
  4. CUR データを S3 に出力するだけで分析しない

    • 結果:月 100GB の CUR データが溜まるだけで価値なし
    • 対策:Athena / QuickSight と連携して月次ダッシュボード化
  5. Cost Optimization Hub の提案を「後で確認」で放置

    • 結果:月 $5K の削減機会が見過ごされる
    • 対策:提案を Lambda で自動取得 → 実装・効果測定を自動化

トラブルシューティング表

症状 原因 解決策
Cost Explorer でデータが表示されない タグがまだ有効化されていない(有効化後 24 時間かかる) Billing → Cost allocation tags でタグを有効化、24 時間待機
Budgets が毎月アラームを出しているが、実際のコストが下がらない 予算の根拠が過去データに基づかず、高すぎる / 低すぎる 過去 3 か月の Cost Explorer で平均値・トレンドを確認してから予算を再設定
Data Exports が 12 時間以上更新されない ネットワークエラー・S3 権限不足 S3 バケットポリシーで ce:PutDataExports 権限確認、CloudTrail で API エラー確認
Cost Anomaly Detection の通知が多すぎて、見過ごしが多い 閾値が低すぎる(毎日アラーム) 閾値を月額コストの 3-5% に設定(例:月 $10K なら $300 以上のスパイク)
Organizations 統合請求が有効化されたのに、割引が適用されていない RI / SP が古いアカウントで購入・統合対象アカウントに適用されていない RI Marketplace で余剰 RI を統合アカウントに売却、または新規 RI を統合アカウントで購入
Savings Plans / RI の購入推奨が「不正確」に見える 過去 30 日のデータだけで推奨(季節性・トレンド変化を考慮していない) 60-90 日のスパンで cost & usage を再確認、実際のピークシーズンで購入判断
CUR 内容が間違っている(行が重複・金額がおかしい) CUR の設定が古い、版が混在している CUR 2.0(Data Exports)への移行を検討、旧 CUR 設定を削除
Cost Categories の split charge が反映されていない 共有リソース(EBS・NAT Gateway)が正しくタグ付けされていない 該当リソースのタグを確認、Cost Categories の split rule を再評価

2025-2026 最新動向

Data Exports(CUR 2.0)への段階的移行

  • CUR(レガシー)の更新頻度:12-24 時間 → Data Exports:3 時間以内へ高速化
  • 2025 年 Q3 までに全アカウントで Data Exports が利用可能に
  • 2026 年中に CUR(CSV)廃止予定、Parquet のみに統一

Cost Optimization Hub の AI 強化

  • 2025 年下半期:生成 AI による「カスタマイズド削減提案」(組織の使用パターンを学習)
  • 2026 年:「What-If」シミュレーション(Savings Plans 購入時の効果をシミュレート)

Billing Conductor の拡張

  • 複数顧客の自動請求書生成・配信機能強化
  • API による顧客別ダッシュボードの自動生成(2025 年下半期)

Carbon Footprint Tool の詳細化

  • リージョン別・サービス別の CO2 排出量をさらに詳細に提示
  • ESG レポート自動生成(2025 年 Q4)

Organizations 統合請求の強化

  • 複数 Organizations 間のコスト配賦(billing transfer の拡張)
  • 組織全体の RI / SP 最適化の自動提案

学習リソース・参考文献

公式ドキュメント(8+)

  1. AWS Cost Management User Guide
  2. AWS Budgets Documentation
  3. Cost Explorer API Reference
  4. Cost and Usage Report (CUR)
  5. Data Exports(CUR 2.0)
  6. AWS Billing Conductor User Guide
  7. Cost Optimization Hub
  8. Organizations Consolidated Billing

OSS / ベンダーツール(5+)

  1. OpenCost(CNCF) - Kubernetes コストの可視化、AWS に対応
  2. Kubecost - Kubernetes 環境のコスト管理、AWS Marketplace 対応
  3. Cloud Custodian - ポリシーベースのコスト削減自動化
  4. Vantage - マルチクラウドコスト管理・AWS API 統合
  5. Spot.io Cost Analytics - 容量計画・最適化

実装例・チェックリスト

実装の段階(フェーズごと)

Phase 1: 基礎(月 1)

  • [ ] Cost Explorer で過去 3 か月のコスト分析(サービス・リージョン別)
  • [ ] 最低限のタグ(Environment / Project / Owner)を全リソースに付与(IAM 強制)
  • [ ] Budgets で月額予算を設定、SNS アラーム有効化
  • [ ] Cost Anomaly Detection 有効化(無料)

Phase 2: 最適化(月 2-3)

  • [ ] Cost Optimization Hub で「Right-Sizing」「RI 購入」を実施(月 10-30% 削減)
  • [ ] CUR (または Data Exports) を S3 に出力、Athena/QuickSight で BI ダッシュボード化
  • [ ] Cost Categories で部門別コスト配賦を自動化
  • [ ] Savings Plans・RI の購入推奨に基づき、容量計画を実施

Phase 3: 組織化(月 4-6)

  • [ ] Organizations 統合請求を有効化、全アカウントのコストを一元管理
  • [ ] タグポリシーで全アカウントのタグ命名を統一
  • [ ] Billing Conductor でパートナー/顧客請求を自動化(該当時のみ)
  • [ ] Cost Anomaly Detection + Lambda で自動対応パイプラインを構築

採用判断チェックリスト

  • [ ] 月額 AWS コスト > $1,000(Cost Explorer・Budgets で価値を実感)
  • [ ] 複数部門・複数アカウントで使用(タグ・Cost Categories の価値)
  • [ ] RI / Savings Plans 購入を検討(推奨 API で効果最大化)
  • [ ] コスト削減目標を CFO / CEO から指示されている(圧力あり)
  • [ ] 現在、手動でコスト管理をしている(自動化で工数削減)

まとめ

AWS Billing and Cost Management は 「AWS コストの可視化・予算管理・最適化を実現する統合プラットフォーム」。Cost Explorer でサービス・タグ・アカウント別コストを分析し、Budgets で予算超過を事前アラーム・自動対応する。Cost Anomaly Detection で ML による異常スパイクを無料で検知し、Cost Optimization Hub の提案で RI・Savings Plans・削除対象リソースを自動特定。Organizations 統合請求で全アカウントの割引を共有し、タグポリシーで組織全体の命名規則を統一する。

最小限の導入: Cost Explorer + Budgets + Anomaly Detection(無料)= 月額コスト最適化の 80% を実現 フル活用: 上記 + CUR + Data Exports + Billing Conductor + Cost Categories = 部門別配賦・自動最適化で月 30% 削減以上

部門別配賦・自動最適化により、3-6 か月で ROI(導入工数回収)を実現できる。特に月額 $10K 以上の組織では必須。

最終更新:2026-04-26 バージョン:v2.0