🗃️storing-and-querying-vectors
- プラグイン
- aws-data-analytics
- ソース
- GitHub で見る ↗
説明
Amazon S3 Vectors を使用してベクター埋め込みの保存とクエリを行います。S3 Vectors は、独自の API 名前空間(s3vectors)を持つ、コスト効率の高い長期ベクターストレージサービスです。 次のような場合に使用: - S3 ベクターバケットの作成 - ベクターインデックスの作成 - 埋め込みの保存 - セマンティック検索 - RAG ベクターストレージ - 類似度検索 - ベクターデータベース - 他のベクターデータベースからの移行 以下の用途には使用しないでください: - 表形式データのクエリ(代わりに querying-data-lake を使用) - S3 オブジェクトストレージ - 数百〜数千の継続的な QPS が必要な場合(代わりに OpenSearch を使用)
原文を表示
Store and query vector embeddings using Amazon S3 Vectors, a cost-effective long-term vector storage service with its own API namespace (s3vectors). Triggers on: create S3 vector bucket, vector index, store embeddings, semantic search, RAG vector storage, similarity search, vector database, migrate from other vector databases. Do NOT use for: querying tabular data (use querying-data-lake), S3 object storage, or hundreds/thousands of sustained QPS (use OpenSearch).
ユースケース
- ✓ベクターインデックスを作成する
- ✓埋め込みデータを保存する
- ✓セマンティック検索を実行する
- ✓RAGのベクターストレージとして活用する
- ✓類似度検索を行う
本文(日本語訳)
Amazon S3 Vectors でベクターの保存とクエリを実行する
概要
Amazon S3 Vectors は、大規模なベクター埋め込みの保存とクエリを低コストで実現する AWS サービスです。 長期保存に最適化されており、コールドクエリでもサブ秒レベルのレイテンシ(ウォームクエリでは最低 100ms)を実現します。
選択ガイド
- 持続的に数百〜数千 QPS(クエリ/秒)が必要な場合: S3 Vectors は不適切です。OpenSearch を推奨します。
- ハイブリッド検索・集計・ファセット検索が必要な場合: ストレージエンジンとして S3 Vectors を使用しつつ、OpenSearch を推奨します。OpenSearch との統合については、AWS ドキュメントで
"Using S3 Vectors with OpenSearch Service"を検索してください。 - 階層型(バルク + ホット)構成の場合: S3 Vectors をストレージとして使用し、リアルタイム処理には OpenSearch Serverless を組み合わせます。
references/limits-and-patterns.mdを参照してください。 - コスト効率重視・クエリ頻度が低い・RAG 用途の場合: S3 Vectors が最適です。このガイドを進めてください。
最新のガイダンスについては、AWS ドキュメントで "S3 Vectors best practices" を検索してください。
共通タスク
作業を開始する前に、リクエストを以下のいずれかに分類してください:
- シンプルなクエリ: 既存のインデックスに対するクエリ → ステップ 6 へスキップ
- 標準: 既存インデックスを必ず最初に一覧表示し、再利用が適切であれば提案してください。新規の場合は、インデックス作成 + ベクター保存を行い、ステップ 2〜6 に従ってください
- マイグレーションまたはマルチテナント: 先に
references/limits-and-patterns.mdを参照した後、ステップ 2〜6 に従ってください
AWS MCP サーバーツールに接続されている場合は、必ずそれを使用してコマンドを実行してください。 AWS MCP が利用できない場合のみ、AWS CLI にフォールバックしてください。 各ステップは実行前にユーザーへ説明することが必須です。
1. 依存関係の確認
制約事項:
- AWS MCP ツールまたは AWS CLI が利用可能かを必ず確認し、見つからない場合はユーザーに通知してください
- 対象の AWS リージョンを必ず確認してください
2. ベクターバケットの作成
バケット名はユーザーと必ず確認してください。 命名規則: 3〜63 文字、使用可能文字は小文字・数字・ハイフンのみ。 暗号化設定(デフォルトは SSE-S3、コンプライアンス要件がある場合は SSE-KMS)は作成後に変更できません。
aws s3vectors create-vector-bucket \
--vector-bucket-name <BUCKET_NAME>
制約事項:
- 暗号化設定は作成後に変更できないことを必ずユーザーに説明してください
- SSE-KMS を使用する場合、KMS キーポリシーで S3 Vectors サービスプリンシパル
indexing.s3vectors.amazonaws.comに対してkms:GenerateDataKeyおよびkms:Decryptを必ず付与してください。KMS キーのエイリアスではなく、完全な ARN を使用してください。コマンド例についてはreferences/limits-and-patterns.mdを参照してください。
3. ベクターインデックスの作成
すべてのパラメーターは作成後に変更不可です。
作成前チェックリスト(すべてユーザーと確認してください):
- 次元数(必須、整数 1〜4096)— 使用する埋め込みモデルの出力次元数と一致させてください
- 距離メトリック(必須)—
cosine(コサイン)またはeuclidean(ユークリッド)。埋め込みモデルが推奨するメトリックを使用してください - 非フィルタリング対象のメタデータキー(任意、最大 10 個、1〜63 文字)— 作成時に宣言しないと後から追加できません。Bedrock Knowledge Bases との統合を行う場合は、AWS ドキュメントで
"S3 Vectors Bedrock Knowledge Bases prerequisites"を検索して必要なキー名を確認してください - 暗号化(任意)— デフォルトはバケットの設定を継承します。インデックス単位で上書き可能です
aws s3vectors create-index \
--vector-bucket-name <BUCKET_NAME> \
--index-name <INDEX_NAME> \
--dimension <DIM> \
--distance-metric <cosine|euclidean> \
--data-type float32 \
--metadata-configuration '{"nonFilterableMetadataKeys":["<KEY1>","<KEY2>"]}'
非フィルタリングキーが不要な場合は --metadata-configuration を省略してください。
インデックス名: 3〜63 文字、小文字・数字・ハイフン・ドットが使用可能。バケット内で一意である必要があります。
フィルタリング可能なメタデータ: 2 KB 制限。メタデータ合計(フィルタリング可能 + 不可の合計): 40 KB。
詳細は references/metadata-filtering.md を参照してください。
4. 埋め込みの生成(必要な場合)
ユーザーがすでに埋め込みを持っている場合は、ステップ 5(保存)またはステップ 6(クエリ)へスキップしてください。
制約事項:
- 埋め込みモデルが指定されていない場合は、必ずユーザーに確認してください
- デフォルトのモデルを勝手に想定してはいけません
- 次元数はステップ 3 と一致している必要があります
- 保存時とクエリ時は必ず同じモデルを使用してください
Bedrock の invoke-model で埋め込みを生成:
aws bedrock-runtime invoke-model \
--model-id <MODEL_ID> \
--content-type application/json \
--cli-binary-format raw-in-base64-out \
--body '{"inputText": "your text"}' \
invoke-model-output.json
CLI v2 では --cli-binary-format raw-in-base64-out を必ず指定してください。CLI 使用時は出力ファイルの指定が必須です。
レスポンスのキー名はモデルによって異なります(例: Titan は embedding、Cohere は embeddings)。
Titan の場合は json.load(open('invoke-model-output.json'))['embedding'] でパースしてください。
embedding 配列を float32 として put-vectors または query-vectors に使用します。
バッチで埋め込みを生成する場合は、AWS SDK または CLI を使用してください。
5. ベクターの保存(Put Vectors)
aws s3vectors put-vectors \
--vector-bucket-name <BUCKET_NAME> \
--index-name <INDEX_NAME> \
--vectors '[{"key":"<ID>","data":{"float32":[<EMBEDDING>]},"metadata":{"topic":"science"}}]'
制約事項:
- 1 回の呼び出しで 500 ベクターを超えてはいけません
- コスト最適化のためにベクターをバッチ処理することを推奨します
- 大量データ操作の場合は CLI ではなく SDK の使用を推奨します(ベクターペイロードがシェル引数の上限を超える可能性があります)
429 TooManyRequestsExceptionが発生した場合は、バックオフ付きリトライを必ず実装してください- バッチパターンについては
references/limits-and-patterns.mdを参照してください
6. ベクターのクエリ(Query Vectors)
必要に応じてステップ 4 で埋め込みを生成した後、クエリを実行します:
aws s3vectors query-vectors \
--vector-bucket-name <BUCKET_NAME> \
--index-name <INDEX_NAME> \
--query-vector '{"float32":[<EMBEDDING>]}' \
--top-k 10 \
--return-distance
オプション: --return-metadata および/または --filter '{"topic":{"$eq":"science"}}' を追加可能です(どちらも GetVectors 権限が必要です)。
詳細は references/metadata-filtering.md を参照してください。
レスポンスボディの例:
{"vectors": [{"key": "id1", "distance": 0.45, "metadata": {"topic": "science"}}, ...], "distanceMetric": "cosine"}
制約事項:
--filterまたは--return-metadataを使用するには、s3vectors:QueryVectorsとs3vectors:GetVectorsの 両方の IAM 権限が必要です。GetVectors 権限がない場合、これらのオプションは 403 エラーを返します。
トラブルシューティング
| エラー | 原因 | 対処法 |
|---|---|---|
DimensionMismatch |
次元数がインデックスと一致しない | 一致するモデルを使用するか、インデックスを削除して再作成してください(ユーザーへの確認必須 — すべてのベクターが削除されます)。 |
--filter または --return-metadata 使用時の 403 Forbidden |
s3vectors:GetVectors 権限が不足 |
IAM ポリシーに s3vectors:GetVectors を追加してください。 |
--top-k で指定した件数より少ない結果が返る |
フィルターに一致するベクターが少ない | フィルタリングはインライン処理のため、これは想定動作です。フィルター条件を緩和してください。 |
429 TooManyRequestsException |
インデックスのレート制限超過 | バックオフ付きリトライを実施してください。持続的なスループットが必要な場合は複数インデックスへのシャーディングを検討してください。現在の制限値については AWS ドキュメントで "S3 Vectors limitations and restrictions" を検索してください。 |
AccessDeniedException |
s3vectors:* IAM アクションが不足 |
S3 Vectors は s3:* ではなく s3vectors:* 名前空間を使用します。IAM ポリシーを更新してください。 |
RequestTimeoutException またはサービス利用不可 |
リクエストタイムアウト、またはリージョン未対応 | リクエストを再試行してください。リージョン対応状況については AWS ドキュメントで "S3 Vectors limitations and restrictions" を検索してください。 |
追加リソース
- limits-and-patterns.md — マルチテナントパターン・バッチ取り込み・SSE-KMS・マイグレーション
- metadata-filtering.md — フィルター演算子・非フィルタリングメタデータ・Bedrock KB キー
原文(English)を表示
Store and Query Vectors with Amazon S3 Vectors
Overview
Amazon S3 Vectors is a cost-effective AWS service for storing and querying vector embeddings at scale. Optimized for long-term storage with subsecond latency for cold queries, as low as 100ms for warm queries.
Decision Guide
- Hundreds/thousands of sustained queries per second (QPS): Wrong tool. Recommend OpenSearch.
- Hybrid search, aggregations, faceted search: Recommend OpenSearch with S3 Vectors as storage engine. For OpenSearch integration, search AWS docs for
"Using S3 Vectors with OpenSearch Service". - Tiered (bulk + hot): S3 Vectors for storage + OpenSearch Serverless for real-time. See
references/limits-and-patterns.md. - Cost-effective storage, infrequent queries, RAG: S3 Vectors is the right fit. Proceed.
For latest guidance, search AWS docs for "S3 Vectors best practices".
Common Tasks
Classify the request before starting:
- Simple query: Existing index, skip to Step 6
- Standard: You MUST list existing indexes first and suggest reusing if relevant. Else, new index + store vectors, follow Steps 2-6
- Migration or multi-tenant: Read
references/limits-and-patterns.mdfirst, then Steps 2-6
You MUST execute commands using AWS MCP server tools when connected. Fall back to AWS CLI only if AWS MCP is unavailable. You MUST explain each step to the user before executing.
1. Verify Dependencies
Constraints:
- You MUST check whether AWS MCP tools or AWS CLI is available and inform user if missing
- You MUST confirm target AWS region
2. Create a Vector Bucket
You MUST confirm bucket name with user. Names: 3-63 chars, lowercase letters, numbers, hyphens only. Encryption (SSE-S3 default or SSE-KMS for compliance) is immutable after creation.
aws s3vectors create-vector-bucket \
--vector-bucket-name <BUCKET_NAME>
Constraints:
- You MUST explain encryption cannot be changed after creation
- For SSE-KMS, KMS key policy MUST grant
kms:GenerateDataKeyandkms:Decryptto the S3 Vectors service principalindexing.s3vectors.amazonaws.com. You MUST use full KMS key ARN (not alias). Seereferences/limits-and-patterns.mdfor command example.
3. Create a Vector Index
Every parameter is immutable after creation.
Pre-flight checklist (confirm ALL with user):
- Dimension (required, integer 1-4096) -- MUST match embedding model output
- Distance metric (required) --
cosineoreuclidean. Use embedding model's recommended metric; - Non-filterable metadata keys (optional, max 10, 1-63 chars) -- Declare at creation or lose forever. For Bedrock Knowledge Bases integration, search AWS docs for
"S3 Vectors Bedrock Knowledge Bases prerequisites"to get the required key names. - Encryption (optional) -- Inherits from bucket. Override per-index if needed.
aws s3vectors create-index \
--vector-bucket-name <BUCKET_NAME> \
--index-name <INDEX_NAME> \
--dimension <DIM> \
--distance-metric <cosine|euclidean> \
--data-type float32 \
--metadata-configuration '{"nonFilterableMetadataKeys":["<KEY1>","<KEY2>"]}'
Omit --metadata-configuration if no non-filterable keys are needed.
Index names: 3-63 chars, lowercase, numbers, hyphens, dots. Unique within bucket. Filterable metadata: 2 KB limit. Total metadata (filterable + non-filterable combined): 40 KB. See references/metadata-filtering.md.
4. Generate Embeddings (if needed)
Skip to Step 5 (store) or Step 6 (query) if user already has embeddings.
Constraints:
- You MUST ask which embedding model to use if not specified
- You MUST NOT assume a default model
- Dimension MUST match Step 3
- You MUST use the same model for both storing and querying
Generate embeddings with Bedrock invoke-model:
aws bedrock-runtime invoke-model \
--model-id <MODEL_ID> \
--content-type application/json \
--cli-binary-format raw-in-base64-out \
--body '{"inputText": "your text"}' \
invoke-model-output.json
You MUST use --cli-binary-format raw-in-base64-out for CLI v2. Output file is required for CLI. The response key is model-dependent (e.g., embedding for Titan, embeddings for Cohere). For Titan, parse with json.load(open('invoke-model-output.json'))['embedding']. Use embedding array as float32 in put-vectors or query-vectors. For batch embedding generation, use AWS SDK or CLI.
5. Put Vectors
aws s3vectors put-vectors \
--vector-bucket-name <BUCKET_NAME> \
--index-name <INDEX_NAME> \
--vectors '[{"key":"<ID>","data":{"float32":[<EMBEDDING>]},"metadata":{"topic":"science"}}]'
Constraints:
- You MUST NOT exceed 500 vectors per call
- You SHOULD batch vectors for cost optimization
- For bulk operations, You SHOULD use an SDK instead of CLI -- vector payloads may be too large for shell arguments
- You MUST implement retry with backoff on
429 TooManyRequestsException - See
references/limits-and-patterns.mdfor batch patterns
6. Query Vectors
Generate embedding if needed (Step 4), then query:
aws s3vectors query-vectors \
--vector-bucket-name <BUCKET_NAME> \
--index-name <INDEX_NAME> \
--query-vector '{"float32":[<EMBEDDING>]}' \
--top-k 10 \
--return-distance
Optional: add --return-metadata and/or --filter '{"topic":{"$eq":"science"}}' (both require GetVectors permission). See references/metadata-filtering.md.
Example response body: {"vectors": [{"key": "id1", "distance": 0.45, "metadata": {"topic": "science"}}, ...], "distanceMetric": "cosine"}
Constraints:
- Using
--filteror--return-metadatarequires boths3vectors:QueryVectorsANDs3vectors:GetVectorsIAM permissions. Without GetVectors, these options return 403.
Troubleshooting
| Error | Cause | Fix |
|---|---|---|
DimensionMismatch |
Dims don't match index | Use matching model, or delete/recreate index (confirm with user -- destroys all vectors). |
403 Forbidden with --filter or --return-metadata |
Missing s3vectors:GetVectors |
Add s3vectors:GetVectors to IAM policy. |
Fewer results than --top-k |
Few vectors match filter | Expected -- filtering is inline. Broaden filter. |
429 TooManyRequestsException |
Exceeded per-index rate limits | Retry with backoff. Shard across indexes for sustained throughput. Search AWS docs for "S3 Vectors limitations and restrictions" for current limits. |
AccessDeniedException |
Missing s3vectors:* IAM actions |
S3 Vectors uses s3vectors:* namespace, not s3:*. Update IAM policy. |
RequestTimeoutException or service unavailable |
Request timeout or region not supported | Retry request. For regional availability, search AWS docs for "S3 Vectors limitations and restrictions". |
Additional Resources
- limits-and-patterns.md -- Multi-tenant patterns, batch ingestion, SSE-KMS, migration
- metadata-filtering.md -- Filter operators, non-filterable metadata, Bedrock KB keys
原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。