0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS Budgets の予算アラートを AWS CLI で作るメモ

0
Posted at

はじめに

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 にします。

budget.json
{
  "BudgetName": "account-monthly",
  "BudgetType": "COST",
  "TimeUnit": "MONTHLY",
  "BudgetLimit": { "Amount": "50", "Unit": "USD" }
}

通知の設定です。NotificationType を ACTUAL にすると、見込みではなく実績で判定します。ThresholdType を ABSOLUTE_VALUE にすると、Threshold は割合ではなく金額(USD)として扱われます。ここでは 30 USD と 50 USD の 2 つを作り、残りは次の章で足します。

notifications.json
[
  {
    "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 かかります。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?