Serverless Operations, inc

>_cd /blog/id_gj65h53gee

title

Amazon OpenSearch Serviceの基礎知識と企業での実践的なユースケース

Amazon OpenSearch Serviceの基礎

Amazon OpenSearch Serviceは検索機能を提供するAWSのマネージドサービスです。オープンソースとして公開されているOpenSearchをAWSがクラウド上でホスティングしたサービスです。多様な検索やデータ可視化のユースケースに対応するために、様々な機能が提供されています。通常のWebサイトのサイト内検索に代表される単純なテキスト検索のみならず、半構造化、非構造化データなどにも対応しており、様々な属性から最適な製品、サービス、ドキュメント、回答を素早く探し出すことができます。さらに形態素解析やベクターデータベースとしての機能なども備えており、製品のレコメンデーションや生成AI関連のデータベースとして使用することも出来ます。また、システム運用の現場ではログなどの大量のストリーミングデータをリアルタイムで処理し、費用対効果の高い方法でシステム内で発生している問題や洞察を素早く得ることが可能となっています。AWSで検索関連の機能を実装する際にはまず最初の選択肢となるのではないでしょうか。

Amazon OpenSearch Serverless

Amazon OpenSearch ServiceにはAmazon OpenSearch Service Serverlessというオプションも存在します。具体的にはAmazon OpenSearch Serviceと以下のような違いがあります。

  • 管理が容易:Amazon OpenSearch Serviceでは、データサイズ、シャード数、リクエストレートなどをベースにクラスターのサイジングやインデックスの設計が必要でしたが、Amazon OpenSearch Service Serverlessでは、クラスタのサイジング、スケーリング、チューニング、シャードとインデックスのライフサイクル管理が不要です。
  • 速度:自動的にリソースをスケールすることで、高速なデータ取り込みレートとクエリ応答時間を一貫して維持します。
  • エコシステム:既存のOpenSearchクライアント及びAPIは互換性を持ち、同じものを使用できます。

内部のアーキテクチャとしてストレージとコンピュートが分離されたことにより、各レイヤーがワークロードの需要に応じて独立してスケールできるようになっています。CPU、ディスク使用率、メモリ、ホットシャードの状態などのコンピュートリソースはサービスによって監視および管理されており、これらのシステムのしきい値が超えた場合、サービスが自動的に容量を調整するため、リソースのスケーリングを心配する必要もありません。例えば、アプリケーションモニタリングのワークロードが可用性イベント中に突然ログアクティビティの急増を受けた場合、Amazon OpenSearch Serverlessはインデックス作成用のコンピュートノードをスケールアウトします。これらのログアクティビティが減少し、コンピュートノードのリソース消費が一定のしきい値を下回ると、Amazon OpenSearch Serverlessはノードをスケールインします。同様に、ウェブサイトの検索エンジンがテレビ放送などの後に突然クエリのスパイクを受けた場合でも、Amazon OpenSearch Serverlessは自動的にクエリのコンピュートノードをスケールアウトし、データの取り込みパフォーマンスに影響を与えることなくクエリを処理します。

Amazon OpenSearch Serverlessのコスト

Amazon OpenSearch Serverlessから「OCU(OpenSearch Compute Unit)」という概念が導入されました。これはコンピューティングリソースの単位を表します。OCU は、CPU、メモリ、およびストレージの組み合わせとして定義され、OpenSearch Serverless のインデックス作成やクエリ処理に必要なリソース量を表す指標です。Amazon OpenSearch ServerlessのコストはOCUをベースに算出されます。

本番ではレプリカを有効化した構成が推奨されるため、2OCU: 0.5 * 4が最低限のリソースとなりコストは$488.976となります。テストやステージング環境で、レプリカを無効にした場合はその半額(1OCU: 0.5 * 2)での使用が可能となるため、最低限のコストとしては$244.488となります。管理が不要であることや自動スケーリングのメリットがワークロードとして明確に活かせない場合は少し割高と感じるかもしれません。

常にリアルタイム性を求められないのであれば、Amazon OpenSearch Servicesの前段にAmazon SQSやAmazon Kinesis系のサービスを設置することでトラフィックの流量を調整すれば、自動スケーリング自体がそもそも不要という設計にすることも出来るので、その方がコスト的にはメリットが有るという場合も多いのではないでしょうか。

Amazon OpenSearch Serviceの企業でのユースケース

ログ分析・可視化

システムのエラーやアクセスログなどを集めたログの可視化・分析基盤のユースケースは開発現場においてよくあるユースケースだと思います。例えば、組織内のすべてのアプリケーションのログデータを元にETL処理を経て Amazon OpenSearch serviceに集約することで、横断的なログ分析基盤の構築が可能となります。例えば以下のようなアーキテクチャが考えられるでしょう。

ログ分析・可視化アーキテクチャ
ログ分析・可視化アーキテクチャ

各サービスのAmazon CloudWatch Logs からSubscription Filter を経てAmazon Kinesis Data StreamsもしくはAmazon Kinesis Firehoseに投入される流れになります。基本的にはAmazon Kinesis Firehoseを選択することで問題ありません。しかし例えば、AWS Lambdaでデータ自体の冪等性を担保するための仕組みが実装する必要があったり、リトライ実行時の不整合を防止するバリデーション対応などが必要な場合はAmazon Kinesis Data Streamsを選定しましょう。こうすることで、Amazon OpenSearch Serviceに連携するデータの重複と汚染が防止できるため、他のログプラットフォームからのダンプや移行が安全に行うことが可能となります。本番稼働の途中から連携した場合でも、連携前のログをダンプすることが可能です。

また、Amazon CLoudWatch Logs側では構造化データを出力するようにしましょう。例えば以下のような形式です。こうすることで検索時に無用なデータの結合(JOIN)などを行う必要がなくなり検索のパフォーマンスは良くなります。また、ユーザの立場からしても構造化データをベースに検索した方がよりわかりやすいでしょう

{ “level”: “metric”, “msg”: “…”, “timestamp”: epoctime, “service_id”: “…”, “index_suffix”: “…”, “role”: [“…”], … }

全文検索

例えば、社内のMSオフィスファイルをクローリングして、Amazon OpenSearch Serviceに登録することで、企業内のデータベースを作成することが可能です。例えば、人事手続きに関する資料やガイドライン、年末調整の手順、退職手続きに関する情報、ビザ申請のプロセス、出張の手配方法、健康保険に関する説明、産業医の予約方法など、さまざまな社内情報を効率よくインデックス化できます。

全文検索アーキテクチャ
全文検索アーキテクチャ

こうして構築されたデータベースは、生成AIを利用したチャットボットと組み合わせることで、さらに活用範囲が広がります。社員は日常業務において、必要な情報を簡単にチャットボットに問い合わせることで、迅速に取得できるようになります。たとえば、「年末調整の手続き方法を教えて」といった質問をチャットボットに投げかけると、OpenSearch Serviceにインデックスされた関連資料から必要な情報を引き出し、即座に回答します。

データ分析・可視化

例えばあなたの会社で独自の動画配信サービスを展開しているとしましょう。オンデマンド動画配信での新作リリースやライブ配信時の同時視聴者数・セッション数をリアルタイムで測定するというユースケースや、マーケティングとマネージャー層へのサービス利用状況のレポート作成と可視化を行うために利用すること必要だったとします。Google Analyticsなどのツールを使用して必要なデータが取得できない場合は、Amazon OpenSearch Serviceを使用してデータの分析と可視化が可能になります。

データ分析・可視化アーキテクチャ
データ分析・可視化アーキテクチャ

動画を配信しているWebサイトのフロントウンドは集計のためのフォーマットにしたJSON構造化ログを API Gateway に送信し、AWS Service Proxy を経由して Amazon Firehose Firehoseに取り込まれます。その後 Lambda 関数を経由してOpenSearch に登録されます。Amazon Kinesis Firehose を使っているのでアクセススパイク発生時でも流量調整が行えますが、ある程度のリアルタイム性を考慮したい場合は Indexing のパフォーマンスを考慮し同時視聴者数の集計においては検索用のドメインを分離して対応するようにしても良いでしょう。

フロントエンドからはブラウザ上のイベントを利用して様々なタイミングでAmazon API Gatewayにログデータを送信することが出来ます。例えばvisibilitychangeイベントを使うことで、ブラウザを閉じて動画を見終えた時間のログなどが取得可能になるでしょう。このイベントはブラウザのタブが切り替わってページが表示されたり非表示になったときや、ブラウザ自体が最小化の操作で非表示になったり、最小化から復帰したときに発生します。

レコメンドエンジン

ブログメディアには「合わせて読みたい」といった関連記事であったり、ECサイトにはおすすめ商品と行った関連商品が表示される機能があります。これもAmazon OpenSearch Serviceで実装が可能です。Amazon OpenSearch ServiceにはMore like this クエリやk-NNといった類似文章検索のための仕組みが実装されており、これを使えば、明確なアルゴリズムに基づいて関連性の高い記事をレスポンスとして返すことが可能です。

More like this クエリはtf-idfという特徴量に基づいて類似文章を判断します。これは、特定の単語がその文書内でどれだけ頻繁に現れるか(TF: Term Frequency)と、その単語がコレクション内の他の文書にどれだけ含まれているか(IDF: Inverse Document Frequency)を組み合わせることで、単語の重要性を測定します。そしてその重要性の高い単語がより一致するほかの記事を類似文章として判定してレスポンスを返します。

{
  "query": {
    "more_like_this": {
      "fields": ["content"],  // 類似性を基に検索するフィールド
      "like": "Here is some example text that I want to find similar documents for.",  // 類似ドキュメントを探すためのテキスト
      "min_term_freq": 1,  // クエリ内で考慮される最小単語頻度
      "min_doc_freq": 1,   // 文書がクエリ内に含まれるために必要な最小文書頻度
      "max_query_terms": 25 // クエリで使用される最大単語数
    }
  }
}

fieldsで検索対象となるフィールドを指定して、検索のためのテキストをlikeに指定します。このフィールドには、生のテキストを直接指定することもできますし、ドキュメントのIDを指定して、そのドキュメントに似たものを探すことも可能です。

類似画像検索

Amazon OpenSearch ServiceはVector Store(ベクターストア)としての利用が可能です。文章だけでなくあらゆるデータをEmbeddingしベクトルで表現することが出来れば類似データの検索は可能になります。

画像検索アーキテクチャ
画像検索アーキテクチャ

検索対象となる画像データはAmazon SageMakerの事前学習済みのモデルを利用してベクトルデータに変換してAmazon OpenSearch Service内のインデックスに保存します。検索時にはAmazon API Gatewayに検索対象となる類似画像をアップロードします。更にAmazon SageMakerのモデルでベクトルに変換したデータを使ってAmazon OpenSearch Service内のインデックスに検索をかけることで類似画像を検索することが可能になります。

Amazon OpenSearch Service内ではk-NN検索という指定したベクトルと各データポイントのベクトルとの距離を計算し、その距離が最も小さいもの(すなわち最も似ているもの)を見つけることできるアルゴリズムが実装されています。これにより、例えば、ユーザーが興味を持っているアイテムに似たアイテムを推薦したり、画像検索において似た画像を見つけたりすることが可能になります。

Amazon OpenSearch Serviceでは、k-NNアルゴリズムとして「Approximate Nearest Neighbors (ANN)」が使用されており、これにより非常に大規模なデータセットでも効率的に類似検索を行うことができます。

まとめ

このように、Amazon OpenSearch Serviceは、企業が直面する多様な検索ニーズに対応する強力なソリューションを提供します。特に、最近では生成AIとの組み合わせにより、自然言語処理やパーソナライズドな検索体験を提供することも容易です。これにより、顧客や従業員に対して、より直感的で有用な情報を提供するプラットフォームを構築できます。Amazon OpenSearch Serviceを導入することで、企業はデータドリブンな意思決定を加速させ、デジタルトランスフォーメーションの一環としての検索機能を強化することができるでしょう。

Amazon OpenSearch Serviceの活用に興味があれば是非、弊社にお声がけください。

Written by
CEO

堀家 隆宏

Takahiro Horike

  • Facebook->
  • X->
  • GitHub->

Share

Facebook->X->
Back
to list
<-