Amazon S3 Vectors APIとは?操作一覧・料金・OpenSearch比較とRAG構築を解説【2026年GA版】
Amazon S3 Vectorsは、S3のバケットにベクトル埋め込みをそのまま保存し、専用クラスタを立てずに類似検索できるAWSのベクトルストレージです。2025年7月にプレビュー公開され、2025年12月2日に一般提供(GA)となりました。GAでは1インデックスあたりの上限がプレビューの5,000万件から20億件へと40倍に拡大しています。本記事は、S3 Vectors APIで実際に何ができるのか(PutVectors/QueryVectorsなどの操作一覧とboto3の実装例)、料金の実額、OpenSearchやpgvectorとの使い分け、Bedrock Knowledge Baseと組み合わせたRAG構築までを、2025年12月GAの仕様に沿って整理します。
目次
まとめ:Amazon S3 Vectors APIの要点
- 正体:S3上の新しい「ベクトルバケット」に埋め込みを保存し、専用の
s3vectorsAPIで類似検索するサーバーレスのベクトルストア。2025年12月2日にGA。 - API操作:バケット・インデックス管理(CreateVectorBucket/CreateIndex等)とベクトル操作(PutVectors/QueryVectors/GetVectors/ListVectors/DeleteVectors)に分かれる。boto3なら
boto3.client("s3vectors")で呼ぶ。 - 料金:ストレージ$0.06/GB・月、アップロード(PUT)$0.20/GB、クエリはリクエスト$2.5/百万件+処理データ量の従量。専用インスタンス課金が無く、使った分だけ払う。
- 強み:大規模RAGで総所有コストを最大90%削減できる一方、クエリ遅延は高頻度時で約100ミリ秒。ミリ秒未満の高QPS検索が要る用途には向かない。
- 使い分け:低頻度・大量・低コスト重視ならS3 Vectors、高頻度・低遅延・全文検索併用ならOpenSearch。両者は連携でき、Bedrock Knowledge Baseのベクトルストアにも選べる。
Amazon S3 Vectorsとは:AWSネイティブのベクトルストレージ
Amazon S3 Vectorsは、S3に「ベクトルバケット」という新しいバケット種別を追加し、埋め込みベクトルの保存と類似検索を専用APIで提供するサービスです。従来のS3オブジェクトストレージがキーによる完全一致の取得だったのに対し、S3 Vectorsはベクトル同士の数学的な近さで意味的に近い項目を返します。検索は近似最近傍(ANN)で行われ、低頻度クエリはサブ秒、高頻度クエリは約100ミリ秒で応答します。書き込みは強整合で、登録直後のベクトルもすぐ検索対象になります。
プレビューからGAまでの経緯と提供リージョン
S3 Vectorsは2025年7月15日にプレビューとして公開され、2025年12月2日に一般提供へ移行しました。GAでの主な拡張は、1インデックスあたり最大20億ベクトル(プレビュー比40倍)、1つのベクトルバケットで最大20兆ベクトル、1クエリで取得できる結果をプレビューの30件から100件へ引き上げた点です。さらに2026年6月には、QueryVectorsのtopK上限が最大10,000件(100倍・ページング返却)へ拡張され、再ランクや重複排除に使える広い候補集合を一度に取得できるようになりました。提供リージョンはGA後も順次拡大しているため、対象リージョンは利用前にAWS公式のリージョン表で確認してください。
「ストレージファースト」設計と専用クラスタが不要な理由
従来のベクトル検索は、OpenSearchのクラスタやマネージドのベクトルDBのように、常時起動する計算ノードにインデックスを載せてコストを払う構成が主流でした。S3 Vectorsはインデックスをストレージ側に持ち、クエリ時だけ計算リソースを使う「ストレージファースト」型です。専用インスタンスの起動・スケーリング・パッチ適用が不要になり、検索が発生しない限りクエリ課金も生じません。この構造がRAGのように「大量に保存するが検索頻度は中程度」というワークロードでコストを大きく下げ、AWSは大規模RAGで総所有コストを最大90%削減できるとしています。
S3 Vectors APIの操作一覧とベクトルバケット/インデックス構成
S3 Vectorsは通常のS3とは別のs3vectorsサービス名前空間を使います。IAMやSCPのポリシーもこの名前空間で設計でき、ベクトルインデックス単位・バケット単位・アカウント単位でアクセスを制御できます。ブロックパブリックアクセスは常時有効で無効化できないため、公開設定の事故を構造的に防げます。
ベクトルバケットとインデックスの2階層モデル
S3 Vectorsのデータモデルは「ベクトルバケット」→「ベクトルインデックス」→「ベクトル」の3層です。ベクトルバケットは器で、その中に用途ごとのベクトルインデックスを作ります。類似検索はインデックス単位で実行し、次元数・距離関数はインデックス作成時に固定します。1つのベクトルには一意のキー、数値配列(埋め込み)、任意のメタデータを紐づけます。埋め込みモデルを変えて次元数が変わる場合は、同じインデックスに混在させず新しいインデックスを切るのが基本です。
主要API操作の一覧
APIは大きく「バケット・インデックス管理系」と「ベクトル操作系」に分かれます。代表的な操作は次のとおりです。
| 分類 | API操作 | 役割 |
|---|---|---|
| バケット管理 | CreateVectorBucket / GetVectorBucket / ListVectorBuckets / DeleteVectorBucket | ベクトルバケットの作成・取得・一覧・削除 |
| インデックス管理 | CreateIndex / GetIndex / ListIndexes / DeleteIndex | インデックスの作成・取得・一覧・削除 |
| ベクトル操作 | PutVectors / GetVectors / ListVectors / DeleteVectors | ベクトルの登録・取得・一覧・削除 |
| 検索 | QueryVectors | クエリベクトルに近い上位k件を返す |
| ポリシー / タグ | PutVectorBucketPolicy / GetVectorBucketPolicy / TagResource ほか | バケットポリシーやタグの管理 |
登録・検索の中心はPutVectorsとQueryVectorsの2つです。PutVectorsは単一ベクトル更新で毎秒最大1,000トランザクションまで処理でき、複数ベクトルをまとめて投入するバルク登録にも対応します(この毎秒1,000件は単一ベクトルのストリーミング更新時の目安です)。
boto3によるバケット作成から検索までの実装例
Python(boto3)ではboto3.client("s3vectors")でクライアントを生成し、バケット作成→インデックス作成→登録→検索の順に呼びます。次はコサイン距離・1,024次元のインデックスにメタデータ付きで登録し、日本語ドキュメントに絞って上位5件を検索する例です。
import boto3
client = boto3.client("s3vectors", region_name="ap-northeast-1")
# 1. ベクトルバケットを作成
client.create_vector_bucket(vectorBucketName="kb-vectors")
# 2. インデックスを作成(1024次元・コサイン距離・float32)
client.create_index(
vectorBucketName="kb-vectors",
indexName="docs",
dataType="float32",
dimension=1024,
distanceMetric="cosine",
)
# 3. ベクトルを登録(メタデータ付き)
client.put_vectors(
vectorBucketName="kb-vectors",
indexName="docs",
vectors=[
{
"key": "doc-001",
"data": {"float32": embedding_001}, # 1024個のfloat
"metadata": {"lang": "ja", "category": "manual"},
}
],
)
# 4. 類似検索(上位5件・lang=jaで絞り込み)
resp = client.query_vectors(
vectorBucketName="kb-vectors",
indexName="docs",
queryVector={"float32": query_embedding},
topK=5,
filter={"lang": "ja"},
returnMetadata=True,
returnDistance=True,
)
for v in resp["vectors"]:
print(v["key"], v["distance"])
埋め込みベクトル自体はS3 Vectorsでは生成しないため、Amazon Bedrockなどの埋め込みモデルで作った数値配列を渡します。BedrockのAmazon Nova Multimodal Embeddingsのようなモデルを使えば、テキスト・画像・音声を同じベクトル空間に載せて横断検索できます。
距離関数・データ型・メタデータフィルタの仕様
距離関数はコサイン類似度とユークリッド距離の2種類、データ型はfloat32です。次元数は利用する埋め込みモデルに合わせ、1〜4,096次元の範囲で設定します(上限は変わり得るため公式仕様で確認してください)。メタデータは文字列・数値・真偽値・リストを扱え、既定ではすべてフィルタ可能です。フィルタ対象にしたくないキーは非フィルタ属性として指定でき、非フィルタ指定はクエリ課金の計算対象からも外れます。この属性フィルタにより「日本語かつ2026年以降の文書だけを検索」といった条件付き類似検索を、インデックスを分けずに実現できます。
S3 Vectorsの料金体系と100万ベクトルのコスト試算
S3 Vectorsは専用インスタンス課金が無く、ストレージ・アップロード・クエリの3つの従量課金で構成されます。常時起動のクラスタを持たないため、検索が少ない期間はストレージ料だけで維持できるのが料金面の最大の特徴です。以下は米国リージョンの代表的な単価で、リージョンにより変動します。
ストレージ・PUT・クエリの3つの課金軸
| 課金軸 | 単価 | 課金対象 |
|---|---|---|
| ストレージ | $0.06 / GB・月 | ベクトル+メタデータ+キーの論理容量 |
| アップロード(PUT) | $0.20 / GB | PutVectorsで投入した論理GB |
| クエリ(リクエスト) | $2.5 / 百万クエリ | QueryVectorsの呼び出し回数 |
| クエリ(処理データ) | $0.004→$0.002→$0.0004 / TB | 10万件まで/10万〜1,000万件/1,000万件超の段階制 |
| クエリ(返却データ) | $0.01 / GB | 1クエリあたり一定容量まで無料 |
1次元=4バイトなので、1,024次元のベクトル1件は約4KBの論理容量になります。段階制のクエリ処理料は、インデックスが大きくなるほど1TBあたりの単価が下がる設計です。
100万ベクトルのコスト試算例
1,024次元のベクトルを100万件保存する場合、論理容量は約4GB(4KB×100万)です。メタデータを除いた概算では、ストレージが4GB×$0.06=月$0.24、初回アップロードが4GB×$0.20=$0.80です。ここに検索回数分のクエリ料が加わります。常時起動のOpenSearchクラスタやマネージドベクトルDBが月あたり数百ドル規模になりやすいのに対し、検索頻度が中程度なら月数ドル台に収まることも多く、これがRAG用途でコスト差が大きく開く理由です。実際の請求はメタデータ容量・検索頻度・リージョンで動くため、AWS料金計算ツールで自社の利用パターンを試算してください。
OpenSearch・pgvector・Pineconeとの比較と使い分け
S3 Vectorsは、保存量が多く検索頻度が中程度のワークロードでコストを抑えたいときに向く選択肢です。全文検索やミリ秒未満の応答が必要なら、依然としてOpenSearchなどの検索エンジンが適します。両者は競合というより役割分担で、実際に連携させて使えます。
レイテンシとコストのトレードオフ
| 選択肢 | レイテンシ | コスト構造 | 向く用途 |
|---|---|---|---|
| S3 Vectors | 約100ms〜サブ秒 | 従量(保存+クエリ) | 大量保存・中頻度検索・RAG |
| OpenSearch | ミリ秒〜十数ms | クラスタ常時課金 | 高QPS・全文/ハイブリッド検索 |
| Aurora pgvector | 数〜十数ms | DBインスタンス課金 | 既存RDBとの結合検索 |
| Pinecone等 | ミリ秒級 | マネージド従量/月額 | 専用ベクトルDBの高機能検索 |
OpenSearchの構築・運用や料金体系そのものはAmazon OpenSearch Serviceの解説記事で詳しく扱っています。検索精度をRRFでハイブリッド化する手法はRRF(Reciprocal Rank Fusion)の解説を参照してください。
S3 Vectorsを選ぶべきでない場面
低コストが魅力でも、S3 Vectorsが不向きな用途はあります。第一に、ユーザー操作に同期して数ミリ秒で返す必要があるリアルタイム検索です。高頻度でも約100ミリ秒という遅延は、オートコンプリートや対話UIの逐次補完には遅すぎます。第二に、毎秒数千件を超える書き込みが継続するストリーミング取り込みです。単一ベクトルのPUTは毎秒1,000トランザクションが上限で、これを超える高スループット投入には設計上の工夫が要ります。第三に、ベクトル検索と全文検索・集約・ファセットを同一クエリで混ぜたい高度な検索要件です。これらはOpenSearchの得意領域で、S3 Vectorsだけでは満たせません。「安いから」で全面採用せず、遅延要件と書き込み頻度を先に確認するのが失敗しない判断基準です。
Bedrock Knowledge Base・OpenSearch統合によるRAG構築
S3 Vectorsは単体でも使えますが、BedrockやOpenSearchと組み合わせると、PutVectorsやQueryVectorsを自前で書かずにRAGの検索基盤を用意できます。IAMやKMSがS3と共通のため、既存のAWS環境に組み込む際の追加設定が少ないのも実務上の利点です。
Bedrock Knowledge Baseのベクトルストアとして使う
Amazon Bedrock Knowledge Basesは、ベクトルストアにS3 Vectorsのインデックスを選べます(GA)。ドキュメントのチャンク化・埋め込み生成・保存・検索をBedrock側が受け持つため、PutVectorsやQueryVectorsを自前で書かずにRAGの検索基盤を用意できます。RAGは保存量が多い一方で検索頻度が読めないことが多く、常時課金のベクトルDBよりS3 Vectorsのほうがコスト予測を立てやすい構成です。Bedrock自体の料金・モデル・APIの始め方はAmazon Bedrockの使い方にまとめています。SageMaker Unified Studio上のBedrockでも、S3 Vectorsをベクトルストアにしてナレッジベースを開発・検証できます。
OpenSearch Serverlessへのエクスポートで高QPSに対応
S3 VectorsとOpenSearchは排他ではなく階層化して併用できます。普段は低コストなS3 Vectorsに貯め、ハイブリッド検索や高QPS・低遅延が必要になったインデックスだけ、スナップショットをOpenSearch Serverlessへエクスポートして高速検索に切り替える、という運用が可能です。これにより「大量データは安く保持し、ホットなデータだけ高性能層へ」というコストと性能の両取りができます。まずS3 Vectorsで始め、遅延要件が厳しくなった部分をOpenSearchへ引き上げる段階的な設計が、過剰投資を避ける現実的なアプローチです。
よくある質問(FAQ)
S3 Vectors APIでは何ができますか?
s3vectors名前空間のAPIで、ベクトルバケットとインデックスの作成・管理、ベクトルの登録(PutVectors)・取得・削除、そしてクエリベクトルに近い上位k件を返す類似検索(QueryVectors)ができます。boto3ならboto3.client("s3vectors")で呼び出します。埋め込みの生成機能は含まないため、ベクトル自体はBedrockなどの埋め込みモデルで作って渡します。
S3 VectorsはAWSのベクトルデータベースとして使えますか?
専用DBを立てずにベクトルの保存・検索ができるため、実質的にサーバーレスなベクトルデータベースとして使えます。ただし高QPS・ミリ秒未満の検索や全文検索の併用には向かず、その用途はOpenSearchが適します。大量保存・中頻度検索・コスト重視ならS3 Vectorsが有力な選択肢です。
S3 VectorsとOpenSearchの違いは何ですか?
S3 Vectorsは専用クラスタを持たない従量課金で、約100ミリ秒〜サブ秒の検索を安価に提供します。OpenSearchはクラスタ常時課金でミリ秒級の高QPS検索と全文・ハイブリッド検索が得意です。両者は連携でき、S3 VectorsのインデックスをOpenSearch Serverlessへエクスポートして高速層に切り替えることもできます。
Bedrock Knowledge Baseで使えますか?
使えます。Bedrock Knowledge BasesのベクトルストアとしてS3 Vectorsのインデックスを選択でき、RAGの検索基盤をAPIを書かずに構築できます。SageMaker Unified Studio上のBedrockでも同様に利用できます。
ベクトルバケットとは何ですか?
ベクトル埋め込みの保存・検索に特化したS3の新しいバケット種別です。通常のオブジェクト用バケットとは別物で、内部にベクトルインデックスを作り、そのインデックス単位で類似検索を実行します。ブロックパブリックアクセスが常時有効で、公開設定できない点も通常バケットと異なります。