Database

Amazon DynamoDB

キーバリュー/ドキュメント型のNoSQL。AIP-C01では「ベクトルストアの選択肢」ではなく、会話履歴・セッション状態の置き場として、そしてZero-ETLでOpenSearchにベクトル検索を渡す送り出し口として出ます。

  • B|実装まわり
  • D1 FM統合・データ・コンプラ
  • D2 実装と統合

ひとことで言うと

サーバーレスの key-value/ドキュメント型 DBです。AIP-C01 の文脈では、ベクトルストアではなく、会話履歴やセッション状態の置き場として出てきます。

要するに、受付の来客記録簿です。誰が・いつ・何を話したかを高速に出し入れする台帳であって、話の「意味」で検索する棚(ベクトルストア)ではありません。意味で探したいなら、この台帳を OpenSearch に流し込む必要があります。

なぜ生まれたか

生成AIアプリでぶつかる作業DynamoDB の受け皿
Bedrock の呼び出しはステートレス。会話の続きをどう覚えるかセッションIDをパーティションキーにした会話履歴テーブル
会話ログを無期限に持ちたくないTTL 属性で自動失効(expired処理)
DynamoDB のデータを意味検索・RAGに使いたいが、専用ETLは組みたくないOpenSearch Service への Zero-ETL 統合(Bedrock の埋め込みモデルで自動ベクトル化)

何に使うか

用途使い方関連ドメイン
会話履歴・セッション状態セッションIDをキーに、Lambda 経由で読み書きD1・D2
プロンプトテンプレート・呼び出しログの記録Prompt Management や監査証跡の実データ置き場D1・D3
RAG向けの元データZero-ETL で OpenSearch Service に同期し、Bedrock でベクトル化D1

試験でどう問われるか

問われ方正解に寄る条件引っかけの選択肢
会話履歴を安く自動的に消したいTTL属性で期限を設定定期バッチで削除するLambdaを自前で書く(過剰実装)
DynamoDBのデータを意味検索に使いたいOpenSearch ServiceへのZero-ETL統合DynamoDBを直接Bedrock Knowledge Basesのベクトルストアに指定する(非対応)
会話履歴をRAGのベクトルストアにしたい用途が違う。KBの正式なカスタマー管理ベクトルストアは OpenSearch・S3 Vectors・Aurora・Neptune Analytics 等DynamoDBをそのままKBのベクトルストアとして選ぶ

DynamoDB は Bedrock Knowledge Bases のベクトルストアの選択肢に入っていません。公式のカスタマー管理ベクトルストア一覧は OpenSearch Serverless/OpenSearch Managed Clusters/S3 Vectors/Amazon Aurora/Neptune Analytics/Pinecone/Redis Enterprise Cloud/MongoDB Atlas で、DynamoDB は含まれません。「DynamoDBに埋め込みを持たせてKBに直結する」という選択肢が出たら誤りです。

実務でどう使うか

  • TTLは「即消える」ではない。 期限を過ぎたアイテムは数日以内に削除される仕組みで、削除タイミングの厳密な保証はありません。「会話ログを法令上◯時間以内に確実に消す」ような要件にはTTL単体では足りません
  • TTLで消えたアイテムはDynamoDB Streamsに「サービスによる削除」として流れます。 ユーザー操作による削除と区別できるので、監査ログ側で扱いを分けられます
  • Zero-ETL統合はDynamoDB Streamsが土台。 ストリームは既定で有効ではなく、有効化とStreamViewTypeの選択(NEW_AND_OLD_IMAGESなど)が前提条件です

ハマりどころ: Zero-ETL統合の初回同期はDynamoDBのエクスポート機能(Point-in-Time Recovery必須)で行われ、以降の差分だけがStreams経由になります。PITRを有効化し忘れると初回スナップショットが作れません。

取り違えやすいもの

迷う相手切り分けの一言
Amazon Aurora(Bedrock KBのベクトルストア)Aurora=KBが公式サポートするベクトルストア。DynamoDB=サポート外。「意味検索の器」が要るならAurora側
Amazon Bedrock Sessions APIBedrockのセッション管理APIはBedrockが会話状態をマネージドで持つ仕組み。DynamoDBは自前でアプリ側に会話履歴を持つときの選択肢で、両者は競合する2つの手段
DynamoDB StreamsDynamoDBは「データを置く場所」。Streamsは「そのデータの変化を流す配管」。RAG連携ではセットで使う

想起チェック

Q1. 会話履歴をDynamoDBに持たせつつBedrock Knowledge Basesの検索対象にもしたい。どう構成しますか?

DynamoDB単体では検索対象にできません。OpenSearch ServiceへのZero-ETL統合でデータを同期し、Bedrockの埋め込みモデルでベクトル化した上でOpenSearch側を検索することになります。

Q2. 「会話ログをTTLで消しているのに、削除タイミングが要件よりばらつく」と指摘されたら?

TTLは期限到来後数日以内に削除される仕組みで、秒単位の即時削除は保証していません。厳密な削除タイミングが要件なら、アプリ側で明示的な削除処理を組む必要があります。

出典(AWS公式)