Elastic Cloudを使ってみた

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

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

**2019/02/28時点での情報です。**

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

# Elastic Cloud とは
Elastic社が公式に運営するクラウドサービスです。

公式運営のため、常に最新バージョンのElasticsearchや関連するサービス（Kibanaなど）が使用でき、またサポートも充実しています。

公式プラグインや機能なども自由に使用できます。

サーバーとしてはAWSとGCPから好きなRegionのものを選択できますが、GCPではTokyo Regionが使用できないなど一部制限もあります。
（[最近東京がサポートされたようです！](https://www.elastic.co/jp/blog/elasticsearch-service-is-now-available-on-google-cloud-platform-gcp-in-japan)）

ただしAWSやGCPのアカウントは不要であり、Elastic Cloudにアカウントを作るだけで使用することができます。

# 使い方
## アカウント作成
https://www.elastic.co/jp/cloud/elasticsearch-service

ここからアカウントを作成できます。
使用できるインスタンスのメモリ・ストレージサイズなどの内容は限定されますが、14日間は無料トライアルが使用可能です。
内容が限定されるとはいえ、トライアルとしては十二分なものがもらえるので問題ないでしょう。

## デプロイメント
インスタンスを作成します。
基本的にはCLIなどは一切使用せず、必要な要件のボタンを押していくだけで完了します。
細かい設定をしたい場合は、設定ファイルを変更することもできます。

## 基本作成画面
<img width="100%" alt="スクリーンショット 2019-02-20 16.51.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407637/e1e90f1a-be60-f37a-24e5-89337ad08dab.png">
好きな名前記入と各ボタンをクリックだけで進められます。

## カスタム作成画面
<img width="100%" alt="スクリーンショット 2019-02-20 16.53.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407637/9bb3eac2-c187-e3ac-7821-ce25442a96e0.png">
カスタム作成画面では、無料トライアルのためあまりできることはありませんが、実使用時はいろいろと調整できそうです。
また全文検索時に日本語を使用する場合、デフォルトで使われているAnalyzerでは対応していません。
そのため、ICU、kuromojiと呼ばれるライブラリを導入・設定する必要があります。
以下のように設定できます。

この操作は、デプロイメント完了後にEdit画面からも行うことができます。

1. Elasticsearch plugins and settings の Manage plugins and settings を展開
2. analysis-icu と analysis-kuromoji を選択

<img width="100%" alt="スクリーンショット 2019-02-21 12.11.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407637/eb290dc8-0b0a-12a8-9486-548ac84e58d0.png">

# デプロイメント完了後
デプロイメントが完了すると、Elastic Cloudの各機能が使用できるようになります。

主なものについて紹介します。

**なお、デプロイ完了直後に表示される、デフォルトユーザーであるelasticのパスワードは最初しか表示されないので、どこかにコピーして保存してください。**

## デフォルト画面
<img width="100%" alt="スクリーンショット 2019-08-12 10.40.18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407637/666a9119-db52-81c6-ff5e-55ab231cfe2f.png">

左メニューのデプロイメント名をクリックすると表示されます。
作成した各インスタンス・アプリケーション等の概要データが表示されます。
Applications欄のLaunchリンクから、各アプリケーションの詳細画面へ飛ぶことができます。

## Edit画面
<img width="100%" alt="スクリーンショット 2019-08-12 11.10.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407637/5acf7671-d5c4-cb01-7463-02a70ab5bb1a.png">

左メニューのEditをクリックすると表示されます。
各アプリケーション・インスタンスについて編集ができます。
主にメモリやストレージサイズ、設定などの変更、Machine LearningやAPMなどのアプリケーションの有効・非有効化、公式プラグインの追加などが行なえます。

## API Console画面
<img width="100%" alt="スクリーンショット 2019-08-12 11.08.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407637/a2412c37-cbe9-8487-edb4-cf292c9d7f41.png">

左メニューのAPI Consoleをクリックすると表示されます。
ターミナルやブラウザを使わず、直接APIを叩くことができます。

## Performance画面
<img width="100%" alt="スクリーンショット 2019-08-12 11.00.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407637/9ffde834-0112-4076-29f6-912fb8d7b155.png">

左メニューのEditをクリックすると表示されます。
現在のElastic Cloudの各種状態をモニタリングできます。

## Kibana画面
KibanaのLaunchリンクを叩くことで遷移できます。
アカウントは、最初に提示されたelasticアカウントか、自分で作成したアカウントです。
データの可視化、モニタリングなどが利用できます。

## アクセス制御
不特定のものからElasticsearchへデータを追加・編集されたりデータを読み取られないようにするため、Elasticsearchへのアクセスを制御する必要があります。

Elastic Cloudでは、X-Packと呼ばれるツールの機能を使います。

Kinabaコンソールの「Management」のSecurity項目にてロールを振り分けたユーザを作成し、Elasticsearchへのアクセス時は作成したユーザのID/PASSを使用することで、ロールに合致する内容にのみアクセスできるようになります。

<img width="100%" alt="スクリーンショット 2019-03-01 14.23.07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407637/4dd377cc-a922-07f7-e1ee-03b758f1b6b5.png">
<img width="100%" alt="スクリーンショット 2019-08-12 11.12.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407637/16c04baf-6809-4f6d-2285-a85ceafeab32.png">


## 通知
何らかの異常が起きた時に、それを検知して通知する必要があります。
Elastic Cloudでは、X-PackのWatcherという機能を使います。
Kinabaコンソールの「Management」のElasticsearchのWatcherにて、Watcherの管理画面に飛ぶことができます。
<img width="100%" alt="スクリーンショット 2019-03-01 14.23.07 (1).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407637/906b25df-008b-162b-b095-7a7d116eef08.png">

# 所感
## 良かった点
### デプロイメントが楽
必要な情報をボタンで選んでいくだけですぐにインスタンスを作成できました。

### インスタンスのメモリ・ストレージサイズの比率設定が、Elasticが考える最も良い比率に固定されている
これは良い点でも悪い点でもありますが、インスタンスのメモリ・ストレージサイズの比率がElasticが考える最も良い比率に固定されています。

キレイに運用できる利点がある一方、細かく値段のチューニングは効きません。

### 最新バージョンが使用できる
Elastic公式のため、最新バージョンがすぐに使用できます。

### プラグイン追加が楽
デフォルトのAnalyzerでは日本語の解析は難しく、専用のプラグインを追加する必要があるのですが、予めレコメンドしてくれているので設定が楽でした。

### Elasticの関連アプリケーションを使用できる
Kibanaでは、APMなどサービス側の状態を取得して可視化できるサービスも使用でき、関連サービスの様々な状態を取得できるため、全文検索以外にも幅広くデータ収集ができます。

## 悪かった点
### 独自のサービスである
AWSが提供するAmazon Elasticsearch ServiceではAWSの知見があれば応用できたりしますが、これは独自のサービスであるためそのあたりの応用が効かないという点があります。

# 総評
公式というだけあってElasticsearchの最新版が使えたり、Elasticの他のツールもデフォルトで多くが提供されていたりなどしており、Elastic自体にとても慣れている人には非常に良いサービスであると思います。

一方で、Elasticツール独特の使い方や設定を学習しなければならない点などがあるのも事実です。

ただ、最近は[GCPへの対応が強化されている](https://www.elastic.co/jp/blog/elasticsearch-service-is-now-available-on-google-cloud-platform-gcp-in-japan)ようですので、今後はGCPならElastic Cloud、AWSならAmazon Elasticsearch Service、という使い分けになるかもしれません。