7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

BeeXAdvent Calendar 2022

Day 24

【初心者向け】AWS ChatbotでコストアラートをSlackチャンネルへ飛ばす

Last updated at Posted at 2022-12-23

Qiita初投稿です。よろしくお願いします。
先日知らぬ間にAWSの使用料がすごいことになってしまいました…。再発防止のために「SlackにAWSのコストアラートを飛ぶようにしたいな~」と色々調べたところ、手ごろなAWS公式のドキュメントを見つけたので、こちらを基にコストアラートを実装した過程を記します。気になる方はぜひお手元で実装してみてください。

仕組み

image.png
AWSの公式ページからとってきた図です。真ん中のAmazon SNS, AWS Chatbotは変わらず、左端のPublisherがAWS Budgets、右端のChat room notificationsがSlackのチャンネルに当たります。「AWS Budgetsでコストの閾値を設定し、それを超えたタイミングでAmazon SNS、AWS Chatbotと経由してSlackのチャンネルに通知がとぶ」というのが今回の仕組みです。

実装手順1.Amazon SNSの設定

1.SNSのコンソールへ行きます。任意のトピック名を設定して「次のステップ」を選択します。画像にはありませんが、リージョンの確認をお忘れなく! スライド1.PNG

2.他は特にいじらず「トピックを作成」を選択します。(画像無し)
3.ARNをコピーした後「編集」を選択します。スライド2.PNG

4.AWS Budgetsが作成したSNSトピックを使えるようにするため、アクセスポリシーのJSONエディタ内に以下のコードを張り付けます。このとき、自分の環境に合わせて書き換えが計5か所必要ですのでお忘れなく。具体的には「上でコピーしたAmazon SNSのARN」と「自分のアカウントID」という部分です。それぞれ自分のアカウントIDまたは上でコピーしたAmazon SNSのARNに書き換えます。(参考URLはこちら) スライド3.PNG

{
  "Version": "2008-10-17",
  "Id": "__default_policy_ID",
  "Statement": [
    {
      "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"
      ],
      "Resource": "上でコピーしたAmazon SNSのARN",
      "Condition": {
        "StringEquals": {
          "AWS:SourceOwner": "自分のアカウントID"
        }
      }
    },
    {
      "Sid": "E.g., AWSBudgetsSNSPublishingPermissions",
      "Effect": "Allow",
      "Principal": {
        "Service": "budgets.amazonaws.com"
      },
      "Action": "SNS:Publish",
      "Resource": "上でコピーしたAmazon SNSのARN",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "自分のアカウントID"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:budgets::自分のアカウントID:*"
        }
      }
    }
  ]
}

5.コードを書き換えたら他はいじらず、「変更の保存」を選択します。(画像無し)

以上でAmazon SNSの設定は完了です。

実装手順2.AWS Chatbotの設定

1.AWS Chatbotから「Slack」、「クライアントを設定」を選択します。スライド4.PNG

2.所望のSlackのワークスペースを選んで「許可する」を選択します。
スライド5.PNG

3.「新しいチャネルを設定」を選択します。スライド6.PNG

4.設定名は自由に、チャネルIDはSlackで任意のチャンネル名IDをコピーして選択します。(ダイレクトメッセージだと連携がうまくいかないので注意!地味にハマりました)スライド7.PNG

5.チャネルロールを選択し、チャネルロールは「テンプレートを使用してIAMロールを作成する」を選択します。ロール名は任意です。スライド8.PNG

6.チャネルガードレールポリシーは「PowerUserAccess」を選択します。(本来はもっと弱いポリシーを使った方がよいです)その後、リージョンに「東京」、トピックは先ほど選択したSNSトピックを選択します。その後「保存」を選択します。

以上でAWS Chatbotの設定は完了です。

実装手順3.AWS Budgetsの設定

1.コンソールからAWS Budgetsへいき、「予算の作成」を選択します。スライド10.PNG

2.予算の設定では「カスタマイズ(アドバンスト)」を選択し、予算タイプは「コスト予算」を選択します。画像にはありませんが「次へ」を選択します。スライド11.PNG

3.予算名は自由記入です。スライド12.PNG

4.期間は「日」、予算更新タイプは「定期予算」、予算設定方法は「固定」、予算額はすぐにアラートが来るか確認したかったので「0.5ドル」としました。
スライド13.PNG

5.範囲オプションは「すべてのAWSのサービス」、コストの集計基準は「非ブレンドコスト」、サポートされている請求タイプはデフォルトのままです。(「前払いの予約料金」、「定期的な予約料金」、「その他のサブスクリプションコスト」、「税金」、「サポートの料金」、「割引」)アラートの閾値は「100, 予算額の%」、トリガーは「実際」を選択します。スライド14.PNG

6.Amazon SNS ARNでARN名を入力し、「次へ」を選択します。
blog用_20221223.png

7.「予算を作成」を押します。(画像無し)

以上でAWS Budgetsの設定は完了です。

コストアラートを確認する

AWS Budgetsで情報が更新時、閾値を超えていれば下画像のようにSlackにアラートが届きます!ただし、AWS BudgetsはリアルタイムでAWSのコストを計算しているわけではない点にご注意ください。
image.png

まとめと感想

今回はコストアラートをSlackに通知する機能を実装しました。ここからさらにアラートの内容を充実させたり、アラートに応じて後続アクションの追加等検証したいと思います。ここまでご覧いただきありがとうございました。それでは皆様、よいクリスマスを:snowflake:

7
2
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
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?