アイデンティティデータを同期する理由
- Management API を呼び出さずに、分析、レポート作成、コンプライアンスに関するクエリを実行する。
- ユーザー属性を横断して低レイテンシで検索する必要がある検索機能を実現する。
- アイデンティティレコードを他の業務データと結合するデータパイプラインにデータを供給する。
- 障害復旧に備えて、ユーザープロファイルの状態をバックアップしておく。
仕組み
- ユーザープロファイルが変更されるたびに、Auth0 はイベントを発行します。
- Event Stream はそのイベントを送信先 (webhook、AWS EventBridge、または Auth0 Action) に配信します。
- ハンドラーはイベントタイプを確認し、外部システムに対応する書き込み処理を実行します。
| イベントタイプ | 発生するタイミング |
|---|---|
user.created | Auth0 で新しいユーザープロファイルが作成されたとき。 |
user.updated | 既存のユーザープロファイルが更新されたとき。 |
user.deleted | ユーザープロファイルが Auth0 から削除されたとき。 |
前提条件
- Events が有効な Auth0 テナント。プランの提供状況の詳細については、Create an Event Streamを参照してください。
user.created、user.updated、user.deletedをサブスクライブしているアクティブな Event Stream。詳細については、Create an Event Streamを参照してください。- ハンドラーから書き込み可能な外部データストア (例: PostgreSQL、MySQL、データウェアハウス) 。
データ同期を実装する
user.created を処理する
user.created イベントを発行したら、データベースに新しい行を追加します。
user.updated を処理する
user.updated イベントを発行したら、対応する行を更新します。古いデータで上書きされないように、イベントのタイムスタンプを last_event_processed 列と比較します。
イベントは順序どおりに届かないことがあります。古いデータによって新しいレコードが上書きされるのを防ぐため、更新を適用する前に必ずタイムスタンプを比較してください。詳しくは、イベントのベストプラクティスを参照してください。
user.deleted を処理する
user.deleted イベントを発行したら、対応する行を削除するか、ソフトデリートします。
イベントをタイプ別にルーティングする
- Webhook
- Auth0 Action
HTTP
2XX レスポンスはできるだけ早く返してください。ハンドラーで時間のかかる処理を実行する必要がある場合は、イベントを内部キューに入れて非同期で処理してください。詳しくは、イベントのベストプラクティスを参照してください。重複や順序の問題を防ぐ
- イベント ID を追跡します。 処理した各イベントの
idを保存し、すでに処理済みのイベントはスキップします。 - タイムスタンプを比較します。 各イベントペイロードの
data.objectには、created_atフィールドとupdated_atフィールドが含まれます。これらのフィールドを使用して、受信したイベントがシステムにすでに記録されているものより新しいかどうかを判定します。 - 冪等な書き込みを使用します。 同じイベントを 2 回適用しても結果が変わらないように、データベース操作を設計します。たとえば、PostgreSQL では
INSERT ... ON CONFLICT DO UPDATEを使用します。
同期を確認する
- 外部データベースに、正しいプロフィールデータを含む新しい行が作成されること。
- Auth0 でユーザーの名前またはメールアドレスを更新し、その変更がデータベースの行に反映されることを確認すること。
- Auth0 でユーザーを削除し、その行がデータベースから削除される (または削除済みとしてマークされる) ことを確認すること。