Elastic Cloud について　〜実際にデプロイメントを作ってみよう〜

:::note warn
*(情報は投稿時点（2022年3月頃）の話です)*
:::


# Elastic Cloud について 〜実際にデプロイメントを作ってみよう〜

Elastic Cloud は一言でいうと、Elastic が提供する Elasticsearch のマネージドサービスです。簡単にElasitcsearch のクラスターがデプロイ・管理できるサービスです。

:::note info
前書きが長いので、実際の作成の流れを見たい方はこちらへ [[先に飛ぶ]](#実際に使ってみる)
:::

## メリット

ご存知の方もいらっしゃると思いますが、Elasticsearch のルーツは OSS にあり、手軽に自分のPC、VM、サーバー等にデプロイできます。多くの方は（特に初期の頃は）自分で運用したという経験をお持ちの方も多いと思いますし、その煩わしさを経験された方も多いかもしれません。ソフトウェアの管理・運用のみならず、サーバー自体もケアしないといけないとなると、本質以外の作業に時間が取られてしまいます。

可能な限り本質に近いところでの時間を最大化するためは、 Elastic Cloud のようなマネージドサービスが力を発揮します。Elastic Cloud はクラウドの責任分界点でいうと、 （IaaS > PaaS > SaaS の分類があり、右に行くほどユーザーが管理する範囲が減る、みたいな話）、 PaaS や SaaS にあてはまります。



# 何ができるの？

端的にいうと、Elasticsearch クラスターのデプロイと管理ができます。



## 機能

Elastic Cloud の主な機能の一例としては下記のようなものがあります。

- クラスターのデプロイ
    - Elasticsearch ノード (Hot, Warm, Cold, Frozen, Machine Learning, Coordinating)
    - Kibana ノード
    - Enterprise Search ノード
    - Integration Server ノード
- デプロイメントのユースケースに合わせたハードウェアプロファイル
- デプロイメントの構成変更・スケーリング（オートスケールあり）
- スナップショットレポジトリ
- ローリングバージョンアップデート
- Private Link (各クラウドプロバイダーとのセキュアなネットワーク通信の設定。VPC間、VNet間の通信)

特徴としては、クラスターのデプロイ先を AWS、GCP、Azure から選択していただけるという事です。あくまでも運用は Elastic なので、クラウド上のリソース自体を触る事はないのですが、既存のクラウドリソースに合わせて Elasticsearch をデプロイすると、Private Link を使うとセキュアな通信が可能になります。

各クラウドのマーケットプレイスから購入することも可能です（当然ですが、デプロイできるクラウドプラットフォームが絞られます）。



## 各クラウドプラットフォームの違い

とくにクラウドに縛りはないとしたら、3社の中からどうやって選ぶ？と悩まれる方もいると思います。

基本となる Elasticsearch 自体の機能に差分はありません。各クラウドの差分から来る違いがいくつかありますので、簡単にご紹介します。

まず最初に見るポイントとして Elastic Cloud のリソース・コストを試算するツールがあります。[[Pricing Calculator]](https://cloud.elastic.co/pricing/) というツールですが、構成をポチポチと選択すると、その金額を教えてくれるので金額感やサイズ感の目安になると思います。更に、[[データ転送＆スナップショットストレージのコスト]](https://www.elastic.co/jp/blog/elasticsearch-service-data-transfer-and-snapshot-storage-pricing)も課金されていきますのでご注意ください。

各社が提供するインフラ上で動くため、クラウドプラットフォーム毎にインスタンスのスペックに差分がありますし、同様の理由で金額にも微妙な差分があります。金額は上記の Pricing Calculator から確認できます。更に、実際に使っているインスタンスに関しては [[ドキュメント]](https://www.elastic.co/guide/en/cloud/current/ec-reference-hardware.html) に書いてあるので、興味のある方は見てみてください。

先程書いた、Private Link は各クラウド内での通信を実現するもので、GCPのVPCからアクセスする場合は Elastic Cloud も GCP を、Azure のVNetからアクセスする場合は Elastic Cloud も Azure を、AWSの VPC からアクセスする場合は Elastic Cloud も AWS を選択する必要があります。



# 実際に使ってみる

初めてアカウントを登録した場合には 14日間のトライアルがあるので、ちょっと触ってみる分には十分だと思います。実は初めてアカウントを作成した時に、トライアルのクラスターを作成するフローが少し違ったりもしますが、今回は通常の流れをご案内したいと思います。

早速ですがクラスターを作成する流れを見てみましょう。



## 作成の流れ



###  1. Elastic Cloud portal

Elastic Cloud にログインするとこのような画面が表示されます。もっとも重要なのは、画面上部のふたつ、**Elasticsearch Service** と **Cloud Status** だと思います。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8472/3f9c07b5-84cc-e92b-6b97-5216508f7dfd.png" width="800px">

Elasticsearch Service はデプロイメントの作成・管理をするための場所、Cloud status はサービス自体の障害等の情報を表示する場所です。

今回は Elasticsearch Service のパネルの右上の *Create deployment* をクリックします。



### 2. Create a deployment の画面

クリックすると下記の画面が表示されます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8472/2ca1ee8e-fefd-76ac-66b6-641634d41ecc.png" width="500px">

設定できる項目は下記の通りです。

項目 | 説明
--- | ---
Name | デプロイメント名

何も変えずに、*Create deployment* を押すと、デフォルトのサイズの、"My Deployment" という名のクラスターが、GCP Iowa で作成されてしまいますのでご注意ください。

ちなみに、デフォルトのサイズは下記の通りです。

```
- Hot tier node 8GB RAM x 2zones
- Master (tie breaker) node 1GB RAM x 1zone (自動追加)
- Integration Server node 1GB x 1zone (無料枠)
- Enterprise Search node 2GB x 1zone (無料枠)
- Kibana node 1GB x 1zone (無料枠)
```

ここで大事なのは2点。 *Edit settings*　と　*Advanced settings* のふたつです。

まずは *Edit settings* をクリックしてみます。



### 3. Edit settings

*Edit settings* をクリックすると、下記のようにいくつかのドロップダウンが表示されたと思います。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8472/6709c5ec-0653-3f8b-534d-8f1b30a61ff8.png" width="500px">

設定できる項目は下記の通りです。

項目 | 説明
--- | ---
Cloud provider　| クラスターをデプロイするクラウドプロバイダー（AWS, GCP, Azure）
Region | クラスターをデプロイする地域
Hardware profile | クラスターで利用するインスタンスの種類
Version | デプロイしたい Elasticsearch と Kibana のバージョン

#### Cloud provider & Region

ここで、どのクラウドプロバイダーの、どのリージョンにデプロイするか選択できますが、基本的な機能は同じですが、各クラウド間でもちょっとした差分はあります。(例えば一部 tier は 2zones しか提供できないであったり)

#### Hardware Profile

`Hardware profile` ではクラスターで利用するインスタンスタイプを選択します。裏側でどのインスタンスを使っているかは意識する必要ありませんが（気になる方は[[こちら]](https://www.elastic.co/guide/en/cloud/current/ec-reference-hardware.html)）、結果的に プロファイル毎に、vCPU:RAM:ディスク量の割合が決まっています。（小さいサイズのインスタンスに関しては必要に応じて CPU Credits を利用するため、"Up to" と表示されます）

例えば、あるプロファイルのvCPU:RAM:ディスク量の割合が設定されているとします。

```
Up to 2vCPU | 1GB RAM | 30GB ディスク
Up to 2vCPU | 2GB RAM | 60GB ディスク
...
8vCPU | 64GB RAM | 1.92TB
```

といった具合に、倍々で大きくなっていきます。各プロファイルが何に適しているか、ドロップダウンに簡単な説明書きが記されていますので、それを参考に選ぶ事になります。各クラウドプロバイダーでも提供している種類に違いはありますが、大まかにどういう構成があるかと言うとCPU比重多め、メモリ比重多め、バランス（ストレージ多め）といった感じです。


#### Version

基本的に選択できるバージョンは直近の2マイナーバージョンと、前マイナーバージョンの最新版です。

### 4. Advanced settings

オートスケーリングや、各インスタンスのサイズを設定できます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8472/3cd38afa-2112-e7a0-ea71-5086e7c24402.png" width="500px">

#### Autoscale

**データノード**と**MLノード**のオートスケール設定が可能です。

データノードのオートスケールは、使用するディスクの量をもとに、自動的にスケールアップしていきます。その際のサイズの上限等が設定できます。

MLノードは、メモリの使用量をもとにスケールの判断を行います。下限と上限、両方を設定できるようになっています。

#### インスタンスのサイズ

各種インスタンスの追加とサイズ・ゾーン数の指定ができます。

基本的には Elasticsearch の各ロール, Kibana, Integration Server, Enterprise Search のノードが追加できます。

Kibana (1GB RAM), Integration Server (1GB RAM), Enterprise Search (2GB RAM), Machine Learning  (1GB RAM) のノードは無料枠が存在し、最小のインスタンスであれば無料で利用できます。＊ただし、Machine Learning 自体はplatinum ライセンスの機能なのでご注意ください。

マスタノードだけは特別で、6ノードまでは必要に応じて投票用のマスターノード、6ノード以上の場合マスター専用ノードを3台、自動的に追加します。この挙動はスプリットブレイン問題を避けるためのものです。

各ノードの役割はまた別の機会にでも書けたら書きたいと思います。

各インスタンスのサイズは、ドロップダウンから選択します。ドロップダウンのサイズの一覧を見ていると、気づくと思いますが、あるメモリサイズ（だいたい ~64GBくらい）まではスペック倍々に増え、そこから N倍で増やせる、といった感じです。動きとしては、まずはノードの最大サイズまでスケールアップし、そこからスケールアウトする動きとなっています。

ゾーン数に関しては、一般的なクラウドの Availability Zone (AZ) の考え方と一緒です。基本的には高可用性を担保するための仕組みです。必要に応じて AZ を追加すると良いと思いますが、最低でも 2 zones を設定する事をおすすめします。

とくに Elasticsearch はレプリカを複数ノードにする事で可用性を担保しますが、小さいインスタンスを使う場合は複数 AZ を使わないと複数ノードを配置できません。上記の通り、大きいサイズであれば複数ノード作成されるため 1AZ でもレプリカを配置できますが、可用性の観点から見るとレプリカの意味合いが少し薄れてしまいます。


#### Edit Settings and Plugins

見落とす可能性があるので、念の為書いておきますが、画面右上に、*Edit settings and plugins* というボタンがあります。これをクリックすると、プラグイン等の設定ができます。（さらにデプロイ後に、デプロイメントの編集を行うと、elasticsearch.yml や kibana.yml の設定が可能になりますが、今回は詳細は割愛します）例えば、 kuromoji を使うにはここから追加する必要があります。

一通り必要な設定が終わったら、画面下部の **Create deployment** をクリックするとデプロイメントの作成がはじまります。

### 作成中

デプロイメントが作成されるまで少し時間がかかります。デプロイ待ちの画面が表示されますが、ここではデプロイ中のクラスターの elastic ユーザー　（superuser）のパスワードが表示されます。一度しか表示されないのでここでコピー・ダウンロードを忘れないようにします。再表示はできませんがパスワードリセットは可能なので、二度と使えなくなるなんて事にはなりません。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599974/47dcf0d1-5055-3db0-cf64-37ebe2a41834.png" width="500px">

### 作成完了後

作成が完了したら（上の画面であれば、*Continue* ボタンが押せるようになったタイミング）、Kibana にアクセスできます。

その画面から離れた場合等は、Elastic Cloud の最初の画面にあるデプロイメントの一覧からデプロイメント名をクリックすることで Kibana アクセスできます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599974/91add74d-f024-6ac1-5332-ac5ce2668176.png" width="500px">

クラスターのその他のエンドポイントを知りたい場合、デプロイメントを編集したい場合等は一覧の右側にある歯車を押すと、デプロイメントの詳細設定画面に飛べます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599974/895708c5-93be-aace-9983-d8025c81ba1f.png" width="500px">

# 最後に

初めて使う場合、使ってみたいけどちょっと動きがわからないから不安等が少しでもクリアになればと思い、その第一歩となるデプロイメントを作る際に考えるポイントや操作についてまとめてみました。

少し長くなったので、いったんここで区切りましたが、まだまだ色々と便利な機能があるので、使い方や tips 含め書いていきたいと思います。