Amazon Elasticsearch Serviceを触ってみた

こんにちは。
Web・iOSエンジニアの三浦です。

今回は、AWSのサービスの一つで、マネージドなElasticsearchを提供してくれているAmazon Elasticsearch Serviceを触ってみたので、その内容や感想などを述べていこうと思います。

**2019/02/28時点での情報です。**
**スクショのみ新しく撮り直しています。**

# はじめに
うちの会社ではSolrをVMに載せて使っているのですが、VMの保守期限が切れるため、移行が必要になりました。
当初は同じくSolrをどこかで使おうと思っていたのですが、せっかくなので最近よく聞くElasticsearchを使ってみることにしました。
また、正直もう保守の面倒も見たくないということで、マネージドなサービスを使おうと考え、選択肢の一つとしてAWSがマネージドで提供しているAmazon Elasticsearch Serviceに白羽の矢を立てて使ってみました。
（なお[こちら Elastic Cloud 編](https://qiita.com/takayuki-miura0203/items/9956e09e2e8dc6d39d69)です）

# Amazon Elasticsearch Service とは
Amazon社が運営するクラウドサービスです。

Elasticsearchをクラウドで提供するサービスには、Elasticsearchを作っているElastic社が提供するElastic Cloudというものがありますが、それとは異なり公式運営ではないため、最新のバージョンがすぐに使えるわけではなかったり、一部のプラグインの使用などに制限があります。
一方で、AWSの他のサービスとの連携がしやすかったり、今までAWSを使っていた人にはわかりやすいという利点があります。

最近はリザーブドインスタンスで使用できるようになり、料金がさらに安くなりました。
使用にはAWSアカウントが必要です。

# 使い方
## アカウント作成
Amazon Elasticsearch Serviceを使うにはAWSアカウントが必要です。作成しましょう。

## デプロイメント
Elasticsearchのインスタンスを作成します。
CLI上でも可能ですが、今回はブラウザ上でGUIで作成する方法を紹介します。
細かい設定も可能ですが、最低限使えるようにする設定だけであれば非常に簡単です。

### 作成画面へ行くまで
AWS マネジメントコンソール画面からElasticsearch Serviceを選択します。
<img width="100%" alt="スクリーンショット 2019-08-12 9.06.38.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407637/8c43d479-3c63-fdb1-b382-61d0ea03fd38.png">


Amazon Elasticsearch Sevice画面にて、「新しいドメインの作成」を選択します。
ドメインとは、Elasticsearchの実行に必要なリソースのコレクションです。
なお「リザーブドインスタンスの購入」では、予めインスタンスを年単位で安く購入することができます。
<img width="100%" alt="スクリーンショット 2019-08-12 9.07.33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407637/e65ffe3d-07fe-7944-179f-848f5b85abb0.png">


### 作成画面（デプロイタイプの選択・バージョン指定）
デプロイタイプとバージョンを指定します。
検証用に作成するのであれば、デプロイタイプは「開発およびテスト」、バージョンは最新で良いでしょう。
<img width="100%" alt="スクリーンショット 2019-08-12 9.08.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407637/52821d86-1617-4633-6644-30a9631699fe.png">


### 作成画面（ドメインの設定）
ドメイン名、インスタンスやストレージのタイプ、スナップショット等、ドメインの設定をします。
インスタンスやストレージなどは料金に直結するので、求めるスペックと料金表を比較しながら選びましょう。
その他の設定は、試してみるだけならデフォルトでも構わないと思います。
<img width="100%" alt="スクリーンショット 2019-08-12 9.14.38.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407637/6ad4d394-47fc-635e-b8de-2304ea48fbd6.png">


### 作成画面（アクセス設定）
ドメインへのアクセスの制御をします。
検証であれば、設定が簡単なパブリックアクセス + 特定IPの許可でいいかと思います。
<img width="100%" alt="スクリーンショット 2019-08-12 9.17.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407637/e829860c-ecd8-cc9a-a10d-00357d942ad2.png">

最後に確認画面で確認してからボタンを押すと、インスタンスが作成されます。

またこれらの設定は、インスタンス作成後にも変更できます。

## デプロイメント完了後
デプロイメントが完了すると、Amazon Elasticsearch Serviceの各機能が使えるようになります。
<img width="100%" alt="スクリーンショット 2019-08-12 9.28.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407637/e0c2f9e6-8637-ce57-daf4-4ab0f7e509b8.png">
おおよそボタン・タブにかかれている通りですが、コンソール上でindexを作る・データを入れるなどするときは、概要の「Kibana」のURLからKibanaコンソールへ飛び、そこで操作すると良いです。

**ちなみに設定を変更する際は、青い「クラスターの設定」ボタンから設定ページに飛ぶことができます。**
（最初そのボタンが今の画面のことを指していると勘違いし、かなり詰まりましたw）

### Kibanaコンソール
Kibanaのコンソールです。
<img width="100%" alt="スクリーンショット 2019-08-12 9.31.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407637/70ee3003-b1ac-0b73-80f9-ddeeae3854a8.png">
コンソール上からデータを入れるなどしたいときは、「Dev Tools」を使うと良いでしょう。

### 日本語全文検索設定
日本語の全文検索をする際は、ICU、Kuromojiと呼ばれるライブラリを設定・導入する必要がありますが、Amazon Elasticsearch Serviceはデフォルトでそれらのプラグインをサポートしているため、プラグインの導入の必要はありません。

# 所感
## 良かった点
### デプロイメントが楽
必要な情報をボタンやプルダウン、ちょっとしたテキストによって入力するだけで、すぐにインスタンスを作成できました。

### 細かくインスタンスの設定ができる
上限・下限はありますが、ストレージサイズを1GB単位で設定できるなど、細かくインスタンスのサイズなどを設定できます。

### 日本語での設定の際、プラグイン追加の手間がない
ICU、Kuromojiがデフォルトでサポートされているため、追加で導入する必要がありません。

### コンソールが日本語でわかりやすい
Kibanaは英語ですが、Elasticsearch Serviceのコンソールは日本語のためとっつきやすいです。

### アクセスコントロール設定が楽
コンソール上でアクセスコントロールの設定されており、簡単に設定できました。
ただし、凝ったことをする場合は、AWSのアクセスコントロールについて理解しておく必要があります。

### 他のAWSサービスと簡単に連携できる
CloudWatch、IAMなど、AWSの他のサービスと簡単に連携できます。
それぞれが使いやすく、またAWSの他のサービス使用時にも応用できたり、予め知識があれば使用できます。

## いまいちな点
### 最新バージョンが使用できない場合がある
公式サポートでないこともあり、最新バージョンが使用できないことがあります。

### Elastic社の他のツールがサポートされていない
Logstashなどのツールについては一緒にはサポートされていないため、使いたければ別途サーバなどを立てて自分で入れるなりする必要があります。

# おわりに
アクセスコントロールを含むインスタンスの作成が非常に簡単で、Elasticsearchを試しに使ってみるのであればAmazon Elasticsearch Serviceを使ってみるのはとてもアリな選択肢だと感じました。
また予めAWSを導入しているのであれば、AWSの他のサービスと簡単でセキュアに連携できますし、CloudFormationが使えるなどAWSの知見が使用できるので、そういう意味でもとても良いサービスなのではないでしょうか。