AWS Budgets 予算アラートをGUIとCLIで設定してみた
はじめに
こんにちは、カスタマーサクセス部 クラウド運用チームの 脇 です。
AWS のコスト管理において、予算アラートの設定は欠かせません。
AWS Budgets を使えば、設定した予算に対して実際の利用額や予測額が近づいた際に通知を受け取ることができます。
本記事では、AWS Budgets で月額予算アラートを設定する方法を GUI(マネジメントコンソール) と CLI の両方で試してみます。
GUI は画面に沿って進めれば迷わず設定できるのですが、月ごとに異なる予算額(計画型)を設定する場合、12ヶ月分の金額を毎回手入力するのは正直なかなか大変でした。そこで後半では、JSON ファイルを事前に用意して CLI で投入する方法を試してみました。
前提条件
- AWS マネジメントコンソールへのアクセス権限があること
- CLI の場合は AWS CLI がセットアップ済みであること(本記事では AWS CloudShell を使用しています)
- 月別の予算額が確定していること
GUI(マネジメントコンソール)での設定手順
ステップ1. 予算タイプを選択
- AWS コンソールにログイン
- Billing and Cost Management > 予算 > 予算を作成 を開く

予算の設定方法は2つあります。
| 設定方法 | 特徴 |
|---|---|
| テンプレートを使用(シンプル) | 推奨設定で素早く作成。ゼロ支出予算や月次コスト予算などのプリセットから選ぶだけ |
| カスタマイズ(アドバンスト) | 期間・金額・フィルター等を自由に設定できる |
テンプレートは個人・検証アカウントで「とりあえず課金を検知したい」場合に便利ですが、月別に予算額を変えたい、特定のアカウントだけ監視したい場合は カスタマイズ(アドバンスト) を選択します。
予算タイプは4種類(コスト予算・使用量予算・Savings Plans の予算・予約予算)がありますが、今回は金額ベースで予算を監視したいので、推奨となっている コスト予算 を選択して「次へ」進みます。
特定サービスの使用量を監視したい場合は使用量予算など、目的に応じて選択いただければと思います。
なお、「請求ビュー - オプション」という項目もありますが、今回はデフォルト(プライマリビュー)のままで進めています。
ステップ2. 予算を設定

画面に沿って上から入力していきます。
| 項目 | 設定内容 |
|---|---|
| 予算名 | 予算の内容がわかる名前(例:予算xxxx年度) |
| 期間 | 月額予算なら 月 |
| 予算更新タイプ | 定期予算(継続的に予算を追跡する場合) |
| 開始月 | 予算の開始月を指定 (該当月以降のみ選択可能、過去は選択できません) |
| 予算設定方法 | 計画(月ごとに異なる金額)/ 固定(毎月同じ金額) |
月によって利用額が変動する場合は 計画 を選択します。すると当月から12ヶ月分の入力欄が表示されるので、各月の予算額を入力していきます。

ここが今回いちばん「大変だな」と感じたところで、12個の入力欄をひとつずつ手で埋めていくことになります。「予算額を自動入力」というボタンもあるのですが、こちらは過去の実績コストから自動セットする機能のため、任意の月別金額を入れたいケースでは結局手入力になります。
詳細オプションの「コストの集計基準」は、特に理由がなければデフォルトの 非ブレンドコスト のままで問題ないかなと思います。
ステップ3. アラートの設定
しきい値(予算額の何%で通知するか)と、トリガーの種類を設定します。

| トリガー | 内容 |
|---|---|
| 実際 | 実際の利用額がしきい値を超えたら通知 |
| 予測 | 月末時点の予測額がしきい値を超えそうなら事前に通知 |
早めに気づきたい場合は 予測 がおすすめです。しきい値を入力すると「予測コストが $80.00 (80.00%) を超えると、アラートのしきい値を超過します」という要約文がその場で表示されるので、設定内容を確認しながら進められて安心でした。
アラートは複数追加(最大5つ設定可能)できるので、80% / 90% / 100% のように段階的に設定しておくと状況を把握しやすくなります。
通知先は以下の3種類から選べます。
| 通知方法 | 用途 |
|---|---|
| E メール | 一番シンプル。最大10人まで指定可能 |
| Amazon SNS | Lambda 連携や Slack 通知など拡張したい場合 |
| AWS Chatbot | Slack / Teams に直接通知したい場合 |
アクションをアタッチ (オプション)
- 予算アクションを使用すると、コスト意識の文化を推進するため、コスト節約の対応を定義してトリガーできます。
今回は特に設定せず次へ行きます。
確認・作成
確認画面で設定内容を確認し、「予算を作成」を押して完了です。

画面に沿って進めれば迷うところは少なかったのですが、計画型の12ヶ月分手入力は、複数アカウント分やるとなるとかなりの作業量になりそうです。ということで、次は CLI で試してみます。
CLI での設定手順
GUI では画面ごとに入力していた内容を、CLI では JSON ファイル2つ + コマンド で設定できます。
今回は、ローカルで JSON を作成 → AWS CloudShell にアップロード → コマンド実行、という流れにしました。
ファイルを事前に用意しておくと、実行前に中身をレビューできるので、本番アカウントでの作業を想定した場合も安心かと思います。投入した JSON がそのまま作業証跡・パラメータシートにもなります。
全体の流れ
1. budget.json を作成(予算の定義)
2. notifications.json を作成(アラートの定義)
3. CloudShell にアップロード
4. aws budgets create-budget で作成
5. aws budgets describe-budget で確認
ステップ1. 予算定義の JSON を作成
budget.json に予算名・期間・月別金額などをまとめて定義します。以下は 2026年8月から12ヶ月分の計画予算の例です。
{
"BudgetName": "blog-test-budget-cli",
"BudgetType": "COST",
"TimeUnit": "MONTHLY",
"PlannedBudgetLimits": {
"1785542400": { "Amount": "100", "Unit": "USD" },
"1788220800": { "Amount": "200", "Unit": "USD" },
"1790812800": { "Amount": "300", "Unit": "USD" },
"1793491200": { "Amount": "400", "Unit": "USD" },
"1796083200": { "Amount": "500", "Unit": "USD" },
"1798761600": { "Amount": "100", "Unit": "USD" },
"1801440000": { "Amount": "200", "Unit": "USD" },
"1803859200": { "Amount": "300", "Unit": "USD" },
"1806537600": { "Amount": "400", "Unit": "USD" },
"1809129600": { "Amount": "500", "Unit": "USD" },
"1811808000": { "Amount": "100", "Unit": "USD" },
"1814400000": { "Amount": "200", "Unit": "USD" }
},
"CostTypes": {
"UseBlended": false,
"IncludeTax": true,
"IncludeSubscription": true,
"IncludeRefund": false,
"IncludeCredit": false,
"IncludeUpfront": true,
"IncludeRecurring": true,
"IncludeOtherSubscription": true,
"IncludeSupport": true,
"IncludeDiscount": true,
"UseAmortized": false
},
"TimePeriod": {
"Start": "2026-08-01T00:00:00+00:00",
"End": "2087-06-15T00:00:00+00:00"
}
}
ポイント・注意点
PlannedBudgetLimits のキーはエポック秒
GUI では「8月 2026」のように月名で入力しましたが、CLI では各月1日を「エポック秒」で指定します。エポック秒は 1970年1月1日 00:00 UTC からの経過秒数のことで、公式仕様でも「キーは月の開始日時を UTC のエポック秒で指定する」と定められているため、ここは残念ながら避けて通れません。
とはいえ、自力で計算したり中身を深く理解したりする必要はなく、変換は以下のコマンドに任せれば OK です。なお date -d は GNU date の構文なので、CloudShell などの Linux 環境で実行してください(macOS の date では illegal option -- d エラーになります)。
# 各月のエポック秒を一括取得
for m in "2026-08-01" "2026-09-01" "2026-10-01" "2026-11-01" "2026-12-01" "2027-01-01" "2027-02-01" "2027-03-01" "2027-04-01" "2027-05-01" "2027-06-01" "2027-07-01"; do
echo "$m: $(date -d "${m}T00:00:00Z" +%s)"
done
なお公式仕様によると、月次の計画予算は「当月から12ヶ月分(当月+先の11ヶ月)」を指定することになっています。GUI で開始月に過去の月が選べなかったのはこの仕様によるものです。また、12ヶ月分を使い切った後は最後の月の金額が固定予算として引き継がれる仕様なので、期が変わるタイミングで金額を更新するのがよさそうです。
参考:AWS Budgets API リファレンス - Budget(PlannedBudgetLimits)
BudgetLimit と PlannedBudgetLimits は共存できない
計画型(月別金額指定)の場合、BudgetLimit を一緒に指定するとエラーになります。実際に両方入れて実行してみたところ、次のエラーが返ってきました。
An error occurred (InvalidParameterException) when calling the CreateBudget operation:
Unable to create/update budget - please provide only one of the followings:
Budget Limit/ Planned Budget Limit/ Auto Adjust Data
エラーメッセージを見ると、BudgetLimit(固定)/ PlannedBudgetLimits(計画)/ AutoAdjustData(自動調整)の3つのうちどれか1つだけを指定する仕様になっているようです。
TimePeriod の End
End は省略可能で、省略した場合は AWS がデフォルトの終了日 2087-06-15 00:00 UTC を自動設定します(コンソール・API 共通)。実際に End を省略した JSON で予算を作成して describe-budget で確認してみると、End が自動で設定されていました。
{
"Start": "2026-08-01T00:00:00+00:00",
"End": "2087-06-15T00:00:00+00:00"
}
今回は JSON を見ただけで投入内容が分かるように明示的に記載しています。定期予算は毎月リセットされながらこの終了日まで動き続けるため、実質的に無期限の予算として扱えます。なお仕様上は、終了日を過ぎると予算と関連する通知設定は削除されます。
参考:AWS Budgets API リファレンス - TimePeriod
GUI との対応は以下の通りです。
| GUI の設定項目 | JSON のフィールド |
|---|---|
| 予算名 | BudgetName |
| 予算タイプ(コスト予算) | BudgetType: "COST" |
| 期間(月) | TimeUnit: "MONTHLY" |
| 開始月 | TimePeriod.Start |
| 予算設定方法(計画) | PlannedBudgetLimits で月別に指定 |
| 詳細オプション(非ブレンドコスト) | CostTypes.UseBlended: false |
ステップ2. 通知設定の JSON を作成
notifications.json にしきい値・トリガー種別・通知先を定義します。GUI では「アラートのしきい値を追加」で1件ずつ画面入力しましたが、CLI なら配列に並べるだけで複数のアラートを一度に定義できます。
[
{
"Notification": {
"NotificationType": "FORECASTED",
"ComparisonOperator": "GREATER_THAN",
"Threshold": 80,
"ThresholdType": "PERCENTAGE"
},
"Subscribers": [
{ "SubscriptionType": "EMAIL", "Address": "alert@example.com" }
]
},
{
"Notification": {
"NotificationType": "FORECASTED",
"ComparisonOperator": "GREATER_THAN",
"Threshold": 90,
"ThresholdType": "PERCENTAGE"
},
"Subscribers": [
{ "SubscriptionType": "EMAIL", "Address": "alert@example.com" }
]
},
{
"Notification": {
"NotificationType": "FORECASTED",
"ComparisonOperator": "GREATER_THAN",
"Threshold": 100,
"ThresholdType": "PERCENTAGE"
},
"Subscribers": [
{ "SubscriptionType": "EMAIL", "Address": "alert@example.com" }
]
}
]
| GUI の設定項目 | JSON のフィールド |
|---|---|
| トリガー(予測) | NotificationType: "FORECASTED" |
| トリガー(実際) | NotificationType: "ACTUAL" |
| しきい値 | Threshold |
| E メール通知先 | Subscribers の EMAIL |
| SNS 通知先 | Subscribers の SNS(ARN を指定) |
ステップ3. JSON ファイルを CloudShell にアップロード
作成した budget.json と notifications.json を CloudShell にアップロードします。

アクション > ファイルのアップロード からアップロードできます。2ファイル同時にアップロードすると「Too Many Requests」エラーになる場合があるので、1ファイルずつアップロードするのが無難です。アップロード後は ls -l や cat で中身が壊れていないか確認しておきます。
ステップ4. 予算を作成
2つの JSON を指定してコマンドを実行します。
ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
aws budgets create-budget \
--account-id "$ACCOUNT_ID" \
--budget file://budget.json \
--notifications-with-subscribers file://notifications.json
成功した場合は何も出力されずにプロンプトが返ります。
--account-id は API の必須パラメータで、予算を作成するアカウントを指定します。CloudShell にログイン中のアカウントと同じでも省略できません。
参考:AWS CLI リファレンス - budgets create-budget
ステップ5. 作成した予算を確認
aws budgets describe-budget \
--account-id "$ACCOUNT_ID" \
--budget-name "blog-test-budget-cli"
JSON で投入した12ヶ月分の計画金額が返ってくれば成功です。CLI で作成した予算は、GUI のコンソールの予算一覧からも確認できました。
GUI で12回手入力した予算と、JSON で投入した予算が同じ内容で作成されているのを見て、これは使い分けの価値があるなと感じました。
GUI と CLI の比較
| 観点 | GUI | CLI |
|---|---|---|
| 初回の手軽さ | すぐ始められる | JSON の準備が必要 |
| 操作ミスの気づきやすさ | 画面で確認しやすい、が見落としもしやすい | describe コマンドで事後確認のみ |
| 事前レビュー | 入力しながら確認 | 投入前に JSON をレビューできる |
| 再現性 | 手順書+スクショが必要 | JSON を使いまわしできる |
やってみて
今回実際に GUI と CLI の両方で予算アラートを作成してみて、いくつかハマりポイントがありました。
BudgetLimitとPlannedBudgetLimitsは共存できない — 実際のエラーメッセージから、AutoAdjustDataを含めた3つのうち「どれか1つだけ」を指定する仕様のようだと分かりましたPlannedBudgetLimitsのキーはエポック秒 — 仕様で決まっているため避けられませんが、変換コマンドに任せれば簡単に出力できました。(ただし、Linux 環境前提)- CloudShell のファイルアップロードは1ファイルずつ — 同時にアップロードするとレート制限に引っかかることがあります
--account-idは省略できない — 対象アカウントの CloudShell で実行していても、API の必須パラメータなので指定が必要です
GUI は画面に沿って入力するだけなのでわかりやすいのですが、計画型で12ヶ月分の金額を入れるのは正直大変でした。
一度 JSON を作ってしまえば CLI の方が使い回しがきいて効率的かなと思いました。
ただし、CLI でもエポック秒の計算や JSON の手作成など、まだ手作業が残ります。
次回は CloudFormation を使って、もっと簡単にできないか試してみたいと思います。
本記事が、どなたかの参考になれば幸いです。
AWS運用代行・サーバー監視のご案内
クラスメソッド マネージドサービス は、AWS国内支援実績No.1のクラスメソッドが提供する、クラウド特有の対応やクラウド技術者の不足に課題をお持ちのお客様向けのAWS運用トータル支援サービスです。
監視や運用支援にとどまらず、お客様のクラウド利用を最適化し日々の負担を最小化することで、お客様のビジネス効果の最大化を支援します。
クラスメソッドオペレーションズ株式会社について
クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイト をぜひご覧ください。




