目次
Amazon OpenSearch Service 完全ガイド v2.0
全文検索・ログ分析・ベクター検索の統合プラットフォーム
概要
Amazon OpenSearch Service は AWS が提供する フルマネージドの検索・ログ分析・可視化サービス です。OpenSearch(Elasticsearch OSS フォーク)クラスターの管理・スケーリング・セキュリティを AWS が一元管理。全文検索(Lucene ベース)・ログ分析(SIEM)・ベクター検索(k-NN、RAG)・リアルタイムアナリティクスをワンプラットフォームで実現します。2025 年の GPU 加速・ベクター最適化により、ベクターデータベースとしての地位も確立。
定義と本質
Amazon OpenSearch Service は以下を約束するサービス:
- 検索:転置インデックス・BM25 スコアリングで本番品質の全文検索
- ログ分析:CloudWatch Logs・VPC フローログを集約、リアルタイムダッシュボード化
- ベクター検索:GPU 加速・自動最適化で、数十億規模ベクターを 1 時間で索引化
- セキュリティ:Fine-Grained Access Control・SAML・OpenID Connect で 企業グレードのアクセス制御
- 可用性:Multi-AZ・自動フェイルオーバー・UltraWarm ストレージで コスト最適化
初心者向けメモ
OpenSearch Service は「検索エンジン × ログ分析 × ベクターDB」です。アプリケーションの商品検索、セキュリティの脅威分析、AI の RAG メモリストアなど、「大量データから素早く関連情報を見つける」すべてのユースケースに対応します。
OpenSearch Service が解決する課題
| 課題 | 従来の方法 | OpenSearch の解決 |
|---|---|---|
| EC サイト商品検索がタイポ許容できない | RDS LIKE ‘%keyword%’ | Lucene 転置インデックス・ファジー検索 |
| ログが分散・検索困難 | サーバーごとの SSH ログイン | CloudWatch Logs → OpenSearch に集約、Dashboard で可視化 |
| セキュリティ脅威検知が手動 | ログを毎日手動確認 | CloudTrail → OpenSearch → アラート自動化 |
| RAG で類似ドキュメント検索が遅い | 全ベクター総当たり比較 | k-NN インデックス + GPU 加速で 高速検索 |
| SIEM(セキュリティ情報イベント管理)の構築が複雑 | Splunk / ELK セルフホスト | OpenSearch + Dashboards + Fine-Grained Access で統合 |
主な特徴(Feature Matrix)
| 特徴 | 説明 | v2.0 キーポイント |
|---|---|---|
| 全文検索(Lucene) | 転置インデックス・アナライザー・BM25 スコアリング | 商品検索・文書検索の標準 |
| ログ分析・集約 | CloudWatch Logs・VPC フロー・GuardDuty 統合 | SIEM ユースケース |
| ベクター検索(k-NN) | 埋め込みベクトルの類似度検索(Faiss / NMSLIB) | RAG のベクターストア |
| GPU 加速(2025) | サーバーレス GPU インスタンスで ベクトル索引化 10 倍高速化 | 数十億ベクター 1 時間索引化 |
| Auto-Optimization(2025) | 検索品質・速度・コストを自動バランス | チューニング不要 |
| OpenSearch Serverless | OCU(OpenSearch Compute Unit)課金、自動スケーリング | 可変負荷ワークロード向き |
| OpenSearch Dashboards | Kibana 互換・ビジュアル分析・アラート | マネージド BI ツール |
| Fine-Grained Access Control | インデックス・フィールド・ドキュメントレベル アクセス制御 | マルチテナント環境での権限管理 |
| UltraWarm / Cold Storage | Hot → UltraWarm(1/10 コスト)→ Cold(S3 保存) | ログ長期保持のコスト最適化 |
| Cross-Cluster Search / Replication | 複数ドメイン間のクエリ・レプリケーション | グローバル検索・地域分散 |
| ISM(Index State Management) | ホット・ウォーム・コールド・削除 のライフサイクル自動化 | 運用負荷削減 |
| OpenSearch Ingestion | マネージド データパイプライン(Logstash 統合) | エージェント不要 |
アーキテクチャ
図1:OpenSearch Service のデータフロー・ノード構成
graph TB
subgraph Input["データ入力"]
CWL["CloudWatch Logs<br/>Subscription Filter"]
CT["CloudTrail"]
FlowLog["VPC Flow Log"]
AppLog["App Logs<br/>Fluent Bit / Logstash"]
S3["S3"]
end
subgraph Ingestion["データ取り込み層"]
KDF["Kinesis Data Firehose"]
Lambda["Lambda"]
OSI["OpenSearch Ingestion<br/>マネージドパイプライン"]
end
subgraph Cluster["OpenSearch クラスター"]
Master["Master ノード × 3<br/>クラスター管理"]
Data["Data ノード × N<br/>インデックス・検索"]
UW["UltraWarm ノード<br/>S3 バック"]
end
subgraph Query["クエリ・可視化"]
Dashboard["OpenSearch Dashboards"]
SDK["Java / Python SDK"]
API["REST API"]
end
CWL --> KDF
CT --> Lambda
FlowLog --> OSI
AppLog --> Lambda
S3 --> OSI
KDF --> Ingestion
Lambda --> Ingestion
OSI --> Cluster
Master --> Data
Data --> UW
Cluster --> Dashboard
Cluster --> SDK
Cluster --> API
style Master fill:#ff6b6b
style Data fill:#4dabf7
style UW fill:#ffd93d
図2:ホット・ウォーム・コールド・削除ライフサイクル(ISM)
graph LR
Hot["ホット状態<br/>0-7 日<br/>高速 SSD ノード"]
Warm["ウォーム状態<br/>7-30 日<br/>UltraWarm<br/>S3 バック<br/>コスト 1/10"]
Cold["コールド状態<br/>30-90 日<br/>S3 アーカイブ<br/>コスト 1/100"]
Delete["削除<br/>90 日以上"]
Hot -->|ISM ポリシー| Warm
Warm -->|ISM ポリシー| Cold
Cold -->|ISM ポリシー| Delete
style Hot fill:#51cf66
style Warm fill:#ffd93d
style Cold fill:#a8a8a8
コアコンポーネント詳細
1. インデックス管理(ISM:Index State Management)
{
"policy": {
"description": "ログローテーション 90 日",
"default_state": "hot",
"states": [
{
"name": "hot",
"actions": [
{
"rollover": {
"min_doc_count": 1000000,
"min_size": "50GB",
"min_index_age": "1d"
}
}
],
"transitions": [
{
"state_name": "warm",
"conditions": {
"min_index_age": "7d"
}
}
]
},
{
"name": "warm",
"actions": [
{
"replica_count": {
"number_of_replicas": 1
}
}
],
"transitions": [
{
"state_name": "cold",
"conditions": {
"min_index_age": "30d"
}
}
]
},
{
"name": "cold",
"actions": [
{
"cold": {}
}
],
"transitions": [
{
"state_name": "delete",
"conditions": {
"min_index_age": "90d"
}
}
]
},
{
"name": "delete",
"actions": [
{
"delete": {}
}
]
}
]
}
}
2. ベクター検索(k-NN)
# Bedrock 埋め込みモデルでテキスト→ベクター変換
from langchain.embeddings import BedrockEmbeddings
embeddings = BedrockEmbeddings(
model_id="amazon.titan-embed-text-v1"
)
# OpenSearch Serverless に登録
opensearch_client.index(
index="rag-documents",
body={
"embedding": embeddings.embed_query("カスタマーサポート"),
"text": "カスタマーサポートは 24/7 対応",
"source": "FAQ"
}
)
# ベクター検索実行
search_query = embeddings.embed_query("サポート時間は?")
results = opensearch_client.search(
index="rag-documents",
body={
"size": 5,
"query": {
"knn": {
"embedding": {
"vector": search_query,
"k": 5 # Top 5 に類似ドキュメント
}
}
}
}
)
3. Fine-Grained Access Control
# ユーザー A は sales インデックスのみアクセス可能
POST _plugins/_security/api/roles/sales_analyst
{
"cluster_permissions": ["cluster_monitor"],
"index_permissions": [
{
"index_patterns": ["sales*"],
"allowed_actions": ["read", "search"]
}
]
}
# ドキュメントレベルセキュリティ(DLS)
# user_id == request 元ユーザー のドキュメントのみ表示
{
"index_patterns": ["customer_data"],
"dls": {
"query": {
"term": {
"user_id": {
"value": "${user.name}"
}
}
}
}
}
4. OpenSearch Serverless(OCU)
# Time Series コレクション作成(ログ分析向き)
aws opensearchserverless create-collection \
--name logs-collection \
--type timeseries \
--capacity-units 8 # 8 OCU = ~$2/時間
# Vector Search コレクション作成(RAG 向き)
aws opensearchserverless create-collection \
--name rag-vectors \
--type vector \
--capacity-units 16 # 16 OCU = ~$4/時間
セキュリティ・認証
IAM ベース認証
# OpenSearch ドメイン作成(IAM のみ認証)
aws opensearch create-domain \
--domain-name my-domain \
--access-policies '{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789:role/opensearch-user"
},
"Action": "es:*",
"Resource": "arn:aws:es:ap-northeast-1:123456789:domain/my-domain/*"
}
]
}' \
--enable-node-to-node-encryption \
--encryption-at-rest-options Enabled=true,KmsKeyId=arn:aws:kms:...
SAML / OpenID Connect 統合
# Okta との SAML 統合
aws opensearch update-domain-config \
--domain-name my-domain \
--saml-options Enabled=true,\
IdpEntityId=https://okta.com/metadata,\
IdpMetadataContent=<metadata>,\
RolesKey=roles,\
SubjectKey=email,\
SessionTimeoutMinutes=60
VPC 配置・セキュリティグループ
# VPC 内プライベート配置
aws opensearch create-domain \
--domain-name secure-domain \
--vpc-options SubnetIds=subnet-xxx,SecurityGroupIds=sg-yyy \
--enforce-https \
--node-to-node-encryption-options Enabled=true
主要ユースケース(12+)
| # | ユースケース | OpenSearch 機能 | 効果 |
|---|---|---|---|
| 1 | EC サイト商品検索 | 全文検索・ファジー・ファセット | 検索精度 向上、トップ 5 ヒット率 2 倍 |
| 2 | ログ集約・分析 | CloudWatch Logs 統合、Dashboard | ログ検索時間 10 分 → 10 秒 |
| 3 | セキュリティ脅威検知 | GuardDuty / CloudTrail 統合、SIEM | インシデント検知時間 1 日 → 分 |
| 4 | RAG(LLM コンテキスト) | ベクター k-NN + GPU 加速 | 類似ドキュメント検索 ms 単位 |
| 5 | リアルタイム監視 | Dashboards + アラート | SLA 違反の自動通知 |
| 6 | APM(Application Performance) | X-Ray トレース統合 | エラーボトルネック自動検出 |
| 7 | アプリケーション検索 | 複合クエリ・集計 | ユーザー検索満足度 向上 |
| 8 | 監査・コンプライアンス | CloudTrail / Config 統合、長期保持 | 規制対応レポート自動化 |
| 9 | IoT データ分析 | 時系列インデックス、ダッシュボード | センサーデータ異常検知 |
| 10 | マルチテナント SaaS | Fine-Grained Access Control | テナント間データ分離確保 |
| 11 | 地理空間検索 | Geo Distance Query | 「現在地 5km 以内の店舗」検索 |
| 12 | GenAI チャットボット | ベクター RAG + StreamingResponse | チャットボット精度向上 |
設定例(CLI / SDK / IaC)
AWS CLI:Serverless Vector Search
# ベクター検索コレクション作成
aws opensearchserverless create-collection \
--name rag-collection \
--type vector \
--encryption-config KmsKeyArn=arn:aws:kms:ap-northeast-1:...
# コレクション初期化・ログイン
aws opensearchserverless create-security-config \
--name rag-security \
--type saml \
--saml-options Enabled=true,IdpEntityId=...
CloudFormation テンプレート
Resources:
OpenSearchDomain:
Type: AWS::OpenSearchService::Domain
Properties:
DomainName: my-search-domain
EngineVersion: OpenSearch_2.19
NodeType: t3.medium.search
NodeCount: 3
EBSOptions:
EBSEnabled: true
VolumeSize: 100
VolumeType: gp3
EncryptionAtRestOptions:
Enabled: true
KmsKeyId: !GetAtt OpenSearchKey.Arn
NodeToNodeEncryptionOptions:
Enabled: true
DomainEndpointOptions:
EnforceHttps: true
TlsSecurityPolicy: Policy-Min-TLS-1-2-2019-07
AccessPolicies:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
AWS: !GetAtt OpenSearchUserRole.Arn
Action: 'es:*'
Resource: !Sub 'arn:aws:es:${AWS::Region}:${AWS::AccountId}:domain/my-search-domain/*'
Tags:
- Key: Environment
Value: production
Terraform
resource "aws_opensearch_domain" "example" {
domain_name = "my-search-domain"
engine_version = "OpenSearch_2.19"
instance_type = "t3.medium.search"
instance_count = 3
ebs_enabled = true
ebs_volume_size = 100
ebs_volume_type = "gp3"
encrypt_at_rest {
enabled = true
kms_key_id = aws_kms_key.opensearch.arn
}
node_to_node_encryption {
enabled = true
}
domain_endpoint_options {
enforce_https = true
tls_security_policy = "Policy-Min-TLS-1-2-2019-07"
custom_endpoint_enabled = false
}
advanced_security_options {
enabled = true
internal_user_database_enabled = true
master_user_options {
master_user_name = "admin"
master_user_password = var.opensearch_admin_password
}
}
access_policies = jsonencode({
Version = "2012-10-17"
Statement = [
{
Effect = "Allow"
Principal = {
AWS = data.aws_iam_role.opensearch_user.arn
}
Action = "es:*"
Resource = "*"
}
]
})
tags = {
Environment = "production"
}
}
類似サービス比較(2025 年)
| 観点 | OpenSearch | Elastic Cloud | Vespa | Algolia | Typesense |
|---|---|---|---|---|---|
| ホスティング | AWS マネージド | Elastic SaaS | セルフ / クラウド | SaaS | SaaS / セルフ |
| ベクター検索 | ✅(k-NN + GPU) | ✅ | ✅ | ✅ | ✅ |
| 全文検索 | ✅ | ✅ | ✅(独自) | ✅(最適化) | ✅ |
| SIEM | ✅ | △ | ❌ | ❌ | ❌ |
| ログ分析 | ✅ | △ | ❌ | ❌ | ❌ |
| AWS 統合 | ★★★★★ | ★★★ | ★★ | ★★ | ★★ |
| Serverless | ✅ GA | ✅ | △ | ✅ | △ |
| 初期コスト | 低~中 | 中~高 | 高 | 中 | 低 |
ベストプラクティス(✅/❌)
インデックス設計
✅ DO:
- ISM でホット・ウォーム・コールド・削除をライフサイクル自動化
- 時系列ログなら日単位でインデックスをロールオーバー
- ベクター検索なら Vector Search コレクションを使用
- 検索品質・速度・コスト のバランスを Auto-Optimize に任せる
❌ DON’T:
- 全ログを永遠にホットノードに保持(コスト爆増)
- インデックス数が数千以上(管理負担)
- ベクター検索・テキスト検索・ログを同一インデックス混在
- シャード数・レプリカ数を手動チューニング(Auto-Tune 有効化)
パフォーマンス
✅ DO:
- GPU 加速有効化(ベクター索引化が 10 倍高速)
- CloudWatch Logs Subscription Filter で Firehose 経由(ネイティブ転送)
- Fine-Grained Access Control で 権限分離(マルチテナント)
- クエリキャッシュ活用(同じ検索繰り返し)
❌ DON’T:
- ワイルドカード前方一致(* で始まるクエリ)で全スキャン
- 大型集計を複数 AZ に跨がり実行(遅延増)
- マスターノードで データ処理を同時実行
- Serverless なのに Manual スケーリング指定
セキュリティ
✅ DO:
- VPC 内配置(パブリック公開禁止)
- Fine-Grained Access Control で ドキュメント・フィールドレベルアクセス
- SAML / OpenID Connect で IdP 統合
- CloudTrail で API 監査ログ収集
❌ DON’T:
- マスターパスワードを平文で管理
- インターネット公開で IAM なし認証
- 本番・ステージングで同一インデックス混在
- バックアップなしで重要データ保持
トラブルシューティング
| 症状 | 原因 | 解決策 |
|---|---|---|
| クエリが遅い(秒単位) | ホットノード飽和、シャード分散不足 | GPU 加速有効化、Auto-Optimize 実行 |
| ベクター索引化が遅い | GPU なし、ベクター次元大 | GPU 加速有効化(10 倍高速化) |
| ストレージコスト爆増 | ISM ポリシーなし、古いログ削除されない | ISM で自動 Cold / Delete 設定 |
| 検索精度低い | アナライザー設定不適切 | カスタムアナライザー設定、同義語追加 |
| 接続タイムアウト | VPC / SG 制限、IAM 権限 | VPC 設定・IAM ロール確認 |
| FGAC が反映されない | キャッシュ残存 | クエリキャッシュクリア |
2025-2026 最新動向
GPU 加速(2025 年本格展開)
- ベクター索引化が 10 倍高速化、数十億ベクターが 1 時間で索引化可能
- Serverless GPU インスタンスで 自動スケーリング対応
Auto-Optimization(2025 年 GA)
- 検索品質・速度・コスト を自動バランス
- インデックス設定を機械学習で最適化
- チューニング人力不要
OpenSearch 3.3 リリース(2025)
- 11 倍のパフォーマンス向上(OpenSearch 1.3 比)
- 2.5 倍のベクター検索高速化
- AWS Infrastructure Innovation により実現
Vector Ingestion 機能強化
- S3 → OpenSearch Serverless への自動ベクター変換
- Bedrock 埋め込みモデル ワンクリック統合
学習リソース
公式ドキュメント
- Amazon OpenSearch Service Developer Guide
- OpenSearch Official Documentation
- OpenSearch Serverless Guide
- Vector Search Guide
AWS ブログ・記事
- Amazon OpenSearch Service Improves Vector Database Performance with GPU Acceleration
- Key re:Invent 2025 Amazon OpenSearch Features
- OpenSearch Vector Search Basics
OSSリファレンス
- OpenSearch GitHub
- Elasticsearch / OpenSearch Documentation
- Vector Database Comparison
- FAISS(Vector Search Engine)
実装例
小規模(ログ集約)
構成:OpenSearch Serverless(4 OCU)
コスト:$100~200/月
用途:CloudWatch Logs → OpenSearch Dashboard
流れ:
1. CloudWatch Logs Subscription Filter
2. Kinesis Data Firehose
3. OpenSearch Serverless に自動取り込み
4. Dashboard で 全ログを可視化
中規模(RAG + SIEM)
構成:OpenSearch 2.19(t3.large × 3)+ Vector コレクション
コスト:$2,000~3,000/月
用途:GenAI チャットボット + セキュリティ分析
流れ:
1. 企業ナレッジ → Bedrock で ベクトル化 → Vector コレクション
2. CloudTrail → OpenSearch で 脅威検知アラート
3. ユーザークエリ → ベクター検索 → LLM のコンテキスト生成
大規模(エンタープライズ SIEM)
構成:OpenSearch 3.3(r6g.2xlarge × 10)+ UltraWarm + Cold
コスト:$10,000+/月
用途:全社セキュリティ分析基盤
流れ:
1. 多数ソース(CloudTrail、VPC Flow、GuardDuty) → Firehose
2. Hot:直近 7 日、Warm:7~30 日、Cold:30~365 日
3. Dashboard で リアルタイム脅威スコアリング・自動アラート
4. Fine-Grained Access Control で部門別アクセス制御
導入ロードマップ
フェーズ 1:PoC(1~2 週間)
- [ ] OpenSearch Serverless 環境作成
- [ ] CloudWatch Logs を接続
- [ ] ベクター検索デモ実装
- [ ] Dashboard で可視化確認
フェーズ 2:パイロット(2~4 週間)
- [ ] 本番 OpenSearch ドメイン構築
- [ ] ISM ポリシー設定(Hot/Warm/Cold)
- [ ] Fine-Grained Access Control 設定
- [ ] セキュリティ設定(VPC、SAML)
- [ ] バックアップ・復旧テスト
フェーズ 3:本番化(1~2 か月)
- [ ] 本番ログ転送開始
- [ ] Dashboard・アラート設定
- [ ] クエリ パフォーマンス チューニング
- [ ] 監視・メトリクス設定(CloudWatch)
フェーズ 4:最適化(継続)
- [ ] GPU 加速有効化(ベクター検索)
- [ ] Auto-Optimize 実行
- [ ] マルチリージョンレプリケーション
- [ ] GenAI RAG 統合
まとめ
Amazon OpenSearch Service は 検索・ログ分析・ベクターDB のオールインワンプラットフォームです。Lucene ベースの全文検索、CloudWatch Logs 統合による SIEM、2025 年の GPU 加速によるベクター検索、Fine-Grained Access Control による企業グレードセキュリティを一つの環境で実現。
OpenSearch Serverless で自動スケーリング、ISM で ライフサイクル自動化、OpenSearch 3.3 で 11 倍のパフォーマンス向上 により、検索エンジン・ログ分析基盤・GenAI ベクターストアとして、デジタルトランスフォーメーションの中核を担います。
参考文献
AWS 公式ドキュメント
- Amazon OpenSearch Service Developer Guide
- OpenSearch Serverless Guide
- Vector Search Documentation
- Pricing
AWS ブログ・アナウンス
- Amazon OpenSearch Service Improves Vector Database Performance with GPU Acceleration
- Key re:Invent 2025 OpenSearch Features
- Vector Ingestion Feature
OSSプロジェクト・リソース
- OpenSearch Official Website
- OpenSearch GitHub Repository
- FAISS - Facebook AI Similarity Search
- Elasticsearch Documentation(互換)
- AWS Samples - OpenSearch
- Vector Database Benchmarks
- OpenSearch Dashboards Documentation
- AWS - Building Smarter Search with Vector Search on AWS OpenSearch Serverless
最終更新:2026-04-26 バージョン:v2.0