👌
GCPで予算設定をしてcloud functionを使ってdiscordに通知する方法
はじめに
zennには初めての投稿になります。
この度GCPに入門して予算設定をし通知先をdiscordに設定したため備忘録として残しておきます。
予算設定
予算設定は下記のgoogle公式ドキュメントを参考に設定しました。
cloud functionからdiscordへの通知設定
予算設定はしましたがメールだけですと見逃してしまうかもしれないので普段使っているdiscordサーバに通知チャンネルを作ってwebhookにて通知することにしました。
参考サイトの情報を元に下記の設定にしました。
設定値
- ランタイム:node.js 16
- エントリポイント:alertBudget
index.js
※discordのwebhookURLはマスクしてます
const { IncomingWebhook } = require('@slack/webhook');
/**
* Background Cloud Function to be triggered by Pub/Sub.
*
* @param {object} event The Cloud Functions event.
* @param {object} context
*/
exports.alertBudget = async pubsubEvent => {
const pubsubData = Buffer.from(pubsubEvent.data, 'base64').toString();
console.log(`${pubsubData}`);
const obj = JSON.parse(pubsubData);
if (obj.costAmount > obj.budgetAmount) {
const body = {
"text": "[Warning]GCP予算を超過しました\n" +
`*現在の使用料金*:${obj.costAmount} ${obj.currencyCode}`
};
// discordに通知
const webhook = new IncomingWebhook('https://discord.com/api/webhooks/xxxxxxxxxxxx/xxxxxxxxxxxxxx/slack');
await webhook.send(body);
} else {
console.log(`${obj.costAmount}/${obj.budgetAmount}`);
}
return 'Discord notification sent successfully';
}
package.json
{
"name": "alert-budget-discord-http",
"version": "0.0.1",
"dependencies": {
"@slack/webhook": "^6.1.0"
}
}
動作確認
テストデータ
テストデータ(元データ)
{
"budgetDisplayName": "name-of-budget",
"alertThresholdExceeded": 1.0,
"costAmount": 100.01,
"costIntervalStart": "2019-01-01T00:00:00Z",
"budgetAmount": 100.00,
"budgetAmountType": "SPECIFIED_AMOUNT",
"currencyCode": "USD"
}
これをBase64にして下記のデータをテストデータとして使用
テストデータ(base64)
{"data": "ew0KICAgICJidWRnZXREaXNwbGF5TmFtZSI6ICJuYW1lLW9mLWJ1ZGdldCIsDQogICAgImFsZXJ0VGhyZXNob2xkRXhjZWVkZWQiOiAxLjAsDQogICAgImNvc3RBbW91bnQiOiAxMDAuMDEsDQogICAgImNvc3RJbnRlcnZhbFN0YXJ0IjogIjIwMTktMDEtMDFUMDA6MDA6MDBaIiwNCiAgICAiYnVkZ2V0QW1vdW50IjogMTAwLjAwLA0KICAgICJidWRnZXRBbW91bnRUeXBlIjogIlNQRUNJRklFRF9BTU9VTlQiLA0KICAgICJjdXJyZW5jeUNvZGUiOiAiVVNEIg0KfQ=="}
テスト結果
通知オッケーです!
本日はここまで。
Discussion