Eventarc でイベント ドリブン アーキテクチャを作成する
Eventarc と Firestore を使用して、イベント ドリブン アーキテクチャを構築できます。Eventarc の Firestore トリガーは、データベース内の特定のドキュメントの変更からイベントを生成します。トリガーは、サポートされている宛先にイベントをルーティングできます。
- Cloud クライアント ライブラリと Firebase SDK をサポートする Cloud Functions(第 2 世代)
- Cloud Run
- Google Kubernetes Engine
- Workflows
Eventarc は、分離されたマイクロサービス間の状態変更(イベント)を管理する標準化されたソリューションを提供します。トリガーされると、Eventarc は配信、セキュリティ、承認、オブザーバビリティ、エラー処理を管理し、これらのイベントをさまざまな宛先に転送します。
制限事項
Eventarc の Firestore トリガーには、次の制限事項があります。
- 順序は保証されません。短時間に複数の変更を行うと、予期しない順序でイベントがトリガーされることがあります。
イベントは、少なくとも 1 回配信されます。
イベント ハンドラがべき等であることを確認し、イベントが複数回配信されるときに予期しない結果や副作用が発生しないようにします。詳細については、べき等関数の構築をご覧ください。
トリガーは、単一のデータベースに関連付けられます。複数のデータベースに一致するトリガーを作成することはできません。
データベースを削除しても、そのデータベースのトリガーは自動的に削除されません。トリガーはイベントの配信を停止しますが、トリガーを削除するまで存在し続けます。
Eventarc と Firestore のロケーション
Eventarc は、Firestore イベント トリガーのマルチリージョンをサポートしていませんが、マルチリージョン ロケーションの Firestore データベースのトリガーは作成できます。Eventarc は、Firestore マルチリージョン ロケーションを次の Eventarc リージョンにマッピングします。
Firestore マルチリージョン | Eventarc リージョン |
---|---|
nam5 |
us-central1 |
eur3 |
europe-west4 |
Cloud Functions の第 2 世代と第 1 世代の違い
Cloud Functions(第 2 世代)では、すべてのランタイムに Eventarc イベントを使用します。以前は、Cloud Functions(第 1 世代)では、一部のランタイムのみに Eventarc イベントが使用されていました。Eventarc イベントでは、Cloud Functions(第 1 世代)と次の点が異なります。
Eventarc 用の Firestore トリガーは、Cloud Functions 以外の追加の宛先をサポートしています。
CloudEvents
は、Cloud Run、GKE、Workflows など、さまざまな宛先に転送できます。Eventarc の Firestore トリガーは、データベース書き込みオペレーションの開始時にトリガー定義を取得し、その定義を使用して Firestore がイベントを出力するかどうかを判断します。書き込みオペレーションでは、実行中に発生する可能性のあるトリガー定義への変更は考慮されません。
Cloud Functions(第 1 世代)は、データベース書き込みの評価中にトリガー定義を取得し、評価中のトリガーの変更は、Firestore がイベントを出力するかどうかに影響します。
Datastore モードとネイティブ モードのイベント相互運用性
Eventarc は、Datastore モードとネイティブ モードの両方のイベント トリガーをサポートしています。これらのイベント トリガーは、両方のデータベース タイプで相互運用できます。 ネイティブ モードの Firestore データベースは Datastore のイベントを受信し、Datastore モードの Firestore データベースはネイティブ モード イベントを受信できます。
イベントの相互運用性により、さまざまなタイプの Firestore データベース間で Eventarc コードを共有できます。
イベント コンバージョン
ネイティブ モードのイベント トリガーを Datastore モードのデータベースに適用すると、Eventarc は次のコンバージョンを行います。
- エンティティの名前空間がイベントの
PartitionId
属性に格納されます。 - 埋め込みエンティティはネイティブ モードの
map
型に変換されます。
次のステップ
- イベント ドリブン アーキテクチャについて確認する。