storing-and-querying-vectors
Amazon S3 Vectors を使用してベクター埋め込みの保存とクエリを行います。専用の API 名前空間(s3vectors)を持つコスト効率の高い長期ベクターストレージサービスで、S3 ベクターバケット・ベクターインデックスの作成、埋め込みの保存、セマンティック検索、RAG 向けベクターストレージ、類似検索、ベクターデータベースの移行などに対応します。表形式データのクエリ(querying-data-lake を使用)、S3 オブジェクトストレージ、または高スループット(数百〜数千 QPS)が必要な場合(OpenSearch を使用)には適していません。
description の原文を見る
>- 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).
SKILL.md 本文
Amazon S3 Vectors でベクトルを保存・検索する
概要
Amazon S3 Vectors は、ベクトルエンベディングをスケールで保存・検索するための、コスト効率的な AWS サービスです。長期保存に最適化されており、コールドクエリでは 100ms 程度、ウォームクエリではサブ秒レベルのレイテンシーを実現します。
決定ガイド
- 毎秒数百~数千のクエリ (QPS) が継続的に必要: このツールは不適切です。OpenSearch の使用をお勧めします。
- ハイブリッド検索、集約、ファセット検索: OpenSearch と S3 Vectors (ストレージエンジン) の併用をお勧めします。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 配列を put-vectors または query-vectors で float32 として使用してください。バッチエンベディング生成の場合は、AWS SDK または CLI を使用してください。
5. ベクトルの保存
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. ベクトルのクエリ
必要に応じてエンベディングを生成 (ステップ 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 キー
ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- aws
- ライセンス
- Apache-2.0
- 最終更新
- 不明
Source: https://github.com/aws/agent-toolkit-for-aws / ライセンス: Apache-2.0
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。