Eventarc でイベント ドリブン型アーキテクチャを作成する
Eventarc と Firestore を使用して、イベント ドリブン アーキテクチャを構築できます。Eventarc 用の Firestore トリガーは、データベース内の特定のドキュメントに対する変更からイベントを生成します。トリガーは、サポートされている宛先にイベントを転送できます。
- Cloud クライアント ライブラリと Firebase SDK をサポートする Cloud Run 関数(第 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 Run 関数の第 2 世代と第 1 世代の違い
Cloud Run 関数(第 2 世代)では、すべてのランタイムに Eventarc イベントを使用します。以前は、Cloud Run 関数(第 1 世代)では、一部のランタイムのみに Eventarc イベントが使用されていました。Eventarc イベントでは、Cloud Run 関数(第 1 世代)と次の点が異なります。
Eventarc 用の Firestore トリガーは、Cloud Run 関数以外の追加の宛先をサポートしています。
CloudEvents
は、Cloud Run、GKE、Workflows など、さまざまな宛先に転送できます。Eventarc の Firestore トリガーは、データベース書き込みオペレーションの開始時にトリガー定義を取得し、その定義を使用して Firestore がイベントを出力するかどうかを判断します。書き込みオペレーションでは、実行時に発生する可能性のある定義の変更を考慮することはありません。
Cloud Run 関数(第 1 世代)は、データベース書き込みの評価中にトリガー定義を取得し、評価中のトリガーの変更は、Firestore がイベントを出力するかどうかに影響します。
Datastore モードとネイティブ モードのイベント相互運用性
Eventarc は、Datastore モードとネイティブ モードの両方のイベント トリガーをサポートしています。これらのイベント トリガーは、両方のデータベース タイプと相互運用できます。ネイティブ モードの Firestore データベースは Datastore イベントを受信でき、Datastore モードの Firestore データベースはネイティブ モード イベントを受信できます。
イベントの相互運用性により、さまざまなタイプの Firestore データベース間で Eventarc コードを共有できます。
イベント コンバージョン
ネイティブ モードのイベント トリガーを Datastore モードのデータベースに適用すると、Eventarc は次のコンバージョンを行います。
- エンティティの名前空間はイベントの
PartitionId
属性に格納されます。 - 埋め込みエンティティはネイティブ モードの
map
型に変換されます。
次のステップ
- イベント ドリブン アーキテクチャについて確認する。