【要約】[AWS] Managed KB ACLをRDBと自動同期させる [Qiita_Trend] | Summary by TechDistill
> Source: Qiita_Trend
Execute Primary Source
// Problem
開発者がManaged KBのACL管理を自動化しようとした際、RDBとの整合性を保つ手法で以下の課題に直面した。即時反映を狙った設計は、データの不整合やリソースの浪費を招くリスクがある。
- ・二重管理の回避: ユーザー情報の更新時にS3のACLファイルを直接書き換える実装は、コードの複雑性を増大させる。
- ・書き込み競合: Auroraのトリガー方式では、大量更新時に同一ファイルへの同時書き込みが発生する。
- ・データの欠落: SQSの重複排除を利用した方式では、時間差での登録がメッセージとして握りつぶされる。
// Approach
開発者は、リアルタイム性に固執せず、Managed KBの仕様に適合した安定的な同期手法を模索した。即時的な反映よりも、システムの安定性とコストのバランスを重視した。最終的に採用されたのは、以下のバッチ処理アプローチである。
- ・実行トリガー: EventBridgeを用いて、1時間ごとにLambda関数を定期起動する。
- ・データ比較: LambdaがAuroraのusersテーブルを全件取得し、既存のglobal-acl.jsonと比較する。
- ・差分更新: 差異がある場合のみglobal-acl.jsonを書き換え、Managed KBの同期をキックする。
// Result
最終的に、定期バッチ方式を採用することで、システムの複雑性を抑えつつ確実な同期を実現した。これにより、データの整合性と運用の容易さを両立できる構成となった。具体的な成果は以下の通りである。
- ・整合性の確保: データの欠落や書き込み競合の問題を完全に解消した。
- ・仕様への適合: Managed KBの再インデックスに伴うコストや非同期性を考慮した設計となった。
- ・運用の安定化: 許容可能なラグを受け入れることで、アーキテクチャの堅牢性を高めた。
Senior Engineer Insight
> 本記事の価値は、制約条件下での妥当な妥協点を見出した点にある。Managed KBのACL更新は、再インデックスを伴う重い処理だ。そのため、DB更新に連動したリアルタイム同期は、コスト面で極めて危険である。即時性が必須ならベクトルストアの自前運用を検討すべきだ。Managedサービスを使うなら、バッチによる整合性確保が現実的である。この判断は、実戦的な設計思想として極めて正しい。