AWS Budgets のアラートを AWS Chatbot へ通知してみた!

2020.06.08

園部です。

AWS のコストアラートを AWS Budgets と AWS Chatbot を使って Slack へ通知する方法へ変更しました。以前は Lambda で実行した結果を Slack に通知していたのですが、Python 2.x 系だったので切り替えるタイミングで、フルマネージドに変えるのが目的となります!

こういうイメージがゴールです。

利用するサービス

AWS サービスは バージニア北部(us-east-1)リージョンを利用します。

  • AWS Budgets
  • AWS Chatbot
  • AWS SNS
  • AWS CloudWatch
  • IAM Role
  • Slack

やってみた

SNS トピック作成

SNS >>> トピック >>> トピックの作成 を選択

名前に任意のものを入力 >>> トピックの作成 を選択

アクセスポリシーへ追記を行います。 表示画面から ARN をどこかにメモしておきます。
編集 を選択

アクセスポリシーを展開

JSON 部分へ権限を追加します。

以下参考情報 [1] に記載されている JSON をコピーして "your topic ARN" を先ほどメモした SNS の ARN へ置き換えて、追加します。
変更の保存 を選択

{
  "Version": "2008-10-17",
  "Id": "__default_policy_ID",
  "Statement": [
    {
      "Sid": "E.g., AWSBudgetsSNSPublishingPermissions",
      "Effect": "Allow",
      "Principal": {
        "Service": "budgets.amazonaws.com"
      },
      "Action": "SNS:Publish",
      "Resource": "arn:aws:sns:us-east-1:*AWS Account ID*:budgets-chatbot-integration"
    },
    {
      "Sid": "__default_statement_ID",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": [
        "SNS:GetTopicAttributes",
        "SNS:SetTopicAttributes",
        "SNS:AddPermission",
        "SNS:RemovePermission",
        "SNS:DeleteTopic",
        "SNS:Subscribe",
        "SNS:ListSubscriptionsByTopic",
        "SNS:Publish",
        "SNS:Receive"
      ],
      "Resource": "arn:aws:sns:us-east-1:*AWS Account ID*:budgets-chatbot-integration",
      "Condition": {
        "StringEquals": {
          "AWS:SourceOwner": "*AWS Account ID*"
        }
      }
    }
  ]
}

AWS Chatbot 作成

AWS Chatbot >>> 設定済みクライアント >>> 新しいクライアントの作成 を設定

Slack >>> 設定 を選択

今回、通知先となる Slack へログインします。

許可する を選択

新しいチャネルを設定 を選択

プライベートチャンネルへ通知したい場合は以下に注意が必要です。

設定を進めます。

既存で IAM Role を作成していない場合は、この場で作成します。

先ほど作成した SNS を指定 >>> 設定 を選択

SNS 画面に戻ると、サブスクリプションが作成されています。

AWS Budgets 作成

AWS Budgets >>> 予算の作成 を選択

コスト予算 >>> 予算の設定 を選択

予算を設定していきます。
アラートの設定 を選択

今回は、通知されることを確認したいので、しきい値を最小(0.1)に指定しています。 先に作成した SNS の ARN を入力すると権限チェックが行われて、問題なければ 「レ」 が表示されます。
予算の確認 >>> 作成 を選択

しばらくすると 指定した Slack チャンネルに通知が届きます。

参考情報

[1] AWS Billing and Cost Management - ユーザーガイド - 予算の通知に関する Amazon SNS トピックの作成
[2] AWS Billing and Cost Management - ユーザーガイド - Amazon Chime および Slack での予算アラートの受信