elasticsearch 5.5.0 リリース記念 msiインストーラを試す

# 概要

先日、5.5.0のリリースに先立って「Elastic Stack 5.5新機能紹介とAMA」というWebinarを拝聴しておりまして、
そこでWindowsでMSIインストーラが出るよ、という紹介がありました。

[Elastic Stack 5.5.0リリース](https://www.elastic.co/jp/blog/elastic-stack-5-5-0-released)で、このように記述されています。

> Windows！Elasticsearch！Elasticsearch用のWindows MSIインストーラーが登場！GUIとGUIなしのインストールをサポート

これの内容を試してみます。

# 準備

まずは、MSIインストーラを入手しましょう。

https://www.elastic.co/jp/downloads/elasticsearch
にいき、MSIを選択します。およそ37MBのファイルになります。

![Download Elasticsearch Free • Get Started Now   Elastic.png](https://qiita-image-store.s3.amazonaws.com/0/111676/75533294-6d21-363c-2b75-750a14e49ee7.png)

言わずもがな、Javaをインストールしておき、JAVA_HOMEの設定を済ませておきます。


## 見るドキュメント

公式のインストーラの説明は、ここにあります。詳細な手順やデフォルト値の確認はこちらへ。
https://www.elastic.co/guide/en/elasticsearch/reference/current/windows.html


# GUI編

msiファイルをダブルクリックし、インストーラを起動しましょう。

## Locationsの設定

ここでは、どこにインストールするかを設定します。
デフォルトでいいならば、画面下部のNEXTボタンを押下して次に進みます。
（NEXTでなくても、画面上部のメニュー名のようなところを押すことで、画面遷移することもできます）

|設定内容|default value|
|---|----|
| プログラム本体 | C:\Program Files\Elastic\Elasticsearch |
| データフォルダ | C:\ProgramData\Elastic\Elasticsearch\data |
| コンフィグフォルダ | C:\ProgramData\Elastic\Elasticsearch\config |
| ログフォルダ | C:\ProgramData\Elastic\Elasticsearch\logs |

![1.png](https://qiita-image-store.s3.amazonaws.com/0/111676/b920f42e-12dc-1a58-016f-e98e513a3ae4.png)


## Service

ここでは、サービスとしてインストールするか、その場合はアカウントの情報、自動起動するか、インストール後に起動するかを設定します。
設定を終えたら、画面下部のNEXTを押下します。
![2.png](https://qiita-image-store.s3.amazonaws.com/0/111676/da9b23e2-1eea-f8d5-1a6c-f8a3d64842d6.png)

## Configuration

ここでは、クラスタ名（デフォルトではelasticsearch)、ノード名（デフォルトではホスト名）、ロール、メモリ、ネットワーク関連の設定を行います。
設定を終えたら、画面下部のNEXTを押下します。
![3.png](https://qiita-image-store.s3.amazonaws.com/0/111676/f4be9cf7-db6b-8e13-8b12-ec97c9634639.png)

## Plugins

ここでは、インストールするプラグインを選択します。
デフォルトでは、何も設定されていないので、必要なものを見繕って選択しましょう。Japanese(kuromoji) Analysisとか。

設定をすべて終えたら「INSTALL]ボタンを押下すると、インストールが開始されます。

![4.png](https://qiita-image-store.s3.amazonaws.com/0/111676/0c09cbde-7ec5-d6a2-e8f2-79bc3c45cbb8.png)

## インストール実行

選択したプラグインは、ダウンロードされてインストールされます。
貧弱なネットワーク回線の会社にお勤めの方（私）は、ここで(しばらく|はげしく)待ちます。

![5.png](https://qiita-image-store.s3.amazonaws.com/0/111676/344638e4-72f5-ce8a-8754-c989939091f1.png)

インストールが完了すると、こんな画面に。おめでとうございます。

![6.png](https://qiita-image-store.s3.amazonaws.com/0/111676/f62ca6a0-1d0e-e141-39a2-3752ada43b9e.png)



# CUI編

みんな大好きCUIでのサイレントインストールです。
サイレントインストールも、もちろんマニュアルに細かく書いてあります。
https://www.elastic.co/guide/en/elasticsearch/reference/current/windows.html

それをそのままやっても、あまり芸がないので、
今回は、まっさらなWindowsサーバをたてていきなりelasticsearchをインストールするpowershellにしてみた。

```ps1
# Chocoの導入
Get-PackageProvider chocolatey -Force
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.208 -Force

# JDKのインストール
Find-Package jdk8 | Install-Package -Force
# 環境変数の設定 ↓ コメントアウト外してください
#[Environment]::SetEnvironmentVariable("JAVA_HOME", "C:\Program Files\Java\jdk1.8.0_131", [EnvironmentVariableTarget]::User)

# インストーラの取得
New-Item c:\build -itemType Directory -Force
Invoke-WebRequest `
    -Uri https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.0.msi `
    -OutFile C:\build\elasticsearch-5.5.0.msi

# msi実行の引数を指定
$argList = [string[]](
    "/i",
    "c:\build\elasticsearch-5.5.0.msi",
    "/qn",
    "-l install.log",
    'INSTALLDIR="C:\es"',
    'DATADIRECTORY="c:\es\data"',
    'CONFIGDIRECTORY="c:\es\config"',
    'LOGSDIRECTORY="c:\es\logs"',
    'PLUGINS="x-pack,analysis-kuromoji,ingest-attachment"'
)
# msiexecでサイレントインストールの実行
Start-Process -FilePath msiexec.exe -ArgumentList $argList -Wait
```

## 注意点1

JAVA_HOME環境変数を指定しています。`elasticsearch-plugin.bat install *****`とやると分かりますが、
JAVA_HOMEが設定されていないと、バッチが起動しません。

インストーラでPLUGINSを指定していて、インストーラは正常終了するが、何もプラグインが入ってない、ということになりえます。
（なってました、私が）

## 注意点2

これも自分で手で打つと分かるのですが、プラグインの文字列を間違ってはいけません。
注意点１と同じで、インストーラーは終わるが、プラグインがない状態になります。
特に大文字小文字、ハイフンなのかアンダーバーなのか、小さなミスに気をつけましょう。

正しい文字列は、プラグインのページを見ると書いてあるので、そこを確認するのが良いでしょう。

例
https://www.elastic.co/guide/en/elasticsearch/plugins/current/ingest-attachment.html

> sudo bin/elasticsearch-plugin install ingest-attachment



# ちら裏

WindowsServerコンテナでmsiを使ってelasticsearchのイメージでもビルドしてみるか、と思ったのですが、
よくよく考えると、その用途だとzipで十分な気がして方向転換した結果がこの記事の内容。