LoginSignup
2
3

More than 1 year has passed since last update.

【AWS】AWS Budgetsでコスト管理とアラート仕組みを作ってみた

Posted at

こんにちは。
AWSマルチアカウント環境を管理している者です。

マルチアカウント環境を運用しながら出てくる課題の1つは、各アカウントで発生するコストを把握して予算をオーバーしないように管理することです。
AWSは、「AWS Budgets」という予算を管理する機能を提供しています。今回、このAWS Budgets機能をカスタマイズしてAWS SNSを通じMicrosoft Teamsに通知を送る仕組みを作ってみましたので共有します。

アーキテクチャ

image.png

  • 通常時(予算のしきい値を超えてない時)は、AWSコンソールよりアカウント別の予算とコスト状況が確認できます。また、CSVダウンロードやレポートのメール送信も可能です。

  • 予測コストが予算の90%を超過した時、指定先のTeamsチャネルにてアラートします。超過時のアクションについては、Teamsチャネルメッセージとメール送信どちらも選択可能ですが確認が早いTeamsにしました。

AWS Budgets 設定項目

  • アラートのトリガー:以下のように、しきい値のXX%で「予測」および「実際」コストでトリガーされるか設定できます。
    image.png

  • アラートの通知先:以下のように、メール・SNSトピック・Amazon Chatbotが選択できます。
    image.png

  • アカウント数を絞ってコストを把握したい場合:予算の範囲の範囲オプションで「特定のAWSコストディメンションをフィルタリング」を選択し、リンクされたアカウントから対象アカウントを絞ることができます。
    image.png

通知するLambdaコード

import urllib3 
import json

http = urllib3.PoolManager() 
def lambda_handler(event, context): 
    url = "TeamsチャネルのWebhookアドレス"
    msg = {
        "text": event['Records'][0]['Sns']['Message']
    }
    
    encoded_msg = json.dumps(msg).encode('utf-8')
    response = http.request('POST',url, body=encoded_msg)
    
    # ...

特にメッセージを加工せずAmazon SNSからのメッセージをそのまま送るようにしています。
メッセージの加工が必要な場合は、event['Records'][0]['Sns']['Message'] の中身を取ってきて処理するようにすればいいと思います。

実装してわかった注意事項

  • アラートはしきい値を超えた最初の1回のみ発生します。
    しかし、実際コストベースではない予測コストアラートは複数回アラートが発生する場合もあります。 → 詳しくはこちら
  • 複数回アラートを発生させたい場合は、以下のように複数のしきい値条件を追加することで実現できます。もちろん予測コストと実際コストのアラートを組み合わせることも可能です。
    image.png

参考ドキュメント

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