コラム
GCPのコスト情報をTeamsで通知する方法
-
TAG
BigQuery Cloud Functions Cloud Pub/Sub GCP Teams -
UPDATE
2022/12/01
はじめに
今回は日次でTeamsの専用チャネルにGCPのコスト情報を通知するアプリケーションの作成方法について説明します。
弊社社内で運用しているGCPプロジェクトのコスト情報を管理するため、GCPリソース毎の利用料金の合計とリソースすべての利用料金の合計をTeamsに通知するアプリケーションを作成しました。
GCPのサービスを組み合わせることで素早く簡単に上記アプリケーションを実装することができます。
また、GCPのコストをTeamsに連携する実装方法について意外とネット上に情報が少なかったため少しでも参考になれば幸いです。
アーキテクチャ
今回実装するアプリケーションのアーキテクチャと処理の流れは以下の通りです。
アーキテクチャ図
処理の流れ
① Cloud Billing データを BigQuery にエクスポートする
② BigQueryのスケジュールクエリをPub/Subトピックにパブリッシュする
③ Pub/SubトピックをトリガーにCloud Functionsを起動する
④ Cloud FunctionsからBigQueryのコストデータを取得する
⑤ Cloud FunctionsからTeamsのチャネルにメッセージを投稿する
実装手順
ここからは、①~⑤の処理の流れに沿って、コスト連携アプリケーションの実装手順を説明します。
前提条件
以下事項を満たしていることがアプリケーションの実装を行う上での前提条件となります。
・GCPアカウントを持っていること
GCPを利用するためには、Googleアカウントが必要です。Googleアカウントを持っていない場合は、Googleアカウントの作成ページに移動し、Googleアカウントを取得してください。
・GCPプロジェクトを持っていること
GCPで利用する全てのリソースはプロジェクトに紐付けされます。GCPプロジェクトが無い場合はプロジェクトの作成と管理から作成してください。
・請求先アカウントを持っていること
プロジェクト内のリソースの利用料金は、請求先アカウントに課金されます。請請求先アカウントを持っていない場合はセルフサービスの Cloud 請求先アカウントの作成、変更、閉鎖から作成してください。
① Cloud Billing データを BigQuery にエクスポートする
まず、対象プロジェクトのBilling画面で「課金データのエクスポート」設定を行います。
必要情報を入力し「データセットを作成」をクリックします。
エクスポート設定が完了すると、BigQuery画面の対象プロジェクト配下にエクスポートしたデータセットが作成されます。なお、スキーマは自動で構成されます。
② BigQueryのスケジュールクエリをPub/Subトピックにパブリッシュする
Push型のPub/Subトピックを新規作成します。
トピック作成後のトピック一覧画面は以下の通りです。
続いて、①で作成したBigQueryのコスト情報データセットに対してスケジュールクエリを作成します。
そして、作成したPub/Subトピックをスケジュールクエリ実行結果の通知先として設定します。
③ Pub/SubトピックをトリガーにCloud Functionsを起動する
Pub/Subトピック画面に遷移し、Pub/SubからトリガーするCloud Functionsを新規作成します。
Cloud Functionsの作成が完了すると、一覧画面に以下のように表示されます。
作成したCloud Functionsにースコード(index.js、package.json)をデプロイします。
デプロイ方法は複数の方法から任意で選択できます。
キャプチャはブラウザのインラインエディタを選択していますが、Zipファイルのアップロード、gcloud SDKからコマンド実行等でもデプロイ可能です。
今回利用しているソースコードはGithubのこちらのリポジトリで公開していますので、ご興味のある方はご利用ください。
④ Cloud FunctionsからBigQueryのコストデータを取得する
Cloud Functionsで実行されるプログラム(index.js)によってBigQueryからコストデータの取得を行います。
※キャプチャのソースコードはこちら
プログラムの処理は概ね以下の通りになっています。
1.Node.jsのBigQueryクライアントライブラリを利用してBigQueryクライアントを取得する
2.BigQueryのコスト情報テーブルから必要なデータを取得するクエリを作成する
3.2.のクエリを実行しコスト情報を取得する
⑤ Cloud FunctionsからTeamsのチャネルにメッセージを投稿する
Teamsで通知を行いたいチャネルの設定画面からIncoming Webhookを作成しURLを取得します。
まず、Teamsの対象チャネルを右クリックし「コネクタ」をクリックします。
続いて、「Incoming Webhook」の「構成」をクリックします。
次に、Incoming Webhookの任意の名前を入力し、画像ファイルをアップロードします。
そして「作成」をクリックします。
作成が完了すると、Incoming WebhookのリンクURLが作成されるのでコピーボタンをクリックします。
コピーしたURLはCloud Functionsのソースコードに利用します。(デプロイ前に取得して反映するようにして下さい)
Cloud FunctionsからTeamsの対象チャネルにメッセージを投稿するソースコード(index.js)は以下の通りです。
※キャプチャのソースコードはこちら
プログラムの処理は概ね以下の通りになっています。
1.④で取得したBigQueryのデータを成形する
2.Teamsの対象チャネルに投稿するメッセージを作成する
3.Node.jsのIncoming Webhookのクライアントライブラリを利用してTeamsの対象チャネルにメッセージを投稿する
①~⑤までの実装が完了すると、以下のようにBigQueryのクエリが定期実行され、Pub/Subトピックを介してCloud Functionsが起動しメッセージがTeamsのチャネルに投稿されます。
BigQueryスケジュールクエリの実行
Cloud Functionsの起動
Teams対象チャネルへのメッセージの投稿
まとめ
GCPのサービスを利用して少ない手順で素早くコスト情報連携のアプリケーションを実装することができました。
これによりサービス利用料を毎日コンソール上で確認したりレポートを作成する手間を減らすことができます。
また、最近は社内コミュニケーションツールとしてTeamsを利用する企業が増えてきていると感じますし、中にはGCPの利用を検討している方もいらっしゃるかもしれません。
GCPを触ってみたいけど何から手を付けたら良いか迷っている方は、もしご興味がありましたら今回のチュートリアルを試してみてはいかがでしょうか。
今回は以上になります。
最後までお付き合いいただきありがとうございました!
参考
・(公式) BigQuery への課金データのエクスポートで GCP 利用コストを管理
package.jsonをCloud Functionsにアップロードすることで外部モジュールの使用が可能です。
ローカル環境からGCP上にCloud Functionsの資源をデプロイする方法です。
今回は利用していませんがローカルでCloud Functionsを実行できるエミュレータがあるようです。
・Cloud Pub/Sub + Node.jsのローカル開発環境の構築
今回は利用していませんがローカルでPub/Subを実行できるエミュレータがあるようです。
-
PICK UP
ピックアップ
-
ピックアップコンテンツがありません
-
RANKING
人気の記事
-
-
1
クラウドセキュリティ - 汝、疑ってかかれ
クラウドセキュリティ - 汝、疑ってかかれ
2021/11/16
-
2
DevOps、その遙かなる道程(第2回)
DevOps、その遙かなる道程(第2回)
2019/08/30
-
3
望雲彼方に ~クラウド移行その1(用語編)~
望雲彼方に ~クラウド移行その1(用語編)~
2020/01/20
-
4
EKSを理解する(第1回)eksctl・IAM・R…
EKSを理解する(第1回)eksctl・IAM・RBAC
2020/04/09
-
5
Infrastructure as Codeを理解…
Infrastructure as Codeを理解する(第1回)
2020/04/15
-
-
ARCHIVE
アーカイブ
-
- July 2024 (1)
- January 2024 (1)
- December 2023 (2)
- June 2023 (2)
- May 2023 (1)
- April 2023 (1)
- March 2023 (2)
- February 2023 (2)
- January 2023 (1)
- December 2022 (2)
- October 2022 (2)
- September 2022 (2)