Google Cloud

Cloud StorageへのファイルアップロードをトリガーにGoogle Chatへチャットを送る方法

Cloud StorageへのファイルアップロードをトリガーにGoogle Chatへチャットを送る方法

GCSへのファイルアップロードをGoogle Chatで検知する仕組みを作ってみよう!

Google Cloud Platform(GCS)でデータ分析基盤などを運用している場合、データレイクとして様々なデータをCloud Storage(GCS)のバケットに連携しているケースが多いかと思います。そのような場合、GCPの外部からGCSのバケットにデータ連携が適切に行われたかどうか、確認したいと思っている方もいるかと思います。

特に、夜間や早朝のバッチ処理などで、基幹系のシステムからGCPにデータ連携処理をしている場合には、正常にデータ連携が行われていない場合にはリカバリーが必要になるため、通知があると便利かと思います。

GCSにはバケットの更新をトリガーに、Cloud Functionsの関数を自動的に実行する機能があります。GCPを利用している人は恐らくGoogle Chatを利用している方が多いと思うので、バケットに正常にファイルアップロードができたことをGoogle Chatに通知を出せる仕組みを作ってみましょう!

バケットへのアップロードをトリガーにCloud Functionsを実行する手順

Cloud Storage上にバケットを作成する

それでは、必要となる手順について、説明していきます。
まずはCloud Storage上にバケットを作成します。バケットの作成は以下の投稿を参考にしていただけるとよいかと思います。

(参考)BigQueryをもっと活用するために-Cloud Storageでデータレイクの構築

Google Chatにチャットルームを作成する

Google Chat上で通知を出す方法として、今回は通知専用のチャットルームを作成することにします。

チャットルーム横の”+”をクリック

 

「チャットルームを作成」をクリック

 

チャットルームに名前(ここでは”GCF_TRIGGER”)を付けて「作成」をクリックします。

チャットルームからWebhookの設定に必要なURLを取得する

Cloud FunctionsからGoogle Chatに通知を飛ばすには、Webhookの仕組みを利用する必要があります。作成したチャットルームから設定に必要となるURLを取得します。

「Webhookを管理」をクリック

 

Webhook設定用のURLをコピーする

Cloud Functionsで関数を作成する

Cloud Functionsで関数を作成します。今回作成する関数は、Cloud Storageのバケット(triggertest_20210606)にファイル、フォルダがアップロードされたら、アップロードされた旨をGoogle Chatのグループチャット「GCF_TRIGGER」に通知メッセージを出力する関数です。

関数の作成画面で以下の設定を行い、「保存」→「次へ」をクリック

  • 関数名:googlechat-trigger
  • リージョン:asia-northeast1
  • トリガーのタイプ:Cloud Storage
  • Event type:ファイナライズ/作成
  • バケット:任意のバケット名(本記事では”triggertest_20210606″を利用)
  • ランタイム:Python3.7 (3.8、3.9でも可)
  • エントリポイント:googlechat_trigger
  • main.pyに以下のコードを記述

 

コードの詳細は以下の通りとなります。

from json import dumps
from httplib2 import Http
def googlechat_trigger(data, context):
    url = [Google Chatのグループチャットから取得したWebhook設定用のURL]
    bot_message = {
        'text': data['name'] + 'ファイルがアップロードされました'}
    message_headers = {'Content-Type': 'application/json; charset=UTF-8'}
    http_obj = Http()
    response = http_obj.request(
        uri=url,
        method='POST',
        headers=message_headers,
        body=dumps(bot_message),
    )
    print(response)
if __name__ == '__main__':
    googlechat_trigger()

 

コードを作成したらデプロイします。

デプロイが完了したら、対象のバケット内にデータをアップロードし、Google Chatのメッセージがグループチャットに届くことを確認します。

以上で設定手順は完了です。ぜひGoogle ChatとCloud Functions、Cloud Storageをうまく利用して、システムの運用を効率的に行いましょう!

また、関連記事として、Google Cloudのサービスを利用してGoogle Chatのスペースに自動で投稿する仕組みの作り方を載せています。

(参考)Google Chatのスペース上に自動で投稿するbotを作成するための手順

こちらも参考にしていただければ幸いです。

ABOUT ME
Gaku
JTCでデータエンジニアっぽいことをしています。仕事ではGoogle Cloud、GTM、Google AnalyticsやKARTE、Datahubあたりを触っています。 本ブログではGoogle Cloudやデータエンジニアリング、たまに趣味などの記事をアップします。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA