New – Amazon Elasticsearch Service | AWS Official Blog
Getting Started with Amazon ES Domains - Amazon Elasticsearch Service
-
EphemeralかEBSか選択できる
-
snapshot設定もできる
-
node増やしても勝手にスケールする。これは楽
-
URL-based access control を設定できる。要望合ったんだろうな。
-
cliからももちろん全部できる。これはいいな。IAM設定どうするんだろ。
$ aws es create-elasticsearch-domain --domain-name movies --elasticsearch-cluster-config InstanceType=m3.xlarge.elasticsearch,InstanceCount=10 --ebs-options EBSEnabled=true,VolumeType=io1,VolumeSize=100,Iops=1000 $ aws es describe-elasticsearch-domain --domain movies
-
ElasticsearchのアクションごとにIAM設定できるとか大分いいな。これあればユーザごとに参照だけ、とかやりやすい。
$ aws es update-elasticsearch-domain-config --endpoint https://es.us-west-1.amazonaws.com --domain-name movies --access-policies '{"Version": "2012-10-17", "Statement": [{"Action": "es:ESHttp*","Principal":"*","Effect": "Allow", "Condition": {"IpAddress":{"aws:SourceIp":["192.0.2.0/32"]}}}]}"
-
ドキュメント追加とかはHTTPで。
$ curl -XPUT search-movies-4f3nw7eiia2xiynjr55a2nao2y.us-west-1.es.amazonaws.com/movies/movie/tt0116996 -d '{"directors" : ["Tim Burton"],"genres" : ["Comedy","Sci-Fi"],"plot" : "The Earth is invaded by Martians with irresistible weapons and a cruel sense of humor.","title" : "Mars Attacks!","actors" : ["Jack Nicholson","Pierce Brosnan","Sarah Jessica Parker"],"year" : 1996},}'
$ curl -XPOST 'http://search-movies-4f3nw7eiia2xiynjr55a2nao2y.us-west-1.es.amazonaws.com/_bulk' --data-binary @bulk_movies.json
-
既存のクラスタからAmazon ESに移すにはrestoreつかえばいいとのこと。
-
検索も普通にGETで。
$ curl -XGET 'search-movies-4f3nw7eiia2xiynjr55a2nao2y.us-west-1.es.amazonaws.com/movies/_search?q=nightmare'
-
削除もcliで
$ aws es delete-elasticsearch-domain --endpoint https://es.us-west-1.amazonaws.com --domain-name movies
実際に使う場合にはaccess policyはcloud formationテンプレートみたいに管理するのがいいな。 作成したらKibanaとエンドポイントできるのは大分便利
-
Managing Amazon ES Domains - Amazon Elasticsearch Service
- dedicated master nodeを本番だと3台用意すること、とある
- m3.mediumとかでおk
- indexのbackupは、とりあえずdailyのがある。snapshot機能をつかっている。
- Zone Awarenessはazまたいでクラスタ構成してくれる機能
- replica shardについて別のazに持って行ってくれる。これは便利だ。shardのallocationを自分で制御するとめんどうだし。
- Zone Awarenessつかうなら偶数台のデータノードにすること。
- もちろんテスト用などの1台しかノードのないクラスタのためには必要ない
- manual snapshotについて
- s3のバケット作成やIAM設定は自分でやる必要がある
- それ以外は普通のESクラスタと変わらない
curl -XPOST 'http://<Elasticsearch_domain_endpoint>/_snapshot/snapshot_repository/snapshot_name'
- リストアも同様
curl -XPOST 'http://<Elasticsearch_domain_endpoint>/_snapshot/snapshot_repository/snapshot_name/_restore'
- ただしES全般にいえることだが、IAMによるアクセス制限をしている場合にはただcurlするだけではなくてv4での認証が必要
- 監視はCloudWatchをつかう
- Amazon ESからCloudWatchへのput metricsの権限は勝手に付与されているっぽい(ユーザが追加する必要はない
- Amazon ESのdashboardにあるメトリクスたちが使えるもの、と思って良さそう
- クラスタでの統合値なので、各インスタンスのJVMの様子、とかまではとれない
- dedicated master nodesは別メトリクスでとれる
- EBS使ってる場合はEBSのメトリクスもとれる
- 用途にもよるけど、多分一般的な指針としては
- ClusterStatus.redが続いたらshard壊れてる or diskたりない or クラスタとして何らかの障害
- ノード追加を検討する
- JVMMemoryPressureがずっと高い
- ノード追加を検討する
- ClusterStatus.redが続いたらshard壊れてる or diskたりない or クラスタとして何らかの障害
- CloudTrailでAmazon ESへのオペレーションのログもとれる
- LogStash, s3からのinputプラグインがあるらしい s3
- outputをelasticsearchにしてs3からbulk importする例が紹介されている
- コスト勘定のためのtagもつかえる
- dedicated master nodeを本番だと3台用意すること、とある
-
Amazon Elasticsearch Service Limits - Amazon Elasticsearch Service
- kuromojiは入っているらしい
- ICUプラグインもはいっている
- tcp transportはサポートしない
- Transport
- つまりHTTPのみ対応するということ
-
Amazon ES Configuration API Reference - Amazon Elasticsearch Service
- Amazon ESが提供している独自Rest API。各種sdkからもつかえる。
- Managing Amazon ES Domains - Amazon Elasticsearch Service にあるtaggingまわりはこれで制御できる
-
他の制限とか
- Amazon Elasticsearch ServiceとFoundの比較 | Developers.IO
- elasticsearch-headとかMarvelが使えないというのはある
- shardの配置とか考えたくない、という用途ではあるのである意味割り切っているとも言える
- あと辞書追加ができない。
Handling AWS Service Errors - Amazon Elasticsearch Service