AWS Budgetsを設定して利用料金が予算を超えた場合に通知する

# はじめに
AWSのサービスを利用するに当たり、設定ミスにより知らぬ間に利用料金が増えてしまうことがあります。
いつの間にか高額請求されてしまうことのないように、
毎月の閾値を決め、その料金まで利用したら通知されるというような設定をAWSで行なっていきます。

今回はSlackへの通知とメール送信を同時に行うように設定します。
また、使用料が予算の50%,80%...それぞれのタイミングで通知されるようにします。

# 設定手順

設定対象のAWSサービスは下記の3つです。

* Amazon SNS
* AWS Chatbot
* AWS Budgets

## ルートユーザでログイン
今回は請求に関する設定のため、
ルートユーザでログインして設定を行なっていきます。


## Amazon SNSの設定
SNSのトピックを作成します。
設定はデフォルトで名前は `CostAlert` にしました。
タイプは`スタンダード`に設定しました。
ここで表示されているARNは次の設定に使用します。
![スクリーンショット 2020-12-11 0.52.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354517/4a7c0dff-5cab-e6ed-ddc0-e7f1e1c3502d.png)

次に、編集でアクセスポリシーを編集します。
下記のコードをStatementの下の行に追加します。
その際に`Insert-ARN-here`に先ほどのARNを入力します。

```
{
    "Sid": "AWSBudgets-notification-1",
    "Effect": "Allow",
    "Principal": {
        "Service": "budgets.amazonaws.com"
    },
    "Action": "SNS:Publish",
    "Resource": "Insert-ARN-here"
},
 
```

保存して、Amazon SNSの設定は終了です。


## Slackの設定
Slackで通知する。チャンネルを決めるか新しく作成します。


## AWS Chatbotの設定
AWS Chatbotで新しいクライアントを設定します。
![スクリーンショット 2020-12-11 0.28.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354517/6a8f7a63-d360-31b6-3178-11cd3787fb21.png)

クライアントの種類はSlackを選択します。
![スクリーンショット 2020-12-11 0.30.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354517/eee487df-90db-fe09-64f2-bc9c7f5eac27.png)

権限リクエストの画面が表示されるので、通知したいワークスペースを選択して許可します。
設定したクライアントで新しいチャネルを設定します。

設定名は`aws-alert-conf`にします。
アクセス許可の項目ではロール名のみ設定し他はデフォルト設定にします。
![スクリーンショット 2020-12-11 0.55.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354517/a1020d7a-73d6-d192-aad5-7f014ad02316.png)

Slackチャネルの項目で、先ほど決定したSlackのチャンネルをここで設定します。
![スクリーンショット 2020-12-11 0.35.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354517/82540bc9-ffbd-7311-d6ae-cda30e600461.png)

通知オプションはSNSを作成したリージョンを選び、
先ほど作成したトピックを選択します。
![スクリーンショット 2020-12-11 0.42.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354517/6e1120d1-67c5-e883-33cc-13f241392509.png)

これで、AWS Chatbotの設定は終了です。

## AWS Budgetsの設定

最後にAWS Budgetsの設定を行います。
右上のアカウントの項目の[マイ請求ダッシュボード]
-> 左の[Budgets]
-> [予算を作成する]で遷移していきします。
![スクリーンショット 2020-12-07 1.33.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354517/e8b3fadf-0206-bf79-9b1b-9969b91d7555.png)

閾値を超えた場合に通知を行いたいので[コスト予算]を選択します。
![スクリーンショット 2020-12-07 1.33.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354517/c592ae49-396b-bb86-9e09-54c567165e81.png)

予算の名前は任意で設定します。
間隔は`月別`にします。
Budget effective datesは`定期予算`にします。

予算額については`$10`を設定しました。
![スクリーンショット 2020-12-10 23.55.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354517/83606cca-dc5a-6fa2-6052-9510ae89ba2d.png)

実際にアラートされる金額を設定します。
予算額の`50%`($5)を設定しました。
毎月$5を超えた場合に通知が来るようになります。

次に通知の設定です。
Eメールの受信者にアラートを受信したいメールアドレスを設定します。
Amazon SNSには最初に作成したSNSトピックのARNを設定します。
![スクリーンショット 2020-12-11 1.16.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354517/31bdf7bd-3398-3c09-bb3d-01d7349ddd37.png)

また、新しいしきい値というボタンがありますので、
こちらのボタンを押して閾値の設定を同様に設定することで80%の通知、100%の通知...と増やすことができます。
![スクリーンショット 2020-12-13 23.50.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354517/eaf98014-f25f-3e2a-1fe9-709fdd4cb0ad.png)


あとは作成まで進めば完了です。

## 通知例
動作確認のために、閾値を最低限まで低くして待機してみました。
（その他AWSサービスを触ったり...）

待機してみると、Slackとメールに通知が来ていました。

Slackの例
![スクリーンショット 2020-12-13 23.34.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354517/95211acc-c33b-b977-15e6-e4fca1da7094.png)

Gmailの例
![スクリーンショット 2020-12-13 23.35.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354517/38cfebfa-1416-a62c-176f-083073a1c069.png)

同じように、もし動作確認のために閾値を低く設定していた場合は、
確認出来次第、設定を戻しておきましょう。

# 最後に
これで閾値に設定した金額になったらすぐにわかるようになったので、
安心してAWSを触れるようになりました。