Skip to main content
Event Streams を使用すると、Auth0 のアイデンティティデータのコピーを、リレーショナルデータベース、データウェアハウス、検索インデックスなどの外部システムに保持できます。Auth0 でユーザープロファイルが作成、更新、または削除されると、イベントがストリームの送信先に配信されるため、外部システムにも同じ変更を反映できます。

アイデンティティデータを同期する理由

アイデンティティデータのローカルコピーを保持しておくと、次のような場合に役立ちます。
  • Management APIを呼び出さずに、分析、レポート作成、コンプライアンス対応のためのクエリを実行する。
  • ユーザー属性を横断して低遅延で検索する必要がある検索機能を実現する。
  • アイデンティティレコードを他の業務データと結合するデータパイプラインにデータを提供する。
  • 災害復旧に備えて、ユーザープロファイルの状態をバックアップしておく。

仕組み

  1. ユーザープロファイルが変更されるたびに、Auth0 はイベントを発行します。
  2. Event Stream がそのイベントを送信先 (webhook、AWS EventBridge、または Auth0 Action) に配信します。
  3. ハンドラーがイベントタイプを確認し、対応する書き込み処理を外部システムに適用します。
データ同期に関連するイベントタイプは次のとおりです。

前提条件

始める前に、次のものを用意してください。
  • Events が有効な Auth0 テナント。利用可能なプランについて詳しくは、Create an Event Stream を参照してください。
  • user.createduser.updateduser.deleted をサブスクライブしている有効な Event Stream。詳しくは、Create an Event Stream を参照してください。
  • ハンドラーから書き込み可能な外部データストア (例: PostgreSQL、MySQL、データウェアハウス) 。

Implement でデータ同期を行う

以下のセクションでは、各イベントタイプの処理方法を説明します。ハンドラー関数は、Event Stream の送信先にかかわらず共通です。イベントタイプごとにルーティングするセクションでは、webhook と Auth0 Action の両方の送信先に対してイベントを振り分ける方法を示します。

user.created を処理する

Auth0 が user.created イベントを発行したら、データベースに新しい行を追加します。

user.updated を処理する

Auth0 が user.updated イベントを発行したら、該当する行を更新します。古いデータで上書きしないよう、イベントのタイムスタンプを last_event_processed 列と比較してください。
イベントは順番どおりに届かないことがあります。古いデータで新しいレコードが上書きされるのを防ぐため、更新を適用する前に必ずタイムスタンプを比較してください。詳しくは、Events Best Practicesをご覧ください。

user.deleted を処理する

Auth0 が user.deleted イベントを発行したら、該当する行を削除するか、論理削除します。

タイプ別にイベントをルーティングする

トップレベルのルーターを使って、各イベントを適切なハンドラーに振り分けます。以下の例では、Webhook と Auth0 Action の送信先に対してイベントをルーティングする方法を示しています。
HTTP 2XX レスポンスは、できるだけ早く返してください。ハンドラーで時間のかかる処理を行う必要がある場合は、イベントを内部キューに入れて非同期で処理してください。詳しくは、Events Best Practices を参照してください。

重複や順序の問題に備える

Event Streams は少なくとも1回の配信を保証するため、ハンドラーが同じイベントを複数回受信することがあります。これに安全に対処するには、次のようにします。
  • イベント ID を追跡する。 処理した各イベントの id を保存し、すでに処理済みのイベントはスキップします。
  • タイムスタンプを比較する。 各イベントのペイロードには、data.objectcreated_at フィールドと updated_at フィールドが含まれます。これらのフィールドを使って、受信したイベントがシステムにすでに記録されているものより新しいかどうかを判断します。
  • 冪等な書き込みを使う。 同じイベントを2回適用しても結果が変わらないように、データベース操作を設計します。たとえば、PostgreSQL では INSERT ... ON CONFLICT DO UPDATE を使用します。

同期を確認する

ハンドラーをデプロイしたら、Auth0 でテストユーザーを作成し、次の点を確認します。
  1. 正しいプロフィールデータを持つ新しい行が外部データベースに作成されること。
  2. Auth0 でユーザーの名前またはメールアドレスを更新し、その変更がデータベースの行に反映されることを確認します。
  3. Auth0 でユーザーを削除し、データベース内の行も削除される (または削除済みとしてマークされる) ことを確認します。
Event Streams のテストについて詳しくは、Event Testing, Observability, and Failure Recovery を参照してください。

詳しくはこちら