目次

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 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 埋め込みモデル ワンクリック統合

学習リソース

公式ドキュメント

AWS ブログ・記事

OSSリファレンス


実装例

小規模(ログ集約)

構成: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 公式ドキュメント

  1. Amazon OpenSearch Service Developer Guide
  2. OpenSearch Serverless Guide
  3. Vector Search Documentation
  4. Pricing

AWS ブログ・アナウンス

  1. Amazon OpenSearch Service Improves Vector Database Performance with GPU Acceleration
  2. Key re:Invent 2025 OpenSearch Features
  3. Vector Ingestion Feature

OSSプロジェクト・リソース

  1. OpenSearch Official Website
  2. OpenSearch GitHub Repository
  3. FAISS - Facebook AI Similarity Search
  4. Elasticsearch Documentation(互換)
  5. AWS Samples - OpenSearch
  6. Vector Database Benchmarks
  7. OpenSearch Dashboards Documentation
  8. AWS - Building Smarter Search with Vector Search on AWS OpenSearch Serverless

最終更新:2026-04-26 バージョン:v2.0