AWS Budgets で月額料金管理!!!

こんにちは、risakoです:woman:
花粉だったりインフルエンザ、コロナウイルスと体調管理が大事な時期ですね:sweat_drops:
不要不急の外出は控えて予防を徹底しましょう:muscle:

今回はAWS Budgets を使用して予算の使いすぎ予防をご紹介します！ 

#必要なもの
- AWS Billing and Cost Management コンソールで予算を作成できるIAMユーザー
- 月額の予算（USD）
- 通知するメールアドレス
- Amazon Simple Notification Service (Amazon SNS) 

#料金の予算を作成
1. Billing and Cost Management コンソールを開き、ナビゲーションペインで**[Budgets]**を選択します。
2. 右上の**[予算を作成]**を選択
3. 指定された金額に対してコストをモニタリングし、これから定義するしきい値に達したときにアラートメールを受け取りたいので**[コスト予算]**を選択。
4. **[名前][予算額(USD)]** を入力して、**[アラートの設定]**へ。
5. 使用料金が予算額の何％に達したらアラートメールを飛ばすのか**[アラートのしきい値]** で指定します。
6. 通知するメールアドレスを入力します。

ひとまずBilling and Cost Management コンソールでの作業は終わりです。Amazon SNSの設定後、また戻ってくるので一旦保存します。
**現段階ではアラートメールは飛びません！！**

#Amazon SNS 設定
##トピックスの作成
1. Amazon SNS コンソールを開き、**[トピックの作成]** を選択します。
2. トピックの**[名前]** を入力
3. アクセスポリシーを設定します。メソッドの選択で**[Advanced]**を選択しJSONを少し書き換えます。**"Statement": [** の後に入力し、**"your topic ARN"** は各自トピックのARNに書き換えます。

```
    {
      "Sid": "AWSBudgets-notification-1",
      "Effect": "Allow",
      "Principal": {
        "Service": "budgets.amazonaws.com"
      },
      "Action": "SNS:Publish",
      "Resource": "your topic ARN"
    },
```
全てのアクセスポリシーの記述はこのようになります。

```
{
  "Version": "2008-10-17",
  "Id": "__default_policy_ID",
  "Statement": [
    {
      "Sid": "AWSBudgets-notification-1",
      "Effect": "Allow",
      "Principal": {
        "Service": "budgets.amazonaws.com"
      },
      "Action": "SNS:Publish",
      "Resource": "your topic ARN"
    },
    {
      "Sid": "__default_statement_ID",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": [
        "SNS:Publish",
        "SNS:RemovePermission",
        "SNS:SetTopicAttributes",
        "SNS:DeleteTopic",
        "SNS:ListSubscriptionsByTopic",
        "SNS:GetTopicAttributes",
        "SNS:Receive",
        "SNS:AddPermission",
        "SNS:Subscribe"
      ],
      "Resource": "your topic ARN",
      "Condition": {
        "StringEquals": {
          "AWS:SourceOwner": "AWS ACCOUNT"
        }
      }
    }
  ]
}
```

4.**[トピックの作成]**を押下し、トピックの作成は完了です。

##サブスクリプションの作成
1. ナビゲーションペインで**[サブスクリプション]** を選択、または、作成したトピックからサブスクリプションを作成します。
2. トピックARNを入力し、今回はメールで通知するのでプロトコルは**[Eメール]**を選択。
3. エンドポイントに送信したいメールアドレスを入力する。
4. **[サブスクリプションの作成]**を押下で完了です。
5. 作成後、指定したメールアドレスに**[Confirm subscription]**のタイトルで承認メールが届くので、メール内の[Confirm subscription]押下で承認します。
6. サブスクリプションのステータスが**[確認済み]**になればOKです！
![スクリーンショット 2020-02-26 18.01.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429615/c749ee01-1a99-8701-369c-29a66d3a040d.png)

#Budgetsに戻ります
最後に残していたAWS Billing and Cost Management コンソールコンソールでの作業です。

1. 作成したBudgetsを選択し、右上の**[予算を編集]**を押下します。
2. [アラートの設定]に進み、メールアドレス下の**Amazon Simple Notification Service (SNS) トピックを通じて通知** にチェックし、作成したトピックARNを入力します。
![スクリーンショット 2020-02-26 18.09.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429615/310edb34-4849-a08a-fbd4-46c6c27e2933.png)

3. 設定を保存したら、終わりです！

設定が終わると登録したメールアドレスに**SNS Topic Verified!**のタイトルでメールが届きます。

#まとめ
気づいたら料金が高くなっていた！となる前に一定の料金を使ったらお知らせしてくれる便利な機能だと思いました！！
今回つまづいたのは、通知したいメールアドレスは**SNSとBudgetsの両方に登録しないといけない**ということです。
後からメールアドレスを追加する場合は、どちらか片方だけではなく、両方に登録することを忘れないようにしましょう:point_up::sparkles:

以上、AWS Budgetsでの月額料金管理方法でした:sunny:


#:dizzy: 追記
**Amazon SNS の設定は必須ではありません！**
設定した場合、AWS BudgetsとAmazon SNSの両方から通知メールが飛んでしまいます。（２通同じメールが送信されます。）
メール通知のみ希望する場合は、AWS Budgetsのみに登録すればOKです！
もちろん、Amazon SNSのみに通知先を登録することも可能です。
Amazon SNSでは、メールアドレス以外の通知先を設定できるのが魅力ですね:point_up:

##参考
>AWS Billing and Cost Management ユーザーガイド
https://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/billing-what-is.html