メンバーズ CUR でやってみよう!SP の各種情報(インベントリ、使用率、カバー率、按分)を Slack へレポート通知する編
今までメンバーズ CUR を利用して、コスト管理に必要な情報を取得・可視化する方法を検証してきました。
- メンバーズ CUR でやってみよう!Savings Plans 使用率(Utilization)&カバー率(Coverage)編
- クラスメソッドメンバーズ提供の CUR を利用した Cloud Intelligence Dashboards の作り方
- SP/RI のコスト配分が学べる「Handling Savings Plan (SP) and Reserved Instance (RI) Chargeback, Showback, and Cost Allocation」ワークショップをやってみた
概ね、実現可能ではありましたが
- 毎回 Athena を実行するのはちょっと...
- 特定の情報を取得するためだけにダッシュボードを用意するのはちょっと...
- 慣れたツールから離れて新しいツールへ遷移するのはちょっと...
そんなお気持ち、、あると思います。なので今回、メンバーズ CUR を利用して SP に関する各種情報(インベントリ、使用率、カバー率、按分)を取得して Slack にレポートとして通知する仕組みを作成していきます。
ざっくりとした構成は以下の通りです。

主な流れ:
① メンバーズ CUR の出力を事前設定
② EventBridge から定期実行
③ Slack 通知先(Webhook URL)の情報を取得
④ プログラム内で Athena を実行
⑤ メンバーズ CUR から各種情報を取得
⑥ 結果を返却
⑦ レポート加工して Slack へ通知
実際に通知されるレポートイメージ:





レポートらしさを出すために色々な情報を取得して加工したため少し長めになっていますが、シンプルに Athena 実行結果だけを通知することも可能です。
作成方法
前提要件
今回、以下は実施済みとします。
- メンバーズ CUR を出力済み
- Athena からのクエリ実行が可能な状態
- Slack Webhook URL を取得済み
Secrets Manager 作成
Secrets Manager には通知先である Slack の Webhook URL を登録します。
※ ローテーション設定は不要
- AWSコンソール → Secrets Manager を開く
- 「新しいシークレットを保存する」をクリック
- シークレットタイプの選択 → 「その他のシークレットのタイプ」を選択
- キー/値の設定
- キー: webhook_url
- 値: https://hooks.slack.com/services/XXX/XXXX/XXXXX
- シークレットの名前を設定(環境変数 SLACK_SECRET_NAME に設定する名前)
例: slack-webhook-risp-report - 「保存」
Lambda 関数作成
- AWSコンソール → Lambda → 「関数の作成」 → 「一から作成」を選択
- 基本的な情報を設定
- 関数名 : risp-reporter
- ランタイム: Python 3.14
- アーキテクチャ: arm64
- 実行ロール
以下が実行可能なポリシーが含まれるロールをアタッチ- デフォルト Lambda 実行
- Athena 実行
- Secrets Manager 参照
- 「関数の作成」をクリック
- タイムアウト時間を変更
30秒 → 1分(必要に応じてより長く) - 環境変数作成
以下の環境変数を作成します- ATHENA_DATABASE
- ATHENA_OUTPUT_LOCATION
- ATHENA_TABLE
- SLACK_CHANNEL
- SLACK_SECRET_NAME
- コードを貼り付け
- テストを実行
EventBridge 設定
- AWSコンソール → Lambda → 作成した関数を開く
- 「設定」タブ → 「トリガー」 → 「トリガーを追加」をクリック
- トリガーの設定 → 「EventBridge(CloudWatch Events)」を選択
- 「新規ルールの作成」を選択
- 以下を設定
以下では毎週金曜日に通知される設定です- ルール名 : risp-reporter-weekly-friday
- 説明 : 毎週金曜日にSP レポートを実行
- ルールタイプ : スケジュール式
- スケジュール式を入力
- cron(0 9 ? * FRI *)
- 「追加」をクリック
以上で準備は完了です。
設定した時間に冒頭で紹介したレポートが通知されてきます。
おわり
今回はメンバーズ CUR を利用してコスト管理に必要な情報を取得して Slack へ通知する仕組みを作成してきました。
手動で Athenaを実行したり専用ダッシュボードを参照する方法は一部の方にとっては苦も無く可能ですが、親しみのない方によっては障壁があることやコストへの意識が希薄な状態では浸透させるのは難しい場合が多いです。
最近では AWS コストに関するサマリーを通知している場合が多いかと思いますので、そこへ今回の仕組みで定期的に通知することで、普段の慣れた場所で状況を把握することができます。そこで気になる点が見られたら、詳細に調査を行ったり、関係者で会話を行うというイメージです。
おまけ
元々、月次レポートとして先月分を対象に情報取得してレポート通知する仕様で作成していましたが、月に一度で過去のものより週次や隔週など月中で届く方が良いのではと思い、以下の部分を修正して現在月を対象としています。もし月次で前月分のレポートが良い場合はコードの該当部分を修正することで可能です。
[仕様変更前(前月分を対象)]
last_month = now - relativedelta(months=1)
[仕様変更後(現在月を対象)]
last_month = now - relativedelta(months=0)
通知されるレポートイメージ:












