Elastic Cloud
Elasticsearch 5.0GA がリリースされたのに伴い、Elastic Cloud も5.0対応になっているので、早速利用してみました。
Elastic Cloud は、Elastic社が提供するクラウドのマネージドサービスで、商用プラグインであるX-Packも利用することができます。
登録後2週間は、トライアルとして、Memory:1GB/SSD:24GBのプランが無料で利用できます。
また、これまでは、Memory:SSD=1:16のサイズだったのですが、5.0リリースの少し前に、料金そのままで1:24のサイズに拡大されているので、お得になっています。
クラスタ作成
ユーザ登録後、ログインすると、以下のような画面が表示されるので、「Create Cluster」ボタンを押下します。
クラスタ作成の画面に遷移するので、必要事項を入力して、クラスタを作成します。
-
Cluster Size
- トライアル期間中は、Memory:1GB/SSD:24GBの最小サイズを指定して、好きなリージョンを選択します。
-
Region
- Elastic Cloud は、AWS上に構築されているので、データ投入したり、何らかの処理を行うインスタンスと、できるだけ同一リージョンにするのが良いでしょう。
-
High Availability
- 「1 data center」のタイプを選択します。信頼度に応じて、複数のデータセンターをまたぐクラスタを作成することも可能です。
-
Version
- 「5.0.0」になっていることを確認してください。
-
Scripting
- 5.0になって、Painless scriptingが利用できます。トライアル期間は「sandboxed」のタイプしか利用できないようです。
-
Plugins
- 利用するプラグインを選択します。
-
Name
- クラスタに名前を付けましょう。
他の項目は、デフォルトのままで良いと思います。
必要な項目を入力して、「Create」ボタンを押下すると、クラスタの生成が始まります。
約10秒程度でクラスタが作成され、完了すると、最初にクラスタを操作するための「elastic」ユーザのパスワードが表示されるので、それをメモしておきます。
クラスタが作成されると、以下のような画面が表示されます。
ユーザ設定
最初に、左メニューのConfigurationから、Kibanaを「enable」にしておいてください。
次に、左メニューのSecurityを押下します。
「Go to Kibana to make security changes.」のリンクを押下すると、Kibanaのログイン画面が開きます。
ここでは、ユーザ名:elastic、パスワード:クラスタ作成時に表示されたもの を入力します。
そうすると、ユーザ一覧画面が表示されます。
ここで、必要なユーザを登録します。
ここで登録したユーザ情報は、ElasticsearchへのRESTのアクセスでも必要になります。
アクセス確認
クラスタのトップページにある、「Endpoints」のリンクを押下してみます。
すると、認証ダイアログが表示されるので、そこで、登録したユーザのID/パスワードを入力します。
以下のようなJSONの内容がブラウザに表示されたら、接続成功です。
{
"name" : "instance-0000000000",
"cluster_name" : "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"cluster_uuid" : "xxxxxxxxxxxxxxxxxxxxxx",
"version" : {
"number" : "5.0.0",
"build_hash" : "253032b",
"build_date" : "2016-10-26T05:11:34.737Z",
"build_snapshot" : false,
"lucene_version" : "6.2.0"
},
"tagline" : "You Know, for Search"
}
接続に失敗すると、以下のようなエラーの内容が返ってきます。
{
"error": {
"root_cause": [
{
"type": "security_exception",
"reason": "action [cluster:monitor/main] requires authentication",
"header": {
"WWW-Authenticate": "Basic realm=\"security\" charset=\"UTF-8\""
}
}
],
"type": "security_exception",
"reason": "action [cluster:monitor/main] requires authentication",
"header": {
"WWW-Authenticate": "Basic realm=\"security\" charset=\"UTF-8\""
}
},
"status": 401
}
インデックスの作成・ドキュメントの登録
早速、インデックスを作成してみます。
ここでは、以下のページの shakespeare のデータを利用してみます。
インデックスの作成
curlコマンドを利用して作成していきますが、セキュリティの設定がされているので、ユーザID/パスワードの指定が必要になる点に注意してください。ここでは、上記で作成したユーザを利用します。
インデックス名は "shakespeare" とします。
$ curl --user takanorig -XPUT "https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:9243/shakespeare" -d '
{
"mappings" : {
"_default_" : {
"properties" : {
"speaker" : {"type": "string", "index" : "not_analyzed" },
"play_name" : {"type": "string", "index" : "not_analyzed" },
"line_id" : { "type" : "integer" },
"speech_number" : { "type" : "integer" }
}
}
}
}
';
Enter host password for user 'takanorig':
ドキュメント登録
上記、Elasticのページから、shakespeare.json をダウンロードし、Bulk APIを利用してデータをインポートします。
$ curl --user takanorig -XPOST 'https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:9243/shakespeare/_bulk?pretty' --data-binary @shakespeare.json
登録できたかどうか、確認してみます。
$ curl --user takanorig 'https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:9243/_cat/indices/shakespeare?v'
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open shakespeare johqlsUYT4WF0BhuZup_zw 5 1 111396 0 29mb 29mb
"docs.count" が 111396 となっており、インポートに成功しているようです。
さらに、検索してみます。以下のコマンドで、一覧を取得します(結果は一部だけ返ってきます)。
$ curl --user takanorig -XGET 'https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:9243/shakespeare/_search'
{
"took": 10,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 111396,
"max_score": 1.0,
"hits": [
{
"_index": "shakespeare",
"_type": "act",
"_id": "0",
"_score": 1.0,
"_source": {
"line_id": 1,
"play_name": "Henry IV",
"speech_number": "",
"line_number": "",
"speaker": "",
"text_entry": "ACT I"
}
},
{
"_index": "shakespeare",
"_type": "line",
"_id": "14",
"_score": 1.0,
"_source": {
"line_id": 15,
"play_name": "Henry IV",
"speech_number": 1,
"line_number": "1.1.12",
"speaker": "KING HENRY IV",
"text_entry": "Did lately meet in the intestine shock"
}
},
・・・
]
}
}
まとめ
環境構築をする必要なく、すぐにElasticの利用を開始できるのは便利ですね。
メモリとストレージのサイズの組み合わせや、冗長化のパターンは、Elastic社が推奨する構成になっています。
Kibanaとの連携はもちろん、Shield、Watcher、Marvelなどの商用のプラグインも利用可能になっており、OSSで構築した場合やAmazon Elasticsearch Serviceには無いメリットですね。
また、試してはいないですが、サイズ/プランの変更は、画面上で設定を変更するだけで可能なようです。
スナップショットも、30分ごとに保存されているようなので、データのバックアップも安心です。