Amazon Elasticsearch Service (現 OpenSearch Service) とは? 基本を徹底解説
はじめに:進化するサービス名の背景
かつて、Amazon Web Services (AWS) はマネージド型のElasticsearchサービスを「Amazon Elasticsearch Service」として提供していました。しかし、Elasticsearchを開発・提供するElastic社とのライセンスに関する方針の違いから、AWSはElasticsearchのオープンソース版から派生した新しいプロジェクト「OpenSearch」を立ち上げました。これに伴い、AWSのマネージドサービスも名称が変更され、現在は「Amazon OpenSearch Service」として提供されています。
この記事では、サービス名が変更された背景にも触れつつ、Amazon OpenSearch Serviceがどのようなサービスであり、どのような機能やメリットを持ち、どのような用途で利用できるのかを、その基本から詳細まで徹底的に解説します。以前のAmazon Elasticsearch Serviceをご存知の方も、OpenSearch Serviceとして何が変わったのか、あるいはOpenSearch Serviceが初めての方にも理解できるよう、網羅的な内容を目指します。
Amazon OpenSearch Service とは何か?
一言で言えば、Amazon OpenSearch Serviceは、AWS上でスケーラブルで安全なOpenSearch (およびレガシーなElasticsearch) クラスターを簡単にデプロイ、運用、スケーリングできるマネージドサービスです。
OpenSearch自体は、分散型のRESTful検索・分析エンジンであり、大量のデータをほぼリアルタイムで保存、検索、分析、可視化するための強力な機能を提供します。OpenSearch Serviceは、このOpenSearchの機能をフル活用しつつ、AWSがその運用・管理の複雑な部分(ハードウェアのプロビジョニング、セットアップ、設定、パッチ適用、バックアップ、監視、障害回復など)を引き受けることで、ユーザーがコアビジネスロジックやデータの活用に集中できるようにします。
主な用途としては、以下のようなものがあります。
- ログ分析と可視化: システムログ、アプリケーションログ、VPCフローログなどを収集・保存し、検索、フィルタリング、集計を行い、パターンや異常を特定します。OpenSearch Dashboards (旧 Kibana) と組み合わせてリアルタイムのダッシュボードを作成することが一般的です。
- アプリケーション監視: メトリクス、トレース、ログを統合して、アプリケーションのパフォーマンス問題を診断し、ユーザーエクスペリエンスを監視します。OpenSearchのトレース分析機能が役立ちます。
- Webサイト/アプリケーション内検索: 大量のドキュメント(商品カタログ、記事、ドキュメントなど)をインデックス化し、高速かつ関連性の高い全文検索機能を提供します。ファセット検索、サジェスト機能なども実装可能です。
- セキュリティ情報・イベント管理 (SIEM): セキュリティ関連のログやイベントを収集・分析し、脅威の検出、インシデントレスポンス、コンプライアンス監査を支援します。異常検知やアラート機能が活用されます。
- IoTデータ分析: IoTデバイスから生成される膨大な時系列データを収集・保存し、リアルタイムまたはニアリアルタイムでの分析と監視を行います。
OpenSearch Serviceは、これらの多様なユースケースに対応するために、高いスケーラビリティ、可用性、耐久性、そして強力な検索・分析機能を提供します。
歴史的背景:Amazon Elasticsearch ServiceからOpenSearch Serviceへ
Amazon Elasticsearch Serviceが提供を開始したのは2015年でした。当時、Elasticsearchはログ分析や検索の分野で急速に普及しており、AWSはその需要に応える形でマネージドサービスを提供しました。これは多くのAWSユーザーにとって、Elasticsearchの運用負荷を大幅に軽減する画期的なサービスでした。
しかし、Elasticsearchのオープンソース版はApache License 2.0の下で提供されていましたが、Elastic社は2021年初頭にライセンスモデルを変更し、Server Side Public License (SSPL) およびElastic Licenseという、より制約の多いライセンスに移行しました。この変更は、クラウドプロバイダーがElasticsearchをマネージドサービスとして提供する際の制約を増やすものでした。
AWSはオープンソースソフトウェアを重視しており、Elasticsearchのコア機能をオープンなライセンスの下で継続的に利用できるようにするために、OpenSearchプロジェクトを立ち上げました。このプロジェクトは、Elasticsearch 7.10.2をフォークし、Apache License 2.0の下で開発を継続しています。OpenSearchプロジェクトには、AWSだけでなく、SAPやCapital Oneなどの企業もコントリビューターとして参加しており、活発なコミュニティによって開発が進められています。
このOpenSearchプロジェクトへの移行に伴い、AWSのマネージドサービスも「Amazon OpenSearch Service」へと改称されました。このサービスは、OpenSearchをベースとしていますが、既存のAmazon Elasticsearch Serviceユーザーのために、一部の古いElasticsearchバージョン(7.10以前)も引き続きサポートしています。ただし、AWSは新しい機能開発をOpenSearch上で進めているため、最新の機能を利用するにはOpenSearchバージョンを選択することが推奨されます。
名称変更は単なる名前の変更ではなく、基盤となるソフトウェアの変更(ElasticsearchからOpenSearchへ)を反映したものです。しかし、基本的なアーキテクチャ、マネージドサービスとしての利便性、そして主要な機能(検索、分析、可視化)は引き継がれています。
OpenSearch/Elasticsearchの基本概念
Amazon OpenSearch Serviceを理解するためには、基盤となるOpenSearch (またはElasticsearch) の基本的な概念を把握しておく必要があります。
- クラスター (Cluster): 1つ以上のノードの集合体で、すべてのデータを保持し、インデックスと検索機能を提供します。高い可用性とスケーラビリティを提供するために連携して動作します。
- ノード (Node): クラスターの一部である単一のサーバーです。複数の役割(データノード、マスターノードなど)を持つことができます。
- データノード (Data Node): インデックス化されたドキュメントを保持し、検索・集計リクエストを処理します。クラスターの大部分を構成します。
- マスターノード (Master Node): クラスター全体の管理タスク(インデックスの作成/削除、ノードの追加/削除、シャードの割り当てなど)を担当します。データの保持や検索リクエストの処理は行いません。クラスターの安定性のために重要な役割を果たし、通常は専用のマスターノードインスタンスを3台設定して可用性を高めます。
- UltraWarm ノード (UltraWarm Node): 低頻度でアクセスされる読み取り専用データを低コストで保存するためのノードです。S3をストレージとして利用し、キャッシュ層を持ちます。
- Cold Storage (コールドストレージ): 最もアクセス頻度が低いデータを保存するためのストレージオプションです。UltraWarmよりもさらに低コストですが、データにアクセスする際にはUltraWarmまたはホットストレージに復元する必要があるため、レイテンシが高くなります。
- インデックス (Index): 関連するドキュメントの集合体です。リレーショナルデータベースにおけるテーブルや、従来型の検索エンジンにおけるインデックスに似ています。データの種類(例: Webサイトログ、商品情報、ユーザープロフィール)ごとにインデックスを作成することが一般的です。インデックス名は小文字である必要があります。
- ドキュメント (Document): インデックス化できる単一のデータ単位です。JSON形式で表現されます。リレーショナルデータベースにおける行や、他のデータストアにおけるドキュメントに似ています。各ドキュメントはタイプ(レガシーな概念)、一意のID、そしてフィールド(後述)を持ちます。
- フィールド (Field): ドキュメントを構成する個々のキー-値ペアです。リレーショナルデータベースにおけるカラムに相当します。フィールドは型(文字列、数値、日付など)を持ち、検索や集計の方法を定義するマッピング(後述)によってどのようにインデックス化されるかが決まります。
- マッピング (Mapping): ドキュメントと、そのドキュメントに含まれるフィールドがどのようにインデックス化されるかを定義します。フィールドのデータ型(テキスト、キーワード、整数、日付など)、分析方法(全文検索用のトークン化など)、インデックス化オプションなどを指定します。適切にマッピングを設定することで、検索と分析の効率と精度が向上します。
- シャード (Shard): インデックスを水平方向に分割したものです。各インデックスは1つ以上のプライマリシャードに分割されます。シャードはクラスター内の異なるノードに分散して配置されるため、インデックス全体のサイズが単一ノードの容量を超えることが可能になり、並列処理によるパフォーマンス向上も実現します。シャードはOpenSearch/Elasticsearchの分散処理とスケーラビリティの根幹をなす要素です。
- レプリカ (Replica): プライマリシャードの複製です。レプリカシャードは、元のプライマリシャードとは異なるノードに配置されます。レプリカを持つことで、ノード障害が発生した場合でもデータの損失を防ぎ、読み取りリクエスト(検索や集計)の負荷を分散することができます。各プライマリシャードは0個以上のレプリカを持つことができます。可用性を確保するためには、通常1個以上のレプリカを設定します。
これらの概念を理解することが、OpenSearch Serviceのアーキテクチャや設定を適切に行う上で非常に重要です。
Amazon OpenSearch Service の主要な機能とメリット
Amazon OpenSearch Serviceは、OpenSearch/Elasticsearchの機能に加えて、AWSのマネージドサービスとしての多くのメリットを提供します。
1. マネージドサービスの利便性
- デプロイと設定の容易さ: 数回のクリックまたはAPIコールで、スケーラブルなOpenSearchクラスターを迅速に立ち上げることができます。インスタンスタイプ、ノード数、ストレージ、ネットワーク設定などを指定するだけで、AWSがプロビジョニングと初期設定を行います。
- スケーリング: アプリケーションの成長やデータ量の増加に合わせて、クラスターのノード数やインスタンスタイプを容易に変更できます。ほとんどの場合、インデックスの再作成やデータの移行なしにスケールアップ/スケールアウトが可能です。OpenSearch Serviceは、特定のメトリクスに基づいて自動的にスケーリングを調整する機能も提供します。
- パッチ適用とアップグレード: オペレーティングシステム、OpenSearch/Elasticsearchソフトウェア、および関連するプラグインのパッチ適用やバージョンアップグレードは、AWSによって管理されます。メンテナンスウィンドウを設定することで、アプリケーションへの影響を最小限に抑えることができます。
- 監視とログ記録: Amazon CloudWatchと統合されており、CPU使用率、メモリ使用率、ディスク使用率、ノードの状態など、クラスターの主要なメトリクスを自動的に収集・監視できます。Amazon CloudWatch Logsと統合して、OpenSearchログを収集することも可能です。
- バックアップとリカバリ (スナップショット): 自動化されたスナップショット機能により、定期的にクラスターの状態とデータをS3にバックアップできます。これにより、障害発生時や誤操作時でも、指定した時点にクラスターを復元することが可能です。手動スナップショットも取得できます。
- 高可用性: マルチAZ配置を選択することで、異なるアベイラビリティゾーン (AZ) にノードを分散配置し、AZ障害が発生した場合でもサービスを継続できるように設定できます。レプリカシャードの設定と組み合わせることで、さらに可用性を高めることができます。
- 耐久性: EBSボリュームによるデータの永続化に加え、S3への自動スナップショットによりデータの耐久性が確保されます。
2. 強力な検索・分析機能
OpenSearch (およびサポートされるElasticsearchバージョン) が提供するコア機能です。
- 全文検索: 大量のテキストデータに対して、高速かつ関連性の高い全文検索を実行できます。アナライザーによるテキストの前処理(単語への分割、ステミング、ストップワード除去など)や、関連性スコアリング(TF-IDF, BM25など)により、高品質な検索結果を提供します。
- 構造化データ検索: 日付、数値、地理空間データなどの構造化データに対する効率的な検索、フィルタリング、ソートが可能です。
- アナリティクスと集計: データをグループ化し、統計情報(合計、平均、最小、最大、カーディナリティなど)を計算する集計機能は、ログ分析やビジネスインテリジェンスの強力なツールとなります。時系列データの分析に特に有効です。
- 多様なクエリタイプ: シンプルなキーワード検索から、ブールクエリ、フレーズクエリ、ワイルドカードクエリ、ファジー検索、地理空間クエリなど、様々な検索ニーズに対応する豊富なクエリタイプをサポートしています。
- OpenSearch Dashboards (旧 Kibana): OpenSearch ServiceにはOpenSearch Dashboardsが統合されており、データの探索、可視化、ダッシュボード作成、監視、レポート作成などが直感的に行えます。これはログ分析やメトリクス監視において非常に重要なコンポーネントです。
3. OpenSearchプロジェクトによる追加機能
OpenSearch Serviceは、OpenSearchプロジェクトで開発された、Elasticsearchのオープンソース版には含まれない、あるいは商用版でのみ提供されていた機能を多数提供します。
- セキュリティ:
- きめ細やかなアクセスコントロール (Fine-Grained Access Control – FGAC): インデックスレベル、タイプレベル(レガシー)、ドキュメントレベル、フィールドレベルでのアクセス制御が可能です。特定のユーザーやロールに対して、特定のインデックスの特定のドキュメントの特定のフィールドのみへのアクセスを許可するといった、非常に詳細な権限設定ができます。これにより、マルチテナント環境や機密性の高いデータを含む環境でのセキュリティが大幅に向上します。
- ユーザー認証: IAMユーザー/ロール、Cognitoユーザープール、またはSAMLによる認証をサポートしています。
- 監査ログ: クラスターに対するアクションのログを記録し、セキュリティ監査やコンプライアンス要件への対応を支援します。
- 異常検知 (Anomaly Detection): 機械学習アルゴリズムを使用して、時系列データ内の異常なパターンを自動的に検出します。ログの急増/急減、メトリクスの異常な変動などを早期に検知し、問題の特定やセキュリティ脅威への対応に役立てることができます。
- アラート (Alerting): 定義した条件(例: 特定のエラーメッセージの発生頻度が閾値を超える、メトリクスが範囲外になる)に基づいて、通知(SNS、Slack、カスタムWebhookなど)を送信できます。これにより、システムの異常や重要なイベントに迅速に対応できます。
- インデックス管理 (Index Management): インデックスのライフサイクル管理を自動化できます。例えば、特定の期間が経過したインデックスをHot -> UltraWarm -> Cold -> 削除、といったように自動的に移行させることができます。これにより、ストレージコストを最適化し、管理の手間を削減できます。ロールオーバー、シュリンク、フォースマージなどの操作も自動化できます。
- トレース分析 (Trace Analytics): 分散トレーシングデータをOpenSearchに ingestion し、可視化、検索、分析を行うための機能です。OpenTelemetryなどのトレーシングエージェントと連携し、マイクロサービス間のリクエストフローやレイテンシを分析することで、アプリケーションのパフォーマンス問題や障害発生箇所の特定に役立ちます。
- 他のAWSサービスとの統合: Lambda、Kinesis Data Firehose、Kinesis Data Streams、CloudWatch Logs、VPC Flow Logsなど、様々なAWSサービスとシームレスに統合できます。これにより、データ収集パイプラインの構築が容易になります。
4. コスト効率
- 多様なインスタンスタイプ: ワークロードの要件に応じて、汎用、コンピュート最適化、ストレージ最適化など、様々なEC2インスタンスタイプを選択できます。また、ホットデータ用のインスタンスだけでなく、低頻度アクセスデータ用のUltraWarmやCold Storageを利用することで、ストレージコストを大幅に削減できます。
- Reserved Instances: 継続的に使用するクラスターに対してReserved Instancesを購入することで、オンデマンド料金と比較して大幅な割引が適用され、コストを最適化できます。
これらの機能とメリットにより、Amazon OpenSearch Serviceは、大量データの検索・分析基盤として非常に強力で柔軟なソリューションとなっています。
Amazon OpenSearch Service のアーキテクチャ
Amazon OpenSearch Serviceドメインのアーキテクチャは、基盤となるOpenSearch/Elasticsearchクラスターの構成に基づいています。主要なコンポーネントは以下の通りです。
- ドメイン (Domain): Amazon OpenSearch Serviceにおける論理的な管理単位です。一つのドメインは、一つのOpenSearch/Elasticsearchクラスターと、そのクラスターに関連するインスタンスタイプ、インスタンス数、ストレージ設定、ネットワーク設定、セキュリティ設定、スナップショット設定などの構成情報をカプセル化します。異なるドメインは完全に独立しており、リソースや設定は共有されません。一般的に、用途(例: 本番ログ分析、開発環境検索)や環境(本番、ステージング、開発)ごとにドメインを分けることが多いです。
- インスタンス (Instance) とノード (Node): ドメイン内の各インスタンスは、クラスター内のノードとして機能します。OpenSearch Serviceでは、データノードとマスターノードに異なるインスタンスタイプや数を割り当てることができます。
- データノード: データを保持し、検索・分析リクエストを処理するEC2インスタンスです。データの量、インデックス操作の負荷、検索・分析クエリの複雑さに基づいてインスタンスタイプと数を決定します。通常、これがクラスターの大部分を占めます。
- 専用マスターノード (Dedicated Master Node): クラスターの状態管理のみを行うインスタンスです。データノードのリソースを消費せず、クラスターが大規模になるにつれて管理タスクの負荷が高まっても安定した状態を維持するために推奨されます。通常、可用性確保のために3台以上の専用マスターノードを異なるAZに配置します。専用マスターノードはデータノードよりもリソースが少なくても構いませんが、安定性が最優先されます。
- ストレージ:
- ホットデータ (Hot Data): アクティブにインデックス化され、頻繁に検索・分析されるデータです。データノードに関連付けられたEBSボリュームに保存されます。EBSボリュームタイプ(gp2, gp3, io1, io2など)を選択でき、データ量と必要なI/O性能に基づいて適切なサイズとタイプを選びます。
- UltraWarm データ (UltraWarm Data): アクセス頻度が低いが、必要に応じて検索・分析したいデータです。UltraWarmノードに関連付けられ、データ自体はS3に保存されますが、UltraWarmノードが高速なキャッシュ層を提供します。ホットデータと比較して大幅に低コストで大量のデータを保存できます。データは読み取り専用になりますが、Hotデータと同じクエリやDashboards機能を使って検索・分析できます。
- Cold Storage (コールドストレージ): 最もアクセス頻度が低いデータです。純粋なS3に保存されます。UltraWarmよりもさらに低コストですが、データへのアクセスはOpenSearch Service経由でUltraWarmまたはホットストレージに復元してから行う必要があります。このため、アクセスまでの時間がかかります。長期保存やアーカイブに適しています。
- ネットワーク設定:
- VPC アクセス: 推奨される設定です。OpenSearch Serviceドメインを自身のAmazon Virtual Private Cloud (VPC) 内に配置します。これにより、OpenSearchエンドポイントにプライベートIPアドレスでアクセスできるようになり、セキュリティグループやネットワークACLによってアクセスを制御できます。VPC内のEC2インスタンスやLambda関数などから安全にアクセスできます。
- パブリックアクセス: ドメインにパブリックIPアドレスを割り当て、インターネットからアクセスできるようにします。この場合、IAM、Cognito、または基本的なユーザー名/パスワード認証と、ドメインアクセスポリシーを組み合わせて厳重なアクセス制御を行う必要があります。セキュリティ上のリスクが高いため、可能な限りVPCアクセスを選択することが推奨されます。
- アベイラビリティゾーン (AZ) 配置:
- シングルAZ: 全てのノードを単一のAZに配置します。コストは低いですが、そのAZに障害が発生した場合にクラスター全体が利用できなくなる可能性があります。開発環境やテスト環境に適しています。
- マルチAZ: データノードと専用マスターノードを複数のAZ(通常2つまたは3つ)に分散配置します。これにより、1つのAZに障害が発生しても、他のAZのノードがサービスを引き継ぎ、クラスターの可用性が維持されます。本番環境では必須の設定です。レプリカシャードを複数設定し、異なるAZに配置することで、データ損失リスクを最小限に抑えつつ、AZ障害に対する耐性を高めます。
このアーキテクチャにより、OpenSearch Serviceは様々なワークロード要件に対応できる柔軟性と、AWSのインフラストラクチャによる堅牢な信頼性を提供します。
セキュリティ
Amazon OpenSearch Serviceにおけるセキュリティは非常に重要であり、複数の層で保護を設定する必要があります。
- ネットワークセキュリティ:
- VPC 内配置: 最も基本的なセキュリティ対策であり推奨される設定です。ドメインをVPC内に配置することで、インターネットからの直接アクセスを防ぎ、VPC内の信頼できるリソースのみがプライベートIP経由でアクセスできるようにします。
- セキュリティグループ: ドメインのエンドポイントへのネットワークアクセスを制御します。特定のEC2インスタンス、サブネット、または他のセキュリティグループからのトラフィックのみを許可するように設定します。最小限のアクセス権限を与える「最小権限の原則」に従うことが重要です。
- ネットワークACL (Network Access Control List): サブネットレベルでのステートレスなパケットフィルタリングルールを設定できます。セキュリティグループと組み合わせて使用することで、より詳細なネットワークアクセス制御が可能です。
- 認証と承認:
- ドメインアクセスポリシー (Domain Access Policy): リソースベースのポリシーであり、IAMユーザーやロール、匿名ユーザーがドメインに対して実行できるAPIアクション(例:
es:ESHttpGet
,es:ESHttpPut
など)を定義します。ネットワークレベルの制御を通過したトラフィックに対して、さらにアクセスを制限するために使用されます。 - IAM 認証: AWSのIdentity and Access Management (IAM) を使用して、OpenSearch Service APIや、OpenSearch/Elasticsearchの特定のエンドポイントへのアクセスを認証・承認します。IAMユーザー/ロールにポリシーをアタッチすることで、どのユーザーがどのドメインで何ができるかを細かく制御できます。
- Cognito 認証: OpenSearch DashboardsへのアクセスにAmazon Cognitoユーザープールを使用した認証を設定できます。これにより、組織のユーザーディレクトリ(SAML対応)やソーシャルIDプロバイダーとの連携が可能になります。
- SAML 認証: OpenSearch Dashboardsへのアクセスに外部のSAML 2.0 IDプロバイダー(Okta, Auth0など)を使用した認証を設定できます。
- ドメインアクセスポリシー (Domain Access Policy): リソースベースのポリシーであり、IAMユーザーやロール、匿名ユーザーがドメインに対して実行できるAPIアクション(例:
- きめ細やかなアクセスコントロール (Fine-Grained Access Control – FGAC):
- FGACは、OpenSearch Serviceが提供するセキュリティ機能の中でも特に強力なものです。認証されたユーザーが、クラスター内のどのデータやどの機能にアクセスできるかを定義します。
- ロールとユーザー/バックエンドロールのマッピング: FGACでは、権限の集合体である「ロール」を定義し、そのロールをIAMユーザー/ロールやCognitoユーザープール、または独自のユーザー名/パスワード認証で設定した「内部ユーザー」(OpenSearchのセキュリティプラグインが管理するユーザー)に関連付けます。
- 権限の設定: ロールに対して、以下のレベルで権限を設定できます。
- クラスター権限: クラスター全体に対する操作(例: クラスターのヘルスチェック、ノード情報の取得、スナップショットの管理)を許可します。
- インデックス権限: 特定のインデックスパターン(例:
logstash-*
)に対する操作(例: 読み取り、書き込み、削除、インデックス管理)を許可します。 - ドキュメントレベルセキュリティ (DLS): 特定のクエリ(例:
{"match": {"user_id": "current_user_id"}}
)に一致するドキュメントのみへのアクセスを許可します。 - フィールドレベルセキュリティ (FLS): ドキュメント内の特定のフィールド(例: クレジットカード番号、個人情報)へのアクセスを制限または拒否します。
- FGACは、マルチテナント環境で、各テナントが自身のデータのみにアクセスできるようにする場合や、コンプライアンス要件により特定のユーザーに特定の情報へのアクセスを制限する場合に不可欠です。OpenSearch Dashboardsとの統合もされており、DLSやFLSを適用した状態でデータの探索や可視化ができます。
- 暗号化:
- 保存時の暗号化: Amazon OpenSearch Serviceは、AWS Key Management Service (KMS) と統合して、データを保存時に自動的に暗号化する機能を提供します。EBSボリューム、UltraWarm、および自動スナップショットのデータが暗号化されます。これにより、不正な物理アクセスやスナップショットからの情報漏洩リスクを低減できます。
- 転送中の暗号化: HTTPSを使用してクライアントとOpenSearch Serviceドメイン間の通信を暗号化します。ドメイン作成時に有効化することが推奨されます。ノード間の通信も暗号化できます。
- 監査ログ: OpenSearch Serviceで行われた操作の監査ログを生成し、CloudWatch LogsやS3に出力できます。これにより、セキュリティイベントの監視やインシデント調査が可能になります。
これらのセキュリティ機能を適切に組み合わせて設定することで、Amazon OpenSearch Serviceドメインとその中に保存されたデータを強力に保護することができます。特に本番環境では、VPC内配置、IAM認証、転送中・保存時の暗号化、そしてFGACの利用が強く推奨されます。
信頼性と高可用性
Amazon OpenSearch Serviceは、ミッションクリティカルなアプリケーションの要件を満たすために、高い信頼性と可用性を提供します。
- マルチAZ 配置: 前述のように、データノードと専用マスターノードを複数のAZに分散配置することで、単一のAZ障害に対する耐性を持ちます。本番環境では少なくとも2AZ配置、推奨は3AZ配置です。
- シャードとレプリカ: OpenSearch/Elasticsearchのコア機能として、インデックスはプライマリシャードに分割され、各プライマリシャードはレプリカを持つことができます。これらのシャード(プライマリとレプリカ)は、可能な限り異なるノード、そしてマルチAZ配置の場合は異なるAZに分散して配置されます。
- プライマリシャードが配置されているノードが停止しても、レプリカシャードが自動的に新しいプライマリシャードに昇格するため、データの可用性が維持されます。
- 読み取りリクエスト(検索や集計)はプライマリシャードとレプリカシャードの両方で処理できるため、レプリカ数を増やすことで読み取りスループットを向上させることができます。
- 書き込み操作はまずプライマリシャードで行われ、その後レプリカシャードに複製されます。
- 通常、本番環境ではプライマリシャード1つに対してレプリカを1つ設定します(合計2つのシャードコピー)。これにより、データ損失のリスクを低減し、ノード障害に対する耐性を持たせることができます。
- 自動スナップショット: ドメインの自動スナップショット機能を有効にすることで、定期的に(デフォルトでは毎日)クラスターの状態とデータがS3バケットにバックアップされます。このスナップショットは、データが失われた場合やクラスターが破損した場合に、指定した時点の状態にクラスターを復元するために使用できます。スナップショットは差分バックアップであり、効率的に保存されます。
- 専用マスターノード: 専用マスターノードは、データノードの負荷から独立してクラスターの状態管理を行うため、クラスターが大規模になったり負荷が高まったりした場合でも、クラスターの安定性が維持されます。専用マスターノード自体も複数台(推奨は3台)を異なるAZに配置することで、マスターノード障害のリスクを低減します。
- ノードの自動交換: ハードウェア障害などによりノードが停止した場合、Amazon OpenSearch Serviceは自動的にそのノードを新しい正常なノードに置き換えます。
これらの機能を組み合わせることで、Amazon OpenSearch Serviceは高いレベルの信頼性と可用性を提供し、重要なワークロードを安心して実行できる基盤となります。
パフォーマンス最適化
OpenSearch Serviceのパフォーマンスを最大限に引き出すためには、いくつかの考慮事項があります。
- 適切なインスタンスタイプの選択:
- データノード: CPU、メモリ、ストレージI/Oのバランスが重要です。インデックス作成や複雑な集計はCPUとメモリを多く消費します。検索や分析はI/O性能が重要になります。ワークロードの特性(書き込み中心か読み込み中心か、クエリの複雑さなど)に合わせて、コンピュート最適化、メモリ最適化、または汎用インスタンスを選択します。ストレージ容量とI/O性能も考慮して、EBSボリュームタイプを選択します。
- 専用マスターノード: 安定性が最優先です。データノードほど大きなリソースは必要ありませんが、クラスターの規模に応じて適切なメモリとCPUを持つインスタンスタイプを選択します。
- シャード戦略:
- シャードサイズ: シャードあたりの推奨サイズは10-50 GB程度です。シャードが大きすぎると、ノード障害発生時の復旧に時間がかかったり、シャード移動時の負荷が高くなったりします。シャードが小さすぎると、シャード数が膨大になり、クラスター管理のオーバーヘッドが増大したり、各シャードに割り当てられるリソースが不足したりする可能性があります。
- シャード数: インデックスサイズとシャードあたりの目標サイズから、必要なプライマリシャード数を計算します。データノード数と各ノードに割り当てられるリソース(CPU、メモリ)を考慮して、ノードあたりに割り当てるシャード数を適切に制限することも重要です(推奨はノードあたり最大数十シャード程度)。
- レプリカ数: 読み込みスループットと可用性の要件に基づいてレプリカ数を設定します。通常は1レプリカで十分ですが、読み込み負荷が高い場合は2レプリカ以上も考慮します(ただしストレージコストは増加します)。
- インデックス作成前に適切なシャード数を決定することが重要です。作成後にシャード数を変更するのは複雑で、データの再インデックスが必要になる場合があります。
- マッピングとインデックス設定:
- 適切なデータ型: 各フィールドに適切なデータ型(
keyword
vstext
,long
vsinteger
,date
など)を選択します。特に、全文検索が不要な文字列はkeyword
型にすることで、効率的な検索と集計が可能になります。text
型は全文検索には不可欠ですが、集計や正確な一致検索には向いていません。 - 不要なフィールドの無効化: 検索や分析が不要なフィールドは
enabled: false
とすることで、インデックスサイズを削減し、インデックス作成と検索のパフォーマンスを向上できます。 - インデックス刷新間隔 (refresh_interval): ドキュメントが検索可能になるまでの時間です。デフォルトは1秒ですが、リアルタイム性がそれほど重要でないログ分析などのワークロードでは、この間隔を長くする(例: 30秒、60秒)ことで、インデックス作成のスループットを向上させることができます。検索可能になるまでの時間とインデックス作成効率のトレードオフです。
- 適切なデータ型: 各フィールドに適切なデータ型(
- クエリ最適化:
- フィルターコンテキストの活用: スコアリングに影響を与えない絞り込み条件は、
filter
コンテキストで指定します。これにより、クエリの実行速度が向上します。 - 複雑なクエリの分割: 非常に複雑なクエリや集計は、複数のシンプルなクエリに分割することで、パフォーマンスが向上する場合があります。
- カーディナリティの高いフィールドでの集計: カーディナリティ(一意な値の数)が非常に高いフィールド(例: UUID, セッションID)での
terms
集計は、メモリを大量に消費し、パフォーマンスに悪影響を与える可能性があります。必要な場合にのみ使用し、サンプリングなどの代替手段も検討します。
- フィルターコンテキストの活用: スコアリングに影響を与えない絞り込み条件は、
- データライフサイクル管理:
- Index Management (ISM): データのライフサイクルを自動化し、古いデータをホットストレージからUltraWarm、Cold Storageへと移行させたり、最終的に削除したりすることで、ホットストレージの負荷を軽減し、ストレージコストを最適化できます。アクティブなデータセットを可能な限り小さく保つことは、クエリパフォーマンスにとって重要です。
- バルクインデックス (Bulk Indexing): 大量のドキュメントをインデックス化する際は、単一のドキュメントを個別に送信するのではなく、バルクリクエストを使用して一度に複数のドキュメントを送信します。これにより、ネットワークオーバーヘッドが削減され、インデックス作成のスループットが大幅に向上します。
これらの最適化手法を適切に適用することで、Amazon OpenSearch Serviceクラスターはワークロードに対して高いパフォーマンスを発揮できます。
コスト管理
Amazon OpenSearch Serviceのコストは、主に以下の要素によって決まります。
- インスタンス時間:
- 使用しているインスタンスタイプ(データノード、専用マスターノード、UltraWarmノード)と、各タイプのインスタンス数、および稼働時間に基づきます。インスタンスタイプによって時間あたりの料金が異なります。
- オンデマンド料金: 従量課金です。稼働時間に対して時間単位で課金されます。
- Reserved Instances (RI): 1年または3年の利用を確約することで、オンデマンド料金と比較して大幅な割引が適用されます。継続的に使用する安定したワークロードに対しては、RIの購入を検討すべきです。
- ストレージ:
- ホットデータに使用されるEBSボリュームの容量とタイプ、およびUltraWarm/Cold Storageに保存されているデータ量に基づきます。EBSはプロビジョニングされた容量に対して課金され、UltraWarm/Cold Storageは実際に保存されたデータ量に対して課金されます。
- UltraWarm/Cold Storageのコスト効率: アクセス頻度の低いデータをUltraWarmまたはCold Storageに移行することで、ホットストレージのコストを大幅に削減できます。
- データ転送:
- OpenSearch Serviceドメインからインターネットへのデータ転送に対して課金が発生します。AWS内(同じリージョン内のEC2からOpenSearch Serviceなど)や同じAZ内のデータ転送は無料の場合が多いですが、リージョン間やAZ間のデータ転送には通常費用がかかります。
- スナップショットの取得やS3からの復元に関するデータ転送もコストに影響する場合があります。
- 自動スナップショットストレージ: AWSが管理するS3バケットに保存される自動スナップショットのストレージ容量に対して課金が発生する場合があります(特定の期間や容量を超過した場合など、無料枠がある場合もあります)。
- その他の機能: 監査ログのCloudWatch Logsへの出力や、トレース分析のために取り込んだトレースデータ量など、一部の機能利用に対して追加の料金が発生する場合があります。
コストを管理するためのヒント:
- ワークロードに合ったインスタンスタイプと数を正確に見積もる: 過剰なリソースは無駄なコストにつながります。CloudWatchメトリクスを監視し、リソース使用率に基づいてクラスターサイズを調整します。
- 低頻度アクセスデータをUltraWarm/Cold Storageに移行する: Index Management (ISM) ポリシーを活用して、古いデータを自動的にこれらの低コストストレージ層に移行させます。
- 不要なインデックスやドキュメントを削除する: データ保持ポリシーを定め、古いデータを定期的に削除します。
- Reserved Instancesの利用を検討する: 継続的に使用するベースラインのワークロードに対してRIを購入します。
- 詳細なコスト分析を行う: AWS Cost Explorerなどのツールを使用して、コストの内訳を把握し、最適化の機会を特定します。
- 開発/テスト環境の適切なサイズ設定: 本番環境と同等の大規模なクラスターは不要な場合が多いため、コスト効率の良いインスタンスタイプや小規模なクラスターを使用します。シングルAZ配置も開発/テスト環境では検討できます。
Amazon OpenSearch Service の利用開始
Amazon OpenSearch Serviceの利用を開始するには、AWSマネジメントコンソール、AWS CLI、またはAWS SDKを使用します。一般的なステップは以下の通りです。
- ドメインの作成:
- OpenSearch Serviceコンソールに移動し、「ドメインの作成」を選択します。
- デプロイメントタイプ: 本番環境には「本番」、開発/テストには「開発/テスト」を選択します。本番環境を選択すると、マルチAZ配置や専用マスターノードの推奨設定が提示されます。
- バージョン: 利用したいOpenSearchまたはElasticsearchのバージョンを選択します。最新機能を利用したい場合はOpenSearchの最新バージョンを選択します。
- ドメイン名: ドメインに一意の名前を付けます。
- インスタンスの設定: データノードのインスタンスタイプ、数、ストレージタイプ(EBS)と容量、専用マスターノードのインスタンスタイプと数を選択します。UltraWarm/Cold Storageを利用する場合は有効化します。
- ネットワーク設定: VPC内に配置するか、パブリックアクセスにするかを選択します。通常はVPC内配置を選択し、所属させるVPC、サブネット、セキュリティグループを指定します。
- アクセスポリシーとセキュリティ:
- ドメインアクセスポリシーを設定します。IAMユーザー/ロール、IPアドレス、または匿名アクセスなどを許可できます。
- きめ細やかなアクセスコントロール (FGAC) を有効にするかを選択します。有効化する場合は、マスターユーザー(初期設定用のユーザー名とパスワード)を設定します。IAM、Cognito、SAMLによる認証設定もここで選択できます。
- 保存時の暗号化、転送中の暗号化を有効化します。
- 高可用性: マルチAZを有効にするかを選択します。
- スナップショット: 自動スナップショットの設定を確認します。
- その他の設定: タグ、メンテナンスウィンドウなどを必要に応じて設定します。
- 設定を確認し、ドメインを作成します。ドメインが利用可能になるまでには数十分かかる場合があります。
- データインジェスト (Ingestion): ドメインが利用可能になったら、データをインデックス化します。様々な方法があります。
- AWSサービス連携: Kinesis Data Firehose (S3, CloudWatch Logs, Kinesis Data Streamsなどからデータを取り込み、OpenSearch Serviceへ自動的にロード), Lambda (イベント駆動でデータを加工して送信), CloudWatch Logs (サブスクリプションフィルター経由) など。
- クライアントライブラリ: 各言語(Java, Python, Ruby, Node.jsなど)のOpenSearch/Elasticsearchクライアントライブラリを使用して、アプリケーションから直接データをインデックス化します。
- Logstash, Fluentd, Filebeatなど: サーバーやアプリケーションからログやメトリクスを収集し、OpenSearch Serviceエンドポイントに送信します。OpenSearch ServiceはOpen Distro for Elasticsearchのプラグインをサポートしており、これらのツールとの連携が容易です。
- バルク API: 大量のデータを効率的にインデックス化するには、OpenSearch/ElasticsearchのBulk APIを使用します。
- OpenSearch Dashboards によるデータの探索と可視化:
- OpenSearch Serviceコンソールから、作成したドメインに関連付けられたOpenSearch Dashboardsのエンドポイントにアクセスします。
- セキュリティ設定によっては、IAM、Cognito、またはマスターユーザー認証が必要です。
- OpenSearch DashboardsのDiscover機能でインデックス化されたデータを検索・探索したり、Visualize機能でグラフやチャートを作成したり、Dashboard機能で複数の可視化要素をまとめて監視画面を作成したりできます。
- Anomaly Detection, Alerting, Index Managementなどの機能もOpenSearch Dashboardsのインターフェースから設定・管理できます。
これらのステップを経て、Amazon OpenSearch Service上でデータの検索・分析環境を構築し、活用を開始できます。
OpenSearch Service vs セルフホスト vs EC2
OpenSearch/Elasticsearchを利用する方法は、Amazon OpenSearch Serviceの他に、自身でEC2インスタンスを立ててインストール・運用する方法(セルフホスト/EC2デプロイ)があります。それぞれの主な違いは以下の通りです。
- Amazon OpenSearch Service:
- メリット: 運用管理の負荷が最も低い(プロビジョニング、セットアップ、パッチ、アップグレード、バックアップ、監視、スケーリングなどがマネージド)。高い可用性と信頼性が容易に構築できる。きめ細やかなアクセスコントロールなどのOpenSearch固有機能や、他のAWSサービスとの統合が容易。インフラ管理から解放され、データの活用に集中できる。
- デメリット: OpenSearch/Elasticsearchの全てのカスタム設定やプラグインがサポートされているわけではない(ただし主要なものはサポート)。基盤となるOSやハードウェアレベルでの制御はできない。Elastic社が提供する商用版の機能(Elastic StackのX-Packの一部など)は利用できない(OpenSearchの対応機能で代替)。
- 適しているケース: 運用リソースを最小限に抑えたい。迅速に環境を構築したい。AWSのエコシステム内で完結させたい。スケーラビリティや可用性が重要。
- EC2 インスタンスへのセルフホスト:
- メリット: OpenSearch/Elasticsearchのバージョン、設定、プラグインを完全に自由に制御できる。基盤となるOSやハードウェア構成も自由に選択できる。Elastic社提供の商用版機能を利用できる可能性がある(ライセンスによる)。
- デメリット: 運用管理の負荷が非常に高い(インストール、設定、クラスター管理、パッチ、アップグレード、監視、バックアップ、障害回復、スケーリング計画/実行など、全て自身で行う必要がある)。可用性や信頼性を高める構成(マルチノード、マルチAZなど)の構築・運用は複雑で専門知識が必要。コスト管理も自身で行う必要がある。
- 適しているケース: OpenSearch Serviceではサポートされていない特定のカスタム設定やプラグインが必要。Elastic社提供の商用版機能が必須。既存のセルフホスト環境をそのまま移行したい。運用負荷よりも完全なカスタマイズ性を優先したい。
多くのAWSユーザーにとって、運用負荷の軽減とAWSサービスとの連携の容易さから、Amazon OpenSearch Serviceが最適な選択肢となる場合が多いです。特にログ分析やアプリケーション監視など、定型的かつスケーラビリティが求められるワークロードでは、マネージドサービスのメリットが大きく活かされます。
まとめ
Amazon OpenSearch Service (旧 Amazon Elasticsearch Service) は、AWS上でOpenSearch (または特定のElasticsearchバージョン) クラスターを運用するための、フルマネージドでスケーラブル、かつ安全なサービスです。ElasticsearchからOpenSearchへの名称変更は、オープンソースプロジェクトの進化を反映したものであり、サービス自体は引き続き強力な検索・分析機能を提供しつつ、OpenSearchプロジェクトで開発されたセキュリティや管理に関する革新的な機能も取り入れています。
この記事では、OpenSearch Serviceの基本概念、歴史的背景、主要な機能とメリット(マネージドサービスの利便性、検索・分析機能、OpenSearch固有機能、コスト効率)、アーキテクチャ、セキュリティ、信頼性、パフォーマンス最適化、コスト管理、そして利用開始の方法まで、詳細に解説しました。
Amazon OpenSearch Serviceを利用することで、ユーザーは基盤となるインフラストラクチャの運用・管理の複雑さから解放され、ログ分析、アプリケーション監視、Webサイト検索、SIEMなど、様々な用途で大量のデータを効率的に活用することに集中できます。AWSの堅牢なインフラストラクチャ上で提供されるため、高い可用性、信頼性、そしてセキュリティが確保されます。
OpenSearch Serviceは進化を続けており、今後もOpenSearchプロジェクトの発展とともに新しい機能が追加されていくことが期待されます。大量データの検索や分析基盤をAWS上に構築する際は、ぜひAmazon OpenSearch Serviceの利用を検討してみてください。