𝕏 f B! L
案件・求人数 12,345
案件を探す(準備中) エージェントを探す(準備中) お役立ち情報 ログイン
案件・求人数 12,345
AWS S3 VectorsでAIベクトル検索を構築する方法

AWS S3 VectorsでAIベクトル検索を構築する方法

AWSS3 Vectorsベクトル検索RAGSESエンジニア
目次
⚡ 3秒でわかる!この記事のポイント
  • S3 VectorsはAWSネイティブのベクトル検索機能。S3バケット上で直接ベクトルのCRUD・検索が可能
  • Pineconeと比較して最大95%のコスト削減。既存のS3エコシステムとシームレスに統合
  • Amazon Bedrock + S3 VectorsでRAGアプリケーションを最も低コストに構築できる

RAG(Retrieval-Augmented Generation)アプリケーションの構築には、ベクトルデータベースが不可欠です。しかしこれまで、PineconeやQdrantなどの専用ベクトルDBは追加のインフラ管理とコストが必要でした。

2026年、AWSがこの課題を根本から解決しました。S3 Vectorsは、世界で最も使われているオブジェクトストレージであるS3にネイティブなベクトル検索機能を追加するサービスです。本記事では、S3 Vectorsの仕組みからRAGアプリケーションの構築手順まで、SESエンジニア向けに実践的に解説します。

この記事でわかること
  • S3 Vectorsのアーキテクチャと従来のベクトルDBとの違い
  • セットアップからPythonでのCRUD操作の実装手順
  • Amazon Bedrock × S3 VectorsによるRAGアプリケーション構築

S3 Vectorsとは?従来のベクトルDBとの違い

S3ネイティブでベクトル検索が可能になった背景

S3 Vectorsは、AWS公式ブログで発表されたS3の新機能で、ベクトルデータの書き込み・更新・削除・検索をS3上で直接行うことができます。

従来、ベクトル検索を実現するには以下のような選択肢がありました。

  • 専用ベクトルDB: Pinecone、Qdrant、Weaviate(別途インフラ管理が必要)
  • DBの拡張機能: pgvector(PostgreSQL)、OpenSearch(Elasticsearchベース)
  • マネージドサービス: Amazon OpenSearch Serverless(コストが高い)

S3 Vectorsの登場により、S3バケットにベクトルインデックスを作成するだけでベクトル検索が利用可能になりました。追加のインフラ管理は不要です。

OpenSearch / Pinecone / pgvector との比較

項目S3 VectorsPineconeOpenSearch Serverlesspgvector
管理負荷ほぼゼロ低い中程度高い
スケーラビリティ無制限(S3ベース)高い高い制限あり
月額コスト(100万ベクトル)約$5〜15約$70〜200約$200〜500EC2コスト依存
レイテンシ50〜200ms10〜50ms20〜100ms5〜30ms
AWS統合ネイティブAPIのみネイティブEC2上で運用
メタデータフィルタ

S3 Vectorsの最大の強みは圧倒的なコスト効率です。Pineconeと比較して最大95%のコスト削減が可能です。一方、レイテンシは専用ベクトルDBに劣るため、リアルタイム性が最重要でない用途(RAG、ドキュメント検索、レコメンデーション等)に最適です。

S3 Vectorsのアーキテクチャとコスト比較

S3 Vectorsのアーキテクチャと仕組み

ベクトルインデックスの構造

S3 Vectorsは、S3バケット内にベクトルインデックスを作成する形で動作します。

s3://my-bucket/
├── documents/          # 通常のS3オブジェクト
│   ├── doc1.pdf
│   └── doc2.pdf
└── .vectors/           # ベクトルインデックス(自動管理)
    └── my-index/
        ├── index.hnsw   # HNSWインデックス
        └── metadata/    # メタデータストア

ベクトルインデックスは**HNSW(Hierarchical Navigable Small World)**アルゴリズムを採用しており、高次元ベクトルの近似最近傍探索を効率的に実行します。

書き込み・検索のAPI概要

S3 VectorsのAPIは、AWS SDK(boto3)から利用できます。主要なオペレーションは以下の通りです。

オペレーション説明API
CreateVectorIndexベクトルインデックスの作成create_vector_index()
PutVectorベクトルの書き込み・更新put_vector()
GetVectorIDによるベクトル取得get_vector()
DeleteVectorベクトルの削除delete_vector()
QueryVectors類似ベクトル検索query_vectors()

料金体系とコスト試算

S3 Vectorsの料金は以下の構成です。

  • ストレージ: $0.023/GB/月(S3 Standardと同じ)
  • 書き込みリクエスト: $0.005/1,000リクエスト
  • 検索リクエスト: $0.01/1,000リクエスト
  • インデックス維持: $0.10/100万ベクトル/月

コスト試算例(100万ベクトル、1日1,000検索の場合):

コスト項目月額
ストレージ(約5GB)$0.12
書き込み(初回のみ)$5.00
検索(30,000回/月)$0.30
インデックス維持$0.10
合計約$5.52/月

同等の構成をPineconeで構築した場合の月額$70〜200と比較すると、劇的なコスト削減が実現できます。

S3 Vectorsのセットアップ手順

バケット作成とベクトルインデックス設定

import boto3

s3_vectors = boto3.client('s3vectors')

# ベクトルインデックスの作成
response = s3_vectors.create_vector_index(
    Bucket='my-rag-bucket',
    IndexName='document-embeddings',
    Dimension=1536,        # Embeddingモデルの次元数
    Metric='cosine',       # 類似度メトリクス
    Config={
        'HnswConfig': {
            'M': 16,                # HNSWの接続数
            'EfConstruction': 200   # 構築時の探索幅
        }
    },
    MetadataSchema={
        'Fields': [
            {'Name': 'title', 'Type': 'string'},
            {'Name': 'category', 'Type': 'string'},
            {'Name': 'created_at', 'Type': 'datetime'}
        ]
    }
)

print(f"Index created: {response['IndexArn']}")

Embeddingモデルの選定(Amazon Titan / OpenAI / Cohere)

ベクトル検索の精度はEmbeddingモデルの選定に大きく依存します。

モデル次元数日本語対応コストおすすめ用途
Amazon Titan Embeddings V21024$0.00002/1K tokensAWSネイティブ環境
OpenAI text-embedding-3-large3072$0.00013/1K tokens最高精度が必要な場合
Cohere embed-multilingual-v41024$0.00010/1K tokens多言語対応
Amazon Titan Embeddings V2(256次元)256$0.00002/1K tokensコスト最優先

AWS環境でのおすすめは Amazon Titan Embeddings V2です。Bedrockから直接呼び出せるため追加の認証設定が不要で、コストも最安クラスです。

PythonからのCRUD操作実装

import boto3
import json

s3_vectors = boto3.client('s3vectors')
bedrock = boto3.client('bedrock-runtime')

def get_embedding(text: str) -> list[float]:
    """Amazon Titan Embeddings V2でテキストをベクトル化"""
    response = bedrock.invoke_model(
        modelId='amazon.titan-embed-text-v2:0',
        body=json.dumps({
            'inputText': text,
            'dimensions': 1024
        })
    )
    return json.loads(response['body'].read())['embedding']

# ベクトルの書き込み
def put_document(doc_id: str, text: str, metadata: dict):
    embedding = get_embedding(text)
    s3_vectors.put_vector(
        Bucket='my-rag-bucket',
        IndexName='document-embeddings',
        VectorId=doc_id,
        Vector=embedding,
        Metadata=metadata
    )

# 類似検索
def search_similar(query: str, top_k: int = 5):
    query_embedding = get_embedding(query)
    response = s3_vectors.query_vectors(
        Bucket='my-rag-bucket',
        IndexName='document-embeddings',
        QueryVector=query_embedding,
        TopK=top_k,
        IncludeMetadata=True
    )
    return response['Results']

# 使用例
put_document(
    doc_id='doc-001',
    text='SESエンジニアがAWS資格を取得するメリットと勉強法',
    metadata={
        'title': 'AWS資格取得ガイド',
        'category': 'キャリア',
        'created_at': '2026-03-30T00:00:00Z'
    }
)

results = search_similar('AWSの資格を取りたい')
for result in results:
    print(f"Score: {result['Score']:.4f} - {result['Metadata']['title']}")

実践:RAGアプリケーションをS3 Vectorsで構築

Amazon Bedrock × S3 Vectors の連携パターン

Amazon BedrockのKnowledge Basesは、S3 Vectorsをネイティブでサポートしています。Bedrockの管理コンソールからワンクリックでS3 Vectorsベースのナレッジベースを構築できます。

bedrock_agent = boto3.client('bedrock-agent')

# Knowledge Baseの作成(S3 Vectors連携)
response = bedrock_agent.create_knowledge_base(
    name='company-docs-kb',
    description='社内ドキュメントのナレッジベース',
    knowledgeBaseConfiguration={
        'type': 'VECTOR',
        'vectorKnowledgeBaseConfiguration': {
            'embeddingModelArn': 'arn:aws:bedrock:ap-northeast-1::foundation-model/amazon.titan-embed-text-v2:0'
        }
    },
    storageConfiguration={
        'type': 'S3_VECTORS',
        's3VectorsConfiguration': {
            'bucketName': 'my-rag-bucket',
            'indexName': 'document-embeddings'
        }
    }
)

ドキュメント取り込みパイプラインの実装

RAGの品質はチャンキング(文書分割)戦略に大きく左右されます。

from langchain.text_splitter import RecursiveCharacterTextSplitter

def ingest_documents(s3_bucket: str, prefix: str):
    """S3上のドキュメントをベクトル化して取り込み"""

    # チャンキング設定
    splitter = RecursiveCharacterTextSplitter(
        chunk_size=512,          # チャンクサイズ
        chunk_overlap=50,        # オーバーラップ
        separators=["\n\n", "\n", "。", "、", " "]
    )

    s3 = boto3.client('s3')
    objects = s3.list_objects_v2(Bucket=s3_bucket, Prefix=prefix)

    for obj in objects.get('Contents', []):
        # ドキュメントの読み込み
        response = s3.get_object(Bucket=s3_bucket, Key=obj['Key'])
        text = response['Body'].read().decode('utf-8')

        # チャンキング
        chunks = splitter.split_text(text)

        # 各チャンクをベクトル化して保存
        for i, chunk in enumerate(chunks):
            doc_id = f"{obj['Key']}-chunk-{i}"
            put_document(
                doc_id=doc_id,
                text=chunk,
                metadata={
                    'source': obj['Key'],
                    'chunk_index': str(i),
                    'category': 'document'
                }
            )

    print(f"Ingested {len(objects.get('Contents', []))} documents")

セマンティック検索の精度チューニング

ベクトル検索の精度を向上させるためのチューニングポイントです。

1. チャンクサイズの最適化:

  • 短すぎる(128トークン以下): 文脈が失われる
  • 長すぎる(1024トークン以上): ノイズが増える
  • 推奨: 256〜512トークン、オーバーラップ10〜20%

2. メタデータフィルタの活用:

# カテゴリでフィルタしてから検索
results = s3_vectors.query_vectors(
    Bucket='my-rag-bucket',
    IndexName='document-embeddings',
    QueryVector=query_embedding,
    TopK=10,
    Filter={
        'category': {'eq': 'technical-docs'}
    }
)

3. ハイブリッド検索の実装: ベクトル検索(セマンティック)と全文検索(キーワード)を組み合わせることで、検索精度を大幅に向上させることができます。

SESエンジニアとしてS3 Vectors案件を獲るには

求められるスキルセット

S3 Vectors関連の案件で求められるスキルを優先度順に整理します。

必須:

  • Python(boto3でのAWS SDK操作)
  • S3の基本操作(バケット管理、IAMポリシー設計)
  • Embeddingの基本概念(ベクトル化、類似度計算)

推奨:

  • Amazon Bedrockの利用経験
  • LangChain / LlamaIndexの利用経験
  • RAGアーキテクチャの設計・実装経験

差別化:

  • ベクトルDBの比較・選定経験(Pinecone、pgvector等からの移行)
  • 大規模データの前処理・チャンキング最適化
  • MLOps(モデルのバージョン管理、A/Bテスト)

案件獲得のアピールポイント

面談では以下のポイントをアピールすると効果的です。

  • コスト意識: 「Pineconeからの移行で月額コストを90%削減した」等の具体的数字
  • 実装経験: GitHubにRAGアプリケーションのサンプルコードを公開
  • AWS資格: Machine Learning SpecialtyまたはData Engineer Associate
  • ビジネス理解: RAGの活用シーンを業務課題と紐づけて説明できる

まとめ:S3 VectorsがAIアプリ開発の標準になる理由

S3 Vectorsは、ベクトル検索のコストとインフラ管理のハードルを劇的に下げるサービスです。すでにS3を利用しているプロジェクトであれば、追加のインフラなしでRAGアプリケーションを構築できます。

  • S3ネイティブのベクトル検索で追加インフラ管理が不要
  • Pinecone比で最大95%のコスト削減
  • Amazon BedrockとのネイティブS3 Vectors連携でRAG構築が容易
  • SESエンジニアにとって新しい高付加価値スキルの獲得チャンス

**SES BASEでは、AWS・AI関連の案件を多数掲載しています。**S3 VectorsやRAG構築のスキルを活かせる案件をチェックしてみてください。

👉 SES BASEでAWS AI案件を探す

関連記事:

SES案件をお探しですか?

SES記事をもっと読む →
🏗️

SES BASE 編集長

SES業界歴10年以上のメンバーが在籍する編集チーム。SES企業での営業・エンジニア経験、フリーランス独立経験を持つメンバーが、業界のリアルな情報をお届けします。

📊 業界データに基づく記事制作 🔍 IPA・経済産業省データ参照 💼 SES実務経験者が執筆・監修