💰
GCPのコストをSlackに通知する
予想外のGCPのコスト発生を早期検知するために、コストをSlackに通知することにしました。
予算とアラートの設定
アラートを作成する
◼️閾値の設定
基本無料枠でしか使わないので、コストが1円でも出たら通知するように。
怖いので閾値どんどん追加していったら↓こんなことに…😅
◼️通知の管理
Pub/Sub トピックを接続する
Cloud Functionの作成
◼️構成
Pub/Sub トリガーを追加する
先ほどのトピックを選択
◼️Cloud Functionのコード
main.py
import base64
import functions_framework
import requests
import json
# Triggered from a message on a Cloud Pub/Sub topic.
@functions_framework.cloud_event
def hello_pubsub(cloud_event):
# Print out the data from Pub/Sub, to prove that it worked
data = base64.b64decode(cloud_event.data["message"]["data"])
# バイト文字列ならデコード
if isinstance(data, bytes):
data = data.decode('utf-8')
# アラート名のデフォルト値を設定
budget_display_name = 'アラート'
# 配列に変換して必要なデータを取得
if isinstance(data, str):
data_json = json.loads(data)
if 'budgetDisplayName' in data_json:
budget_display_name = data_json['budgetDisplayName']
# messageの作成
message = f"【{budget_display_name}】\n```\n{data}\n```"
# Slackに投稿
requests.post(
url='SlackのwebhookURL',
data=json.dumps({
"text": message,
})
)
requirements.txt
functions-framework==3.*
requests
終わったらデプロイする
Slackへの投稿内容例
実際に動かしてみるとわかりますが、通知頻度がかなり多いです。頻度にムラがありますが多い時で1分に1回くらい? 通知が多すぎて辛い方は、1回通知したら当日のそれ以降の通知がされないようにコードに修正してみるとよいかもしれません
参考
Discussion