🙈

Datastore の変更をトリガーとするイベント駆動型アーキテクチャを構築することが可能になりました(プレビュー)

2023/08/17に公開

はじめに

こんにちは、クラウドエース データ ML ディビジョン所属の工藤です。
クラウドエースの IT エンジニアリングを担うシステム開発部の中で、特にデータ基盤構築・分析基盤構築からデータ分析までを含む一貫したデータ課題の解決を専門とするのがデータ ML ディビジョンです。

データ ML ディビジョンでは活動の一環として、毎週 Google Cloud の新規リリースを調査・発表し、データ領域のプロダクトのキャッチアップをしています。その中でも重要と考えるリリースを本ページ含め記事として公開しています。

今回紹介するリリースは、Datastore モードの Firestore のトリガーについてです。このリリースにより、Datastore データベースの変更をトリガーに、Cloud Functions などのプロダクトを起動できるようになりました。なお、この機能はプレビュー段階になります。

Datastore の概要

Datastore は、Google Cloud が提供する NoSQL ドキュメントデータベースであり、
自動スケーリングと高パフォーマンスを実現しているという特徴があります。

Datastore では、エンティティという単位でデータを扱います。エンティティは、一連のプロパティを持つデータオブジェクトで、それぞれのプロパティは名前と値を持ちます。例えば、ユーザープロファイルのエンティティの場合は、名前、メールアドレス、プロフィール画像などのプロパティを持つことになります。詳細な情報は、公式ドキュメントをご確認ください。

Eventarc の概要

Eventarc は、Google サービス、SaaS、独自のアプリからのイベントを、Cloud Functions や Cloud Run などの様々な宛先に転送できるプロダクトです。Eventarc を使用することで、インフラストラクチャの管理なしにイベント駆動型アーキテクチャを構築することが可能になります。

今回のリリースについて

今回ご紹介するのは、2023 年 6 月 27 日付に発表された Datastore モードの Firestore のトリガー についてです。

該当リリースノート:Datastore release notes

リリース概要

Datastore と Eventarc を組み合わせて、Datastore データベースの変更をトリガーにするイベント駆動型アーキテクチャを構築できるようになりました。このリリースにより、Datastore を使用しているシステムでは、定期的に実行していたデータの同期をイベント駆動型に置き換えることが可能になりました。これにより、データ利活用のリアルタイム性をより高めることができます。
イベントの転送先に設定できるプロダクトは、以下のとおりです。

また、トリガーにできるイベントは、以下のとおりです。

  • エンティティが作成されたとき
  • エンティティが更新されたとき
  • エンティティが削除されたとき
  • エンティティが作成、更新、削除されたとき

制限事項

Eventarc は、マルチリージョンで使用できるプロダクトではありますが、Datastore のイベントトリガーでは Eventarc をマルチリージョンで使用することができません。そのため、マルチリージョン構成となっている Datastore を Eventarc のイベント元とした場合は、Eventarc は特定のリージョンにマッピングされます。
例えば、Datastore で nam5(米国)を設定している場合、Eventarc のリージョンは us-central1 にマッピングされます。
詳細は、ドキュメントをご確認ください。

料金

このトリガーを使用するための追加料金はありませんが、DatastoreEventarc、転送先のプロダクトの標準料金が発生します。転送先のプロダクトの料金は、使用するプロダクトの料金ページをご確認ください。

試してみた

実際に Datastore データベースの変更をトリガーとして色んなプロダクトを動かしてみて、どのようにトリガーを作成するのか確認していきましょう。今回は、Cloud FunctionsWorkflows を例に見ていきます。

Cloud Functions

Datastore データベースの変更をトリガーにして、Cloud Functions の関数を起動してみます。

1. Datastore データベース・エンティティを作成

公式のクイックスタートを参考に、以下のようなデータベースとエンティティを作成します。
Datastoreエンティティ作成

2. 呼び出される Cloud Functions の関数を作成

Datastore のイベントに応答する関数を、以下のコマンドで作成します。この関数が実行されると「 Datastore から呼び出されました!」というログが出力されます。コマンドで使用している各フラグは、公式ドキュメントを参照ください。

gcloud functions deploy function-datastore-trigger \
--gen2 \
--project="ご自身のプロジェクトIDを設定してください" \
--region=asia-northeast1 \
--trigger-location=asia-northeast1 \
--runtime=python311 \
--source=./functions \
--entry-point=hello_firestore \
--trigger-event-filters="type=google.cloud.datastore.entity.v1.written" \
--trigger-event-filters="database=(default)" 

上記のコマンドで参照しているソースは、以下の内容です。

functions/main.py
from cloudevents.http import CloudEvent
import functions_framework
from google.events.cloud import firestore


@functions_framework.cloud_event
def hello_firestore(cloud_event: CloudEvent) -> None:

    print("Datastoreから呼び出されました!")
functions/requirements.txt
functions-framework==3.3.0
google-events==0.4.0
google-api-core==2.6.0
protobuf==4.22.1
cloudevents==1.9.0

3. Datastore データベースを更新し、関数が起動することを確認

手順 1 で作成した Datastore エンティティを更新し、手順 2 で作成した Cloud Functions の関数が起動されることを確認します。
Datastore コンソールから手順 1 で作成したエンティティを開き、「プロパティを追加」を押下します。
プロパティの編集
「プロパティの追加」画面から、名前、タイプ、値をそれぞれ設定して、「追加」を押下します。
プロパティの追加
「エンティティの編集」画面から、「保存」を押下します。
プロパティの保存
これで Datastore エンティティが更新されたので、先ほど作成した Cloud Functions の関数が起動したはずです。Cloud Functions のログを確認するため、Cloud Functions のコンソールから作成した関数を選択します。
関数選択
「ログ」タブを確認すると、先ほど作成したとおりにログが出力されています(画像赤枠)ので、Cloud Functions の関数が起動されたことを確認できました。
ログ確認

Workflows

1. Datastore データベース・エンティティを作成

Cloud Functions の手順 1 同様にデータベースとエンティティを作成します。今回は、Cloud Functions の検証で作成したものを使用します。
Datastoreエンティティ作成

2. 呼び出される ワークフローを作成

クイックスタート(公式)を参考に、ワークフローを作成します。
ワークフロー作成

3. Eventarc トリガーを作成

ドキュメントを参考に、Eventarc トリガーを作成していきます。
Eventarc の「トリガー」ページに移動し、「トリガーを作成」を押下します。
Eventarc初期画面
トリガーの作成画面に移動したら、以下の内容を設定して「作成」を押下します。今回は、Datastore のエンティティが作成、更新、削除されたときに反応するトリガーを作成します。

項目 設定値
トリガーの名前 作成するトリガーの名前(今回は datastore-trigger-workflows )
トリガーのタイプ Google のソース
イベント プロバイダ Cloud Firestore
イベント google.cloud.datastore.entity.v1.written
イベントデータのコンテンツ タイプ application/protobuf
リージョン 使用するリージョン(今回は asia-northeast1 )
フィルタ 手順 1 作成した Datastore の名前空間(今回は (default) )
サービス アカウント 使用するサービス アカウントの名前
イベントの宛先 Workflows
ワークフローを選択 手順 2 で作成したワークフローの名前

Eventarcトリガー作成

以上で、Eventarc トリガーを作成することができました。

4. Datastore データベースを更新し、作成したワークフローが実行されることを確認

手順 1 で作成した Datastore エンティティを更新し、手順 2 で作成したワークフローが実行されることを確認します。
念のため、手順 2 で作成したワークフローがまだ実行されていないことを確認します。
起動前
Datastore コンソールから手順 1 で作成したエンティティを開き、「プロパティを追加」を押下します。
プロパティの編集
「プロパティの追加」画面から、名前、タイプ、値をそれぞれ設定して、「追加」を押下します。
プロパティの追加
「エンティティの編集」画面から、「保存」を押下します。
プロパティの保存
これで Datastore エンティティが更新されたので、ワークフローが実行されたはずです。実行履歴を確認すると、たしかに 1 件実行されていることを確認できました。
実行確認

まとめ

今回の記事では、Datastore のトリガーについてご紹介しました。
このリリースにより、Datastore データベースの変更をトリガーに、Cloud Functions などのプロダクトを起動できるようになりました。
プレビュー段階ではありますが、Datastore データベースの変更をトリガーにするイベント駆動型アーキテクチャを構築したい場合に、是非ご利用ください。

Discussion