Skip to content

Instantly share code, notes, and snippets.

@suzuken
Created November 27, 2015 02:24
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save suzuken/a31386fb440d06466cbb to your computer and use it in GitHub Desktop.
Save suzuken/a31386fb440d06466cbb to your computer and use it in GitHub Desktop.
Amazon Elasticsearch Serviceに関する調査メモ

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で。

    single document

    $ 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},}'

    multiple document

    $ 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がずっと高い
          • ノード追加を検討する
    • CloudTrailでAmazon ESへのオペレーションのログもとれる
    • LogStash, s3からのinputプラグインがあるらしい s3
      • outputをelasticsearchにしてs3からbulk importする例が紹介されている
    • コスト勘定のためのtagもつかえる
  • Amazon Elasticsearch Service Limits - Amazon Elasticsearch Service

  • Amazon ES Configuration API Reference - Amazon Elasticsearch Service

  • 他の制限とか

@suzuken
Copy link
Author

suzuken commented Nov 27, 2015

よくある質問 - Amazon Elasticsearch Service(AWS クラウドで Elasticsearch を簡単操作) | アマゾン ウェブ サービス(AWS 日本語)

サポートしている API は、/_alias、/_aliases、/_all、/_analyze、/_bulk、/_cat、/_cluster/health、/_cluster/settings、/_cluster/stats、/_count、/_flush、/_mapping、/_mget、/_msearch、/_nodes、/_plugin/kibana、/_plugin/kibana3、/_percolate、/_refresh、/_search、/_snapshot、/_stats、/status、/_template です。

まあ大体使える

現在、Amazon Elasticsearch Service は Elasticsearch 1.5.2 をサポートしています。

まだ2系は来てない

@suzuken
Copy link
Author

suzuken commented Nov 27, 2015

Handling AWS Service Errors - Amazon Elasticsearch Service

  • clusterがredになったらrestoreをmanualでやること。これは普通のESクラスタと同様。
  • ノードの状態が悪い場合、例えばノードをterminateしたらどういう挙動になるのかは確認すべき。ASGのように勝手に新しいノードが立ち上がるのだろうか。
  • replica nodeを少なくとも1つというあたりも普通のESクラスタと同様。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment