これは「初老丸の独り Advent calendar 2015」の四日目の記事です。
tl;dr
ちゃんと Elasticsearch そのものをを使えていないこともあるが、Amazon Elasticsearch Service に入門したのでメモ。
うんちく
参考
Elasticsearch とは
上記の資料の三ページ目に簡潔に纏まっているのが解りやすいが、抜粋させて頂く。
- スキーマフリー
- 分散ドキュメントストア
- REST & API
- インストールが簡単
- Java で実装されている
Amazon Elasticserch Service とは
上記の Elasticsearch が AWS 上にマネージドサービスとして提供されている、従来 Elasticsearch は AWS のサービスと間違えられることがあったか無かったは、今となっては分からないものの名実ともに AWS のサービスとなったことでより手軽に利用できるようになったのではと考えている。
で、Amazon Elasticsearch Service(以下、Amazon ES)の特徴としては…
- 簡単デプロイ
- 管理(可用性の確保、パッチ管理、障害検出、ノードの交換、バックアップ、モニタリング等)は AWS にある程度お任せ
- CloudWatch と連携した高いスケーラビリティ
- Kibana 入り(はじめから Kibana 入ってます)
- IAM ポリシーによって安全にクラスタにアクセス出来る
Amazon ES のサポートされている API
サポートされている API に関しては以下に記載されている。
Supported Amazon ES Operations – Amazon Elasticsearch Service
一般的に利用する API はサポートされているように見える。ただし、プラグイン系のエンドポイントについてはサポートされているプラグインに依存するので事前に確認しておく必要がありそう。
Amazon ES のサポートされているプラグイン
以下のプラグインが導入済みとのこと。
オープンソースなプラグインをどのようにインストールするのかドキュメントをザクッとななめ読みしたところ読み取ることができなかった…もし、その方法があるなら教えて欲しい…。
Amazon ES のスナップショット
- 自動的にスナップショットを取得(スナップショットは時間指定可能)
- 14 日間保存される
- Elasticsearch の Snapshot API を利用して S3 バケットに保存することが可能
- S3 に保存されたスナップショットを利用して Amazon ES や自分で管理している Elasticsearch へレストアすることができる
で、なんぼ?
以下の要素で課金される。
- Elasticsearch インスタンス
- Amazon EBS ストレージ
- データ転送量
詳細はこちらの料金表をご覧ください…。
お楽しみの無料枠は以下の通り。
AWS 無料利用枠をご利用のお客様は、Amazon Elasticsearch Service で単一アベイラビリティーゾーンの t2.micro.elasticsearch インスタンス最大 750 時間/月、およびオプションの Amazon EBS ストレージ (マグネティックまたは汎用) 10 GB/月を利用できます。
とのことなので、今回はこの無料枠の範囲で試してみたい。
Amazon ES クラスタ構築入門
まずはドメインを作るところから始める
Amazon Elasticsearch Service(以下、Amazon ES)はクラスタをドメインという名前で管理する。1 クラスタ = 1 ドメインと覚えておくことにする。
Elasticsearch インスタンスタイプやドメインのノード数、ストレージを設定する
インスタンスタイプは以下の通り。(※こちらより抜粋。)
- T2 開発およびテスト(dedicated masterノードにも適してる)
- R3 Read-heavyもしくは複雑なクエリ(例えばnested aggregations)
- I2 High-write、Large-scaleなデータの格納
- M3 一般的なreadとwrite
また、Enable dedicated master と Enable zone awareness については以下の通り。
- Enable dedicated master はクラスタ管理用のマスタノードを構築する(マスタノードにはデータは保持せずクラスタ管理のみを受け持つ、最低三つのマスタノードの指定を推奨、スプリットブレインを回避する為にマスタノードは常に奇数を設定すること)
- Enable zone awareness はリージョン内の複数の AZ にノードを分散して構築する
- T2 シリーズ以外は Instance Store を選択することができる
- EBS は Magnetic / GP2 / PIOPS から選択することが出来る
- EBS のサイズは最低 10GB から最大 35GB まで指定することが出来る
- スナップショットの時間を指定する(今回は特に指定せずデフォルトのまま)
アクセスポリシーの設定
IAM ユーザーや IP アドレスを設定してアクセスのポリシーを設定する。
今回は接続元の IP を設定するので以下のように IP アドレスを入力する。
IP アドレスを入力すると以下のような JSON が自動生成される。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "es:*", "Condition": { "IpAddress": { "aws:SourceIp": [ "xxx.xxx.xx.xxx" ] } }, "Resource": "arn:aws:es:ap-northeast-1:12345678901234567890:domain/oreno-es/*" } ] }
設定を確認してクラスタを作成する
最後に設定を確認してクラスタの作成を開始する。
10 分程お待ちください…
クラスタ作成完了
10 分後….クラスタの出来上がり。
エンドポイントや Domain ARN や Kibana の URL も合わせて表示されている。
Kibana にアクセスする
Kibana にアクセスしてみる。
当然、インデックスが無いので何の面白みも無い。
エンドポイントにアクセスする
一応 curl を利用してエンドポイントにもアクセスする。
$ curl https://search-oreno-es-xxxxxxxxxxxxxxxxxxxxxxxxx.ap-northeast-1.es.amazonaws.com/ { "status" : 200, "name" : "Steel Spider", "cluster_name" : "12345678901234567890:oreno-es", "version" : { "number" : "1.5.2", "build_hash" : "62ff9868b4c8a0c45860bebb259e21980778ab1c", "build_timestamp" : "2015-04-27T09:21:06Z", "build_snapshot" : false, "lucene_version" : "4.10.4" }, "tagline" : "You Know, for Search" }
Amazon ES をちょっと使ってみる
PM2.5 のデータを突っ込んでみる
以下を利用して Amazon ES に昨日の九州地方の各観測地点の PM2.5 データを突っ込んでみる。
詳しい使い方は README を。
突っ込んだら Kibana で可視化する
- まずは Index の設定
- 次に Search オブジェクトを作る
観測地点毎に見たいので 205 地点分の Search オブジェクトを一気に作成。
$ cd kibana $ kibana_search.rb.sample kibana_search.rb $ sed -i 's/YOUR_AMAZON_ES_ENDPOINT/search-xxxxxxxxxxxxxxxxxxxxxxxx.ap-northeast-1.es.amazonaws.com/g' kibana_search.rb $ ruby kibana_search.rb
- そして Visualize
Visualize オブジェクトも 205 地点分を一気に作成。
$ cd kibana $ mv kibana_visualize.rb.sample kibana_visualize.rb $ sed -i 's/YOUR_AMAZON_ES_ENDPOINT/search-xxxxxxxxxxxxxxxxxxxxxxxx.ap-northeast-1.es.amazonaws.com/g' kibana_visualize.rb $ ruby kibana_visualize.rb
- 最後に Dashiboard
ポチポチ…
一応、完成。
PM2.5 の観測データが無い観測地点もあるので歯抜けな状態になっているのはすいません。
ということで
Amazon ES は…
- はじめから Kibana も付いてる、簡単セットアップ Elasticsearch
- お手軽に運用出来るかもしれない Elasticsearch
- 各 AWS サービスともシームレスに連携出来そうな Elasticsearch
だと思うので引き続き触ってみたいと思う。
次回は…
以下をやってみる。
- S3 へのスナップショット、レストア
- CloudWatch Logs との連携
- Fluentd との連携
ということで、2015 年のうちにやっておきたい Amazon Elasticsearch Service 入門の第一回目でした。
元記事はこちら
「(ショロカレ 4 日目)2015 年のうちにやっておきたい Amazon Elasticsearch Service 入門」