Datastore の変更をトリガーとするイベント駆動型アーキテクチャを構築することが可能になりました(プレビュー)
はじめに
こんにちは、クラウドエース データ 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 にマッピングされます。
詳細は、ドキュメントをご確認ください。
料金
このトリガーを使用するための追加料金はありませんが、Datastore と Eventarc、転送先のプロダクトの標準料金が発生します。転送先のプロダクトの料金は、使用するプロダクトの料金ページをご確認ください。
試してみた
実際に Datastore データベースの変更をトリガーとして色んなプロダクトを動かしてみて、どのようにトリガーを作成するのか確認していきましょう。今回は、Cloud Functions と Workflows を例に見ていきます。
Cloud Functions
Datastore データベースの変更をトリガーにして、Cloud Functions の関数を起動してみます。
1. 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)"
上記のコマンドで参照しているソースは、以下の内容です。
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-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 の検証で作成したものを使用します。
2. 呼び出される ワークフローを作成
クイックスタート(公式)を参考に、ワークフローを作成します。
3. 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 トリガーを作成することができました。
4. Datastore データベースを更新し、作成したワークフローが実行されることを確認
手順 1 で作成した Datastore エンティティを更新し、手順 2 で作成したワークフローが実行されることを確認します。
念のため、手順 2 で作成したワークフローがまだ実行されていないことを確認します。
Datastore コンソールから手順 1 で作成したエンティティを開き、「プロパティを追加」を押下します。
「プロパティの追加」画面から、名前、タイプ、値をそれぞれ設定して、「追加」を押下します。
「エンティティの編集」画面から、「保存」を押下します。
これで Datastore エンティティが更新されたので、ワークフローが実行されたはずです。実行履歴を確認すると、たしかに 1 件実行されていることを確認できました。
まとめ
今回の記事では、Datastore のトリガーについてご紹介しました。
このリリースにより、Datastore データベースの変更をトリガーに、Cloud Functions などのプロダクトを起動できるようになりました。
プレビュー段階ではありますが、Datastore データベースの変更をトリガーにするイベント駆動型アーキテクチャを構築したい場合に、是非ご利用ください。
Discussion