S3がベクトルデータベースになるとは
従来のRAGアーキテクチャでは、S3にソースドキュメントを保存して、別途PineconeやOpenSearchなどのベクトルデータベースにインデックスを作る、という二重構成が一般的でした。
Amazon S3 Vectorsは、この構成を根本から変えるものです。S3バケット自体がベクトルデータベースとして機能し、保存・インデックス・検索がすべてS3内で完結します。
技術的には「Vector Bucket」という新しいバケットタイプを使用し、その中に「Vector Index」を作成して「Vectors」を格納する階層構造になっています。
GA版で大幅にスケールアップ

2025年12月2日のGA版では、プレビュー版から大幅に制限が緩和されました。
- 1インデックスあたり最大20億ベクトル
- 1バケットあたり最大10,000インデックス
- 次元数は1〜4,096(Titan、OpenAI、Cohereなど主要モデルに対応)
- 書き込みスループット最大1,000 TPS
- Top-K制限は100件(プレビュー時の30件から増加)
20億ベクトルは、ほとんどのエンタープライズユースケースで十分な容量です。しかも10,000インデックスまで作れるので、マルチテナントRAG(顧客ごとにインデックスを分離)にも対応できます。
実際に使ってみる
boto3を使った実装はこんな感じです。
import boto3
client = boto3.client('s3vectors')
# ベクトルを登録
response = client.put_vectors(
vectorBucketName='my-rag-bucket',
indexName='knowledge-base-v1',
vectors=[
{
'id': 'doc-001-chunk-01',
'vector': {'float32': [0.12, -0.45, 0.88, ...]}, # 最大4096次元
'metadata': {
'source': 'manual.pdf', # フィルタリング用(最大2KB)
'category': 'technical',
'raw_text': 'S3 Vectorsは...' # 非フィルタリング用(最大38KB)
}
}
]
)ポイントはmetadataの使い方。フィルタリングに使うフィールド(2KB制限)とは別に、非フィルタリング用フィールド(38KB制限)があるので、チャンク本文をそのままメタデータに入れられます。
これにより、検索結果を表示するときに「S3からテキストファイルを別途取得する」というオーバーヘッドを削減できます。
検索もシンプル
セマンティック検索のコードも直感的です。
response = client.query_vectors(
vectorBucketName='my-rag-bucket',
indexName='knowledge-base-v1',
queryVector={'float32': [0.15, -0.41, ...]},
topK=10,
returnMetadata=True, # RAGでは必須
filter={
'and': [
{'equals': {'key': 'category', 'value': 'technical'}},
{'greaterThan': {'key': 'year', 'value': 2024}}
]
}
)
# RAGのコンテキスト生成
context = [v['metadata']['raw_text'] for v in response['vectors']]フィルタリング構文はMongoDBライクで、equals、notEquals、greaterThan、lessThan、and、or、inなどの演算子が使えます。
料金体系が革新的
ここが一番のポイント。
- ストレージ:$0.06/GB/月
- 書き込み(インジェスト):$0.20/GB
- クエリ(ベース):$2.50/100万クエリ
- クエリ(処理):$0.004〜0.002/TB(スキャン量による)
従来のベクトルDBは「インデックスをメモリに保持するためのプロビジョニングコスト」が24時間発生していました。S3 Vectorsはこれがゼロ。
「データ量は膨大だけど、常に全部が検索されるわけではない」というRAGシステムでは、この違いが効いてきます。月額数千ドルかかっていたコストが、数百ドル以下になることも珍しくありません。
レイテンシは許容範囲
超低レイテンシ(ミリ秒単位)よりもスループットとコスト効率に最適化されていますが、実用上は問題ないレベルです。
- Hot/Warmクエリ:100ms以下
- Cold/Infrequentクエリ:1秒未満
リアルタイム金融取引(10ms以下が必要)には向きませんが、チャットボット、社内検索、エージェントワークフローには十分。100msなら人間は「速い」と感じるレベルです。
Bedrock Knowledge Basesとの統合
AWSらしいところですが、Bedrock Knowledge Basesのバックエンドとしてネイティブ統合されています。
コンソールで「Vector store」としてS3 Vectorsを選択するだけで、チャンキング、エンベディング生成、インデックス登録のパイプラインが自動化されます。自前でPutVectorsを書く必要すらない。
フルマネージドなRAGパイプラインを最小コストで構築したいなら、この組み合わせがベストプラクティスになりそうです。
どんな場面で使うべきか
S3 Vectorsが最適なケース:
- エンタープライズナレッジベース(社内文書全量を検索、利用頻度は業務時間のみ)
- ログ/履歴分析エージェント(過去の膨大なログから類似事象を検索)
- コスト重視のRAG(PineconeやOpenSearchの固定費を削減したい)
避けるべきケース:
- ミリ秒レベルのSLAが必要なECレコメンデーション
- 1秒間に数万件の更新が発生するストリーム処理
後者のケースでは、MemoryDB for Redisなどのインメモリベクトルストアを検討すべきでしょう。
実装上のTips
メタデータの40KB制限を最大限活用することをおすすめします。チャンク本文をここに格納すれば、検索結果表示時のS3 GetObjectコールが不要になり、レイテンシとコストの両方を削減できます。
また、書き込みに対してStrong Consistency(強い整合性)が保証されているので、PutVectors直後にQueryVectorsで検索できます。リアルタイム性が求められるユースケースでも安心です。
まとめ
- S3 VectorsによりS3バケット自体がベクトルDBとして機能
- GA版で20億ベクトル/インデックス、10,000インデックス/バケットに対応
- ストレージとクエリの分離課金で、最大90%のコスト削減が可能
- Bedrock Knowledge Basesとネイティブ統合でフルマネージドRAGが簡単に
- 100ms以下のレイテンシで対話型AIにも十分対応













