AWS Budget設定ガイド - 個人AWSアカウントのコスト管理
個人AWSアカウントのコスト管理を効率的に行うためのAWS Budget設定ガイド。月額数ドルの利用でも予期しない請求を防ぐため、ゼロ支出予算、月次全体予算、サービス別予算の3層構造で監視する実践的な設定方法を紹介。CloudFormation、CLI、Terraformを使った具体的な実装例付き。
By Toshiyuki Yoshida
1. AWS Budgetとは
AWS Budgets は、AWS の利用料金を監視し、設定した予算を超えそうな場合や超えた場 合にアラートを送信するサービスです。
主な機能は、次のようなものです。
- コスト予算: 実際の費用や予測費用を監視
- 使用量予算: サービスの使用量を監視
- リザーブドインスタンス(RI)予算: RI の利用率を監視
- Savings Plans予算: Savings Plans の利用率を監視
AWS Budget を使うことで、 コストの異常を早期発見しアラートを上げることで、 予期しない請求を防ぐことが可能となります。 AWS Budget を利用することで支出を計画的に管理できるようになります。
AWS Budget では「予算」という形でアラートのルールを作成しますが、 最大 20,000 個の予算を無料で作成可能です。
2. 私の場合のBudgetルールの考え方
私のAWS利用状況
私の AWS の利用状況は以下のようなものです。
-
複数のブログを Amplify で運営
- 静的サイトジェネレーターを使用したブログサイト
- 記事更新時のビルド・デプロイでコストが発生
- 更新頻度により月額コストが変動
-
Amplify とは別に複数のブログを S3 のホスティング機能で運営
- 静的な HTML サイトを S3 で直接ホスティング
- CloudFront 経由での配信
- アクセス数とデータ転送量でコストが変動
-
ドローンやアクションカメラの動画バックアップ
- 高解像度動画ファイルを S3 に保存
- ストレージ容量が累積的に増加
- S3 コスト急増の要因となりやすい
コスト分析結果
他のサービスから AWS 主体の運営に変更したのが年初です 過去 6 ヶ月のコスト実績を分析すると以下のようになります。
- 月平均: $2.54
- 最高月額: $4.96(3 月)
- 最低月額: $0.07(1 月)
サービス別総コストコストに分析すると、次の通りです。
- Amplify: $16.42(変動が大きい)
- ブログ更新頻度による変動
- 新規ブログ立ち上げ時のビルド増加
- S3: $2.89(6 月に急増)
- 動画バックアップによる累積的増加
- 静的サイトホスティングのデータ転送
- その他: 少額
Budget設計方針
- 全体予算: 過去最高額の 150%程度で設定(余裕を持たせる)
- サービス別予算: 変動の大きいサービスを個別管理
- ゼロ支出予算: 未使用サービスの不正利用を検知
- アラート設定: 80%と 100%の 2 段階(50%は省略してアラート疲れを防ぐ)
3. 実際の設定内容
3.1 ゼロ支出予算(未使用サービス監視)
基本設定
- 予算名: UnusedServices-ZeroSpend
- 予算額: $0.01
- 期間: 月次
- 対象サービス: KMS, Secrets Manager, SNS など
CLI設定
aws budgets create-budget \
--account-id <ACCOUNT_ID> \
--budget file://zero-spend-budget.json \
--notifications-with-subscribers file://notifications.json
zero-spend-budget.json
{
"BudgetName": "UnusedServices-ZeroSpend",
"BudgetLimit": {
"Amount": "0.01",
"Unit": "USD"
},
"TimeUnit": "MONTHLY",
"BudgetType": "COST",
"CostFilters": {
"Service": [
"AWS Key Management Service",
"AWS Secrets Manager",
"Amazon Simple Notification Service",
"Amazon Simple Queue Service",
"AmazonCloudWatch"
]
}
}
3.2 月次全体予算
基本設定
- 予算名: Monthly-Total-Budget
- 予算額: $7.00
- 期間: 月次
- アラート: 80%、100%、100%予測
CloudFormationテンプレート
AWSTemplateFormatVersion: "2010-09-09"
Description: "AWS Budget Configuration"
Resources:
MonthlyTotalBudget:
Type: AWS::Budgets::Budget
Properties:
Budget:
BudgetName: Monthly-Total-Budget
BudgetLimit:
Amount: 7.0
Unit: USD
TimeUnit: MONTHLY
BudgetType: COST
NotificationsWithSubscribers:
- Notification:
NotificationType: ACTUAL
ComparisonOperator: GREATER_THAN
Threshold: 80
ThresholdType: PERCENTAGE
Subscribers:
- SubscriptionType: EMAIL
Address: your-email@example.com
- Notification:
NotificationType: ACTUAL
ComparisonOperator: GREATER_THAN
Threshold: 100
ThresholdType: PERCENTAGE
Subscribers:
- SubscriptionType: EMAIL
Address: your-email@example.com
- Notification:
NotificationType: FORECASTED
ComparisonOperator: GREATER_THAN
Threshold: 100
ThresholdType: PERCENTAGE
Subscribers:
- SubscriptionType: EMAIL
Address: your-email@example.com
3.3 Amplify予算
基本設定
- 予算名: Amplify-Monthly-Budget
- 予算額: $3.50
- 期間: 月次
- アラート: 50%、80%、100%、100%予測
CLI設定
aws budgets create-budget \
--account-id <ACCOUNT_ID> \
--budget '{
"BudgetName": "Amplify-Monthly-Budget",
"BudgetLimit": {
"Amount": "3.50",
"Unit": "USD"
},
"TimeUnit": "MONTHLY",
"BudgetType": "COST",
"CostFilters": {
"Service": ["AWS Amplify"]
}
}' \
--notifications-with-subscribers '[
{
"Notification": {
"NotificationType": "ACTUAL",
"ComparisonOperator": "GREATER_THAN",
"Threshold": 50,
"ThresholdType": "PERCENTAGE"
},
"Subscribers": [{
"SubscriptionType": "EMAIL",
"Address": "your-email@example.com"
}]
}
]'
3.4 S3予算
基本設定
- 予算名: S3-Storage-Monitor
- 予算額: $2.00
- 期間: 月次
- アラート: 50%、80%、100%、100%予測
Terraform設定
resource "aws_budgets_budget" "s3_budget" {
name = "S3-Storage-Monitor"
budget_type = "COST"
limit_amount = "2.0"
limit_unit = "USD"
time_unit = "MONTHLY"
cost_filter {
name = "Service"
values = ["Amazon Simple Storage Service"]
}
notification {
comparison_operator = "GREATER_THAN"
threshold = 80
threshold_type = "PERCENTAGE"
notification_type = "ACTUAL"
subscriber_email_addresses = ["your-email@example.com"]
}
notification {
comparison_operator = "GREATER_THAN"
threshold = 100
threshold_type = "PERCENTAGE"
notification_type = "FORECASTED"
subscriber_email_addresses = ["your-email@example.com"]
}
}
今後の改善ポイント
金額的にはわずかですが、次のようなこともやってよいかなと思っています。
-
Cost Anomaly Detection の設定
- 機械学習による異常検知
- 前月比 50%以上の増加で自動通知
-
タグベースの予算管理
- 環境別(dev/prod)のタグ付け
- プロジェクト別のコスト追跡
-
四半期・年間予算の追加
- 長期的なコスト管理
- 年間$80 程度を想定
-
自動アクションの設定
- 予算超過時の非本番環境の自動停止
- Lambda 関数によるコスト最適化
-
S3 ライフサイクルポリシー(既に実施)
- 古い動画ファイルを Glacier へ移行
- アクセス頻度の低いコンテンツのコスト最適化