2018年8月15日

REST API をPowershellで扱うための Elasticsearch のススメ (1)

前置き

この記事は、PowershellでREST APIを扱うためのコマンドレット Invoke-RestMethod を扱う記事と見せかけて、実は少し違います。
もともと、WindowsでElasticsearchを動かそうということでWebを探したところ、以下の記事がヒットしました。
https://qiita.com/math1101/items/311277789868ebd07835
これはこれでありがたかったのですが、Windows屋さんとしては、やはりcurlをダウンロードしてきて使うという時点で、「OS標準であるPowershellで同じことができるんですよ!」って思ってしまったので、そのフォロー記事ということでForkさせてみました。

Elasticsearchは簡単に導入できて、かつREST APIが利用できます。
ですので、いきなり本番サービスへ Invoke-RestMethod して使い方を覚えるより、Elasticsearchにあれこれ試してみて、使い方を把握すると便利ですよという趣旨のもと、本記事を公開いたします。

Elasticsearchとは

Elasticsearch公式:https://www.elastic.co/jp/

ElasticsearchはJsonで扱える全文検索エンジンです。
KibanaはそれをWebから確認するためのツールです。
本記事では詳細は扱わないので、触ってみて興味を持ったのであれば色々と調べてください。
Logstashと連携させて管理サーバーのログを取り込んで解析するとかメジャーな使い方のようです。

Elasticsearchの導入

以下、Windows 10にElasticsearchを導入して動かすところまでPowershellで書いてます。
PS1ファイルで保存してもいいですが、1回しか実施しないのでPowershellのプロンプトに直接コピペで張り付ければそれだけでOKです。
# ■前提:Java導入済み環境
Get-Item "Env:JAVA_HOME"
java.exe -version
# Elasticsearchに対応した Java が入っていなければ公式からダウンロード&セットアップ
# https://java.com/ja/download/

# ■作業ディレクトリー作成
$WorkDir = "C:\Elastic"
if ( -not (Test-Path -Path $WorkDir) ) { # フォルダチェック
 New-Item -path $WorkDir -ItemType "directory"
}

# ■作業ディレクトリーへ移動
Set-Location $WorkDir

# ■Elasticsearch
# ○製品ダウンロード:https://www.elastic.co/jp/
$URL = "https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.2.zip"
$FileName = Split-Path $URL -Leaf
$FileFullPath = Join-Path $WorkDir $FileName
Invoke-WebRequest -Uri $URL -Outfile $FileFullPath

# ○ZIP展開:Powershell 5.0以下なら素直にGUIから展開してね。
$FolderName = $FileName -replace "\.zip$", ""
Expand-Archive -Path $FileFullPath -DestinationPath $WorkDir -Force
Start "${FolderName}\bin"

# ■ツール:Kibina
# ○製品ダウンロード:https://www.elastic.co/jp/
$URL = "https://artifacts.elastic.co/downloads/kibana/kibana-6.3.2-windows-x86_64.zip"
$FileName = Split-Path $URL -Leaf
$FileFullPath = Join-Path $WorkDir $FileName
Invoke-WebRequest -Uri $URL -Outfile $FileFullPath

# ○ZIP展開:Powershell 5.0以下なら素直にGUIから展開してね。
$FolderName = $FileName -replace "\.zip$", ""
Expand-Archive -Path $FileFullPath -DestinationPath $WorkDir -Force
Start "${FolderName}\bin"
以上で「C:\Elastic」に「elasticsearch-6.3.2」と「kibana-6.3.2-windows-x86_64」が生成されます。
該当バージョンは本日時点の最新版なので採用しただけです。新しいバージョンが出ていればそちらを採用いただいて構いません。

Elasticsearchの起動

binフォルダーの中にある、製品名と同名のバッチファイルを起動すればそれだけで動きます。
設定等は一切なくていいので、動かなかったら多分Javaのせいじゃないですかね。64bit版入れてJAVA_HOME通してあれば普通は動きます。
※localhost宛なのでWindows Firewallは影響ないですが、アンチウィルスソフトがポートブロックするようであれば解除も忘れずに

以下の内容を「C:\Elastic\StartES.bat」」として保存しておけば、ワンクリックでElasticsearchとKibanaを両方起動できます。
なお、「bin\elasticsearch-service.bat」を使うとサービス登録もできるようなので、サーバー利用の場合には検討してください。
Set ScriptPath=%~dp0
Set ES_PATH=%ScriptPath%elasticsearch-6.3.2
Set KB_PATH=%ScriptPath%kibana-6.3.2-windows-x86_64

CD /D "%ES_PATH%\bin"
Start "Elasticsearch" /min ".\elasticsearch.bat"

REM Elasticsearch 起動までの待機:環境依存なので適当に
Timeout /T 60

CD /D "%KB_PATH%\bin"
Start "Kibana" /min ".\kibana.bat"

Echo 起動が完了しました。
REM pause

Elasticsearchの動作確認

簡単に動作確認しましょう。先ほどと同様、プロンプトへ以下を直接貼り付けます。
# ■動作確認
# ○バージョン確認
$Hostname = "localhost"
$PortNumber = 9200
$BaseURL = "http://${Hostname}:${PortNumber}"
$RequestURL="${BaseURL}/"

$JsonData = Invoke-RestMethod -Uri $RequestURL
ConvertTo-JSON $JsonData

# ○プラグイン確認
$RequestURL="${BaseURL}/_nodes/plugins"
$JsonData = Invoke-RestMethod -Uri $RequestURL
ConvertTo-JSON $JsonData -Depth 10
Json形式でバージョン情報、プラグイン情報が表示されればOKです。
ちゃんと内容を確認しなくても支障はないので、エラーにさえならなければ、なんか出たぞくらいに思ってください。

以上にて、GETメソッドによるInvoke-RestMethodの動作が確認できました。
結構長くなったので、先に挙げた記事の内容については次の記事にて記載します。

0 件のコメント:

コメントを投稿

TIPS:VSCodeで日本語化がうまくいかないとき

前置き Visual Studio Codeで拡張機能「 Japanese Language Pack for Visual Studio Code 」を入れたら日本語になりますよね。 でも、「 Remote Development 」で色々な環境を日本語化してると、偶に...