Amazon Elasticsearch Service で Elasticsearch 6.0 が利用可能になりました

ども、藤本です。

現地時間 2017/12/06、Amazon Elasticsearch Service で Elasticsearch 6.0、Kibana 6.0 を利用可能になりました。

怒涛の新サービス、新機能リリースラッシュの AWS re:Invent 2017 が先週行われ、リリースも落ち着くかと思いきや、大きなアップデートがありました。さすが、AWS さん。

概要

Amazon Elasticsearch Service は Elasticsearch、Kibana の AWSマネージドサービスです。クラスタ・ノードを AWS が運用・管理してくれ、数クリックで Elasticsearch、Kibana のクラスタをプロビジョニングでき、ノードで障害が発生すればユーザーは何もしなくても復旧します。

今まで Amazon Elasticsearch Service は下記バージョンの Elasticsearch を利用可能でした。

  • 1.5
  • 2.3
  • 5.1
  • 5.3
  • 5.5

それが今回のアップデートで 6.0 を利用可能になりました。Elasticsearch、Kibana を含む Elastic Stack 6.0 がリリースされたのが 11/14 ですので、一ヶ月と待たずのリリースとなりました。早い!Amazon Elasticsearch Service 利用者は嬉しいですね!

Elasticsearch 6.0 & Kibana 6.0

リリースページを見ながら、アップデート内容を見てみましょう。

新機能

ディスクスペースの効率化

Elasticsearch はドキュメント指向の NoSQL です。柔軟なデータを投入することができます。同じインデックス、同じタイプのドキュメント間でもデータを持たないフィールドがあるケースは往々にしてあります。Elasticsearch 5系まではフィールドを持たないドキュメントでもそのディスクスペースは予約していました。それによりデータはないけどディスクスペースを消費されていました。それが今回のアップデートによりディスクスペースの予約はしない実装となり、ディスクスペースをより効率的に利用可能となりました。

_allフィールドの無効化

これはアップデートというか Breaking Change ですね。今まで Elasticsearch にインデキシングされたドキュメントはデフォルトでは_allフィールドが生成され、全てのフィールドのデータが定義されていました。それによりディスクスペースを大きく利用していましたが、_allフィールドが削除されました。

インデックスソートによるパフォーマンス向上

インデキシングレベルでソートするフィールドを指定可能となり、そのフィールドに対する検索パフォーマンスが向上しました。以下のようなインデックス定義が可能となりました。

PUT scores
{
    "settings" : {
        "index" : {
            "sort.field" : "points", 
            "sort.order" : "desc" 
        }
    }
}

1つの検索におけるシャードリクエスト数を制限できるようになりました

Elasticsearch は 1つの検索 API でも、各シャードに対して複数のクエリが投げられます。今まで複雑な検索 API を投げた時に各シャードに大量なクエリが発行され、1つの検索 API の負荷で他の検索 API のパフォーマンスに影響を及ぼすことがありました。今回のアップデートにより 1つの検索 API 当たりに同時実行されるシャード当たりのクエリ数を制限可能となり、他の API への影響を抑えることが可能となりました。

Kibana 6.0

Kibana の 6.0 を利用可能となりました。Kibana 6.0 では X-Pack との連携機能が多く、Amazon Elasticsearch Service の Kibana 6.0 で利用できる新機能はダッシュボードのフルスクリーンモードぐらいかな。また Kibana のクエリ言語Kueryが利用可能となりました。

Breaking Changes

Elasticsearch 5系 → 6系で多くの Breaking Changes(機能の非推奨化や、廃止や、インタフェースの変更)がありました。以前下記エントリにまとめましたのでご参考にいただければと思います。

Elasticsearch 6 を利用する前に把握しておいた方がよさそうなこと

やってみた

プロビジョニング方法はプルダウンに 6.0 が追加されただけなので今まで変わりません。でもやってみます。

マネジメントコンソールから Amazon Elasticsearch Service のサービスページに遷移します。

Create a new domain をクリックします。

バージョン設定です。

Elasticsearch version に 6.0 が追加されました。

クラスタ設定です。今までと変わりません。デフォルト設定のまま次へ遷移します。

アクセス制御設定です。今までと変わりません。今回はテスト用途だけなので Public(つまり VPC 外)に配置し、IPアドレス制限だけ行います。

確認画面です。設定確認して、作成します。

クラスタの作成が開始されます。

クラスタが作成されるまでに 10分ほどかかります。

アクセスしてみます。

$ curl https://search-es6-xxxxxxxxxxxxxxxx.ap-northeast-1.es.amazonaws.com
{
  "name" : "_zljf5p",
  "cluster_name" : "xxxxxxxxxxxx:es6",
  "cluster_uuid" : "_Qjw_y0MSP-Lr35EXMIImw",
  "version" : {
    "number" : "6.0.0",
    "build_hash" : "8f0685b",
    "build_date" : "2017-11-14T19:47:35.686Z",
    "build_snapshot" : false,
    "lucene_version" : "7.0.1",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

バージョン 6.0、Lucene のバージョンは 7系になりました。

次にWeb ブラウザを立ち上げて、Kibana にアクセスします。

アクセスできました。バージョン 6.0 ですね。レイアウトは同じですが、色合いが落ち着きました。

まとめ

いかがでしょうか? 私もまだあまりアップデートを追えていないですが、Amazon Elasticsearch Service に Elasticsearch & Kibana の新しいメジャーバージョンがリリースされました。これから一つ一つの新機能を試してみて、ブログ化したいと思います。