はじめに
AWS Budgets の予算アラートを、コンソールを使わずに AWS CLI で作ったときの自分用のメモです。作成、通知の追加、確認、削除のコマンドをまとめます。AWS CLI v2(2.35.15)で確かめました。
できあがり
| 項目 | 設定 |
|---|---|
| 予算の種類 | コスト予算(月ごと) |
| 上限 | 50 USD |
| 通知 | 実績が 10 / 30 / 50 / 100 USD を超えたとき |
| 見込みでの通知 | なし |
| 宛先 | メール 1 件 |
金額は例です。
コンソールの項目と CLI の値
コンソールで選んでいた項目は、CLI では次の値になります。
| コンソールで選ぶ項目 | CLI の値 |
|---|---|
| 予算の種類(コスト予算) |
BudgetType: COST
|
| 期間(月別) |
TimeUnit: MONTHLY
|
| 予算額 | BudgetLimit |
| アラートを実績で出すか、予測で出すか |
NotificationType: ACTUAL / FORECASTED
|
| しきい値を予算額の割合で書くか、金額で書くか |
ThresholdType: PERCENTAGE / ABSOLUTE_VALUE
|
| 通知先のメールアドレス |
Subscribers(SubscriptionType: EMAIL) |
1. 予算を作る
予算の本体と通知の設定を、別々の JSON ファイルに書きます。アカウント ID はあとのコマンドでも使うので、先に変数に入れておきます。
ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
予算の本体です。月ごとのコスト予算で、上限を 50 USD にします。
{
"BudgetName": "account-monthly",
"BudgetType": "COST",
"TimeUnit": "MONTHLY",
"BudgetLimit": { "Amount": "50", "Unit": "USD" }
}
通知の設定です。NotificationType を ACTUAL にすると、見込みではなく実績で判定します。ThresholdType を ABSOLUTE_VALUE にすると、Threshold は割合ではなく金額(USD)として扱われます。ここでは 30 USD と 50 USD の 2 つを作り、残りは次の章で足します。
[
{
"Notification": {
"NotificationType": "ACTUAL",
"ComparisonOperator": "GREATER_THAN",
"Threshold": 30,
"ThresholdType": "ABSOLUTE_VALUE"
},
"Subscribers": [{ "SubscriptionType": "EMAIL", "Address": "you@example.com" }]
},
{
"Notification": {
"NotificationType": "ACTUAL",
"ComparisonOperator": "GREATER_THAN",
"Threshold": 50,
"ThresholdType": "ABSOLUTE_VALUE"
},
"Subscribers": [{ "SubscriptionType": "EMAIL", "Address": "you@example.com" }]
}
]
2 つのファイルを渡して作ります。成功しても何も表示されません。
aws budgets create-budget \
--account-id "$ACCOUNT_ID" \
--budget file://budget.json \
--notifications-with-subscribers file://notifications.json
期間(TimePeriod)は書かずに作りました。この場合、開始は作った月の 1 日、終了は 2087-06-15 になりました。
2. 通知をあとから足す
create-notification は 1 回の実行で通知を 1 つ足します。10 USD と 100 USD を続けて足します。
for threshold in 10 100; do
aws budgets create-notification \
--account-id "$ACCOUNT_ID" \
--budget-name account-monthly \
--notification NotificationType=ACTUAL,ComparisonOperator=GREATER_THAN,Threshold=$threshold,ThresholdType=ABSOLUTE_VALUE \
--subscribers SubscriptionType=EMAIL,Address=you@example.com
done
--notification と --subscribers は、JSON ファイルの代わりに キー=値 を並べる短い書き方で渡しています。
3. 確かめる
予算の上限と、今月の実績・月末の見込みを見ます。
aws budgets describe-budget \
--account-id "$ACCOUNT_ID" \
--budget-name account-monthly \
--query 'Budget.{limit: BudgetLimit.Amount, actual: CalculatedSpend.ActualSpend.Amount, forecast: CalculatedSpend.ForecastedSpend.Amount}'
{
"limit": "50.0",
"actual": "12.34",
"forecast": "18.50"
}
actual が今月の実績、forecast が月末の見込みです(値は例です)。今月いくら使ったかを見るだけなら、1 回 0.01 USD かかる Cost Explorer の API を呼ばずに済みます。
通知ごとの状態は describe-notifications-for-budget で見ます。金額の順に並べて、表の形で出します。
aws budgets describe-notifications-for-budget \
--account-id "$ACCOUNT_ID" \
--budget-name account-monthly \
--query 'sort_by(Notifications, &Threshold)[].[NotificationType, Threshold, ThresholdType, NotificationState]' \
--output table
------------------------------------------------
| DescribeNotificationsForBudget |
+--------+--------+------------------+---------+
| ACTUAL| 10.0 | ABSOLUTE_VALUE | ALARM |
| ACTUAL| 30.0 | ABSOLUTE_VALUE | OK |
| ACTUAL| 50.0 | ABSOLUTE_VALUE | OK |
| ACTUAL| 100.0 | ABSOLUTE_VALUE | OK |
+--------+--------+------------------+---------+
NotificationState は、しきい値を超えていれば ALARM、まだなら OK です(値は例です)。
宛先は通知ごとに持っています。見たい通知を、種類・比べ方・しきい値・しきい値の種類の 4 つで指定します。
aws budgets describe-subscribers-for-notification \
--account-id "$ACCOUNT_ID" \
--budget-name account-monthly \
--notification NotificationType=ACTUAL,ComparisonOperator=GREATER_THAN,Threshold=10,ThresholdType=ABSOLUTE_VALUE \
--query 'Subscribers'
[
{
"SubscriptionType": "EMAIL",
"Address": "you@example.com"
}
]
4. 消す
通知を 1 つだけ消すときは delete-notification を使います。今回は使っていませんが、一式として載せておきます。
aws budgets delete-notification \
--account-id "$ACCOUNT_ID" \
--budget-name account-monthly \
--notification NotificationType=ACTUAL,ComparisonOperator=GREATER_THAN,Threshold=100,ThresholdType=ABSOLUTE_VALUE
予算ごと消すときは delete-budget です。API リファレンスによると、予算を消すとその予算の通知と宛先も一緒に消えます。
aws budgets delete-budget \
--account-id "$ACCOUNT_ID" \
--budget-name account-monthly
作ってみて分かったこと
- 予算の名前はあとから変えられません。
UpdateBudgetで変えられるのは、名前とCalculatedSpend以外の項目です。名前を変えたいときは、新しい名前で作ってから古い予算を消します。 - 作った時点で実績がしきい値を超えている通知は、すぐ
ALARMになります。今回は、いちばん低い通知を足した時点で今月の実績がそのしきい値を超えていたので、足した直後からALARMでした。 - 金額で決めるしきい値は、上限より上の金額でも指定できます。上限の 2 倍の金額の通知も足せました。
- 通知は 1 つの予算に 10 個まで、宛先は 1 つの通知にメール 10 件と SNS 1 件までです。
- 監視と通知だけの予算は無料です。料金がかかるのは、アクション(しきい値を超えたときに IAM ポリシーや SCP を適用したり、EC2・RDS のインスタンスを止めたりする機能)を付けた予算です。アクション付きの予算は 2 つまで無料で、3 つ目からは 1 予算あたり 1 日 0.10 USD かかります。