AWSでは全文検索のマネージドサービスとして、「Amazon CloudSearch」と「Amazon Elasticsearch Service」(以下、Amazon ES)の二つを提供している。

 CloudSearchはオープンソースの検索ソフト「Apache Solr(ソーラー)」がベース。Amazon ESは、米Elasticが開発するオープンソースの「Elasticsearch」をベースにしている。

 こう言うと、両者は出所の全く違う検索サービスのように思えるかもしれない。しかしSolrとElasticsearchはどちらも「Lucene」という検索エンジンを使っており、検索機能だけに着目すると大きくは違わない。

 最大の違いは、CloudSearchが検索機能だけを持つシンプルなサービスであるのに対して、Amazon ESは検索機能だけでなくグラフ描画などの分析・可視化機能も備えることだ(図1)。

図1 AWSの二つの全文検索サービス
図1 AWSの二つの全文検索サービス
[画像のクリックで拡大表示]

 Amazon ESの分析・可視化機能は、Elasticが開発する「Kibana」というオープンソースソフト。つまりAmazon ESは、Elasticの検索ソフトと可視化ソフトをセットにしたサービスである。

 Amazon S3やDynamoDBをデータソースにしたときの自動フィールド定義といった実装のしやすさなど、CloudSearchのほうが優れている点はあるが、この記事ではAmazon ESに絞って解説する。ECサイトや業務システムなどに検索機能を付加する際、多くのケースで、グラフ表示などの可視化機能もユーザーから要求されるからだ。ITエンジニアにとっても、検索機能を運用するうえで可視化機能は必要である。

Office文書も検索可能

 上述した通り、Amazon ESは検索機能と分析・可視化機能を備える。基本的に検索機能はElasticsearch、可視化機能はKibanaである。これらをクラスター構成のノードで稼働させる。

 クラウドサービスであるため、仮想マシン上でElasticsearchやKibanaを稼働させる場合に比べて自由度は下がるが、実用上は大きな問題はない。

 例えばElasticsearchでは多様な機能をプラグインとして追加できるが、Amazon ESではプラグインを利用できない。ただし、「ICU Analysis」や「Japanese(kuromoji)Analysis」といった一般的なプラグインのほか、PDFやMicrosoft Officeの文書ファイルを扱えるようにする「Ingest Attachment Processor」プラグインも組み込まれている。

 Amazon ESで利用できない主要なプラグインとしては、「elasticsearch-head」といった管理用プラグインが挙げられる。ただし、AWSマネジメントコンソールでAmazon ESのノードクラスターのステータスを確認できる。さらに、Amazon ESのメトリクスやイベントをCloudWatchに簡単に連携できる。CloudWatchを使えば、運用管理の基本機能に不足はないといえる。

 Amazon ESでは、利用できるElasticsearchのバージョンについても制限がある。2017年7月末時点で選択可能なのは「1.5」「2.3」「5.1」「5.3」。最新の「5.5」や任意の旧バージョンを指定できるわけではないが、実用上の支障になることはほぼないと考えていい。

データの取り込み機能は別途用意

 Amazon ESは検索サービスとして、対象データを取り込む。そのためのデータ取り込み機能は、Amazon ESが備えているわけではない。他のサービスを使って、Amazon ESにデータを送り込む必要がある。

 AWSはいくつかの方法を推奨している。その一つが、Elasticが開発するオープンソースのデータ転送ツール「Logstash」を仮想マシン上で動作させることだ。もともと、Elasticsearch、Kibana、Logstashはセットで使うことが想定されており、前者二つの機能を持つAmazon ESとLogstashの相性は良い。

 ただし、Logstashを稼働させるEC2インスタンスの運用が必要になる。

 仮想マシンの運用が不要なマネージドサービスを使う方法として、AWSはログ分析の「CloudWatch Logs」やストリームデータ処理の「Kinesis Firehose」の利用も推奨している。これとは別に、イベント駆動型コード実行の「AWS Lambda」を使ってデータを取り込む方法もある。

インスタンスなどの従量課金

 Amazon ESの料金は従量課金である。利用するノードのインスタンス料金に加え、EBSボリュームの料金(「r3」インスタンスタイプを除く)、データ転送料金が発生する。

 利用できるノードのインスタンスタイプは「t2.micro」から「m4.10xlarge」まで幅が広い。コンピューティング最適化の「c4」タイプ、メモリー最適化の「r3」や「r4」タイプも利用できる。ただしEC2と比較して、Amazon ESのインスタンス料金は割高になっている。

 データ転送料金については、同一リージョンのEC2、S3、DynamoDBからであれば無料だ。

 データ転送料金が掛からない前提で、東京リージョンにおいて、vCPU数2、メモリー8GBの「m4.large.elasticsearch」インスタンスのシングル構成にしてEBSボリューム100GBを利用した場合、1カ月当たりの料金は約160ドル(税別)になる。インスタンスタイプやノード数で料金は大きく変わるが、月額1万円から数万円が一つの目安となるだろう。

 なお負荷に応じてノードクラスターを自動的にスケールアップしたりスケールアウトしたりする機能は提供されていない。ノードのスケーリングは、ユーザーによる運用が必要となる。