💰

GCPのコストをSlackに通知する

2023/11/07に公開

予想外の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回通知したら当日のそれ以降の通知がされないようにコードに修正してみるとよいかもしれません

参考

https://dev.classmethod.jp/articles/gcp-cost-slack-bot-notify/

Discussion