注目の記事

[新機能]Amazon Elasticsearch Serviceがリリースされました!

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

AWS re:Invent 2015前にすごい新サービスが飛び出てきました!

なんと、フルマネージドなElasticsearchです。AWSでの全文検索サービスはCloudSearchがありますが、やはり全文検索システムとしてElasticsearchの人気が高い、ということでしょうね。「ElasticsearchはAWSのサービスではありません」と長年言われ続けていましたが、ついにサービスとして提供されました。

なお、Amazon Elasticsearch Serviceの略称はAmazon ESとのこと。若干ECSと紛らわしい感じもありますが、まぁそのままだと長いですからね。公式に略称が決まっているのは良いことです。

ということで、早速やってみました!

使ってみた

ドメインを作成する

AWS管理コンソールにログインすると、もうAmazon Elasticsearch Serviceコンソールが使えるようになっています!全リージョン同時リリースということで、もちろん東京リージョンでも使えます。早速[Get started]ボタンをクリックします。

Amazon_Elasticsearch_Service_Management_Console

[Create Elasticsearch domain]画面に遷移します。[Elasticsearch domain name]に適当な名前をつけて、[Next]ボタンをクリックします。

Amazon_Elasticsearch_Service_Management_Console 2

[Configure cluster]画面。インスタンスタイプやインスタンス数を設定します。[Enable dedicated master]をチェックすると、マスターノードはデータを持たず、マスターとしての役割のみ実行するようになります。[Enable zone awareness]をチェックすると、クラスタノードがAZ分散され可用性が確保されます。

Amazon_Elasticsearch_Service_Management_Console 3

ストレージはインスタンスストアかEBSが選択できます。また自動スナップショット機能も有しており、取得する時間を指定するだけで、勝手にスナップショットを取得してくれます。便利!

Amazon_Elasticsearch_Service_Management_Console 4

拡張オプションの設定。rest.action.multi.allow_explicit_indexはURL-based access controlの設定、indices.fielddata.cache.sizeはField dataの設定です。設定が完了したら[Next]ボタンをクリックします。

Amazon_Elasticsearch_Service_Management_Console 5

アクセスポリシーの設定。これがまたよく出来てます。[Select a template]ボタンを押すと...

Amazon_Elasticsearch_Service_Management_Console 6

以下のように、テンプレートが選択できます。[Allow access to the domain from specific IP(s)]をクリックすると...

Amazon_Elasticsearch_Service_Management_Console 7

こんな風にIPアドレスの入力が促されて...

Amazon_Elasticsearch_Service_Management_Console 8

以下のようにアクセスポリシーが出来上がります。便利!アクセスポリシーの設定が完了したら[Next]ボタンをクリックします。

Amazon_Elasticsearch_Service_Management_Console 9

最後に設定の確認画面が表示されます。問題なければ[Confirm and create]ボタンをクリックします。

Amazon_Elasticsearch_Service_Management_Console 10

すると、Domain statusが[Loading]となり...

Amazon_Elasticsearch_Service_Management_Console 11

はい、Activeになりました!お、Kibanaもセットになってます!

Amazon_Elasticsearch_Service_Management_Console 12

データを投入する

さて、とりあえずデータを投入したいと思います。今回はElasticsearchのドキュメントから参照されているテストデータを使いました。

上記で公開されているaccounts.jsonをbulkでPUTします。

$ curl -XPUT search-myes-hoge.ap-northeast-1.es.amazonaws.com/bank/account/_bulk --data-binary @accounts.json

すると、以下のようにデータが投入されたことがわかります。

Amazon_Elasticsearch_Service_Management_Console 13

Kibanaで表示させる

で、Amazon ESで最初から用意されているKibanaでデータを表示させてみます。管理コンソールのKibanaのリンクをクリックすると...

Amazon_Elasticsearch_Service_Management_Console 14

はい、普通にKibanaが使えます!ちゃんとKibana 4ですね。

Discover_-_Kibana_4_と_名称未設定フォルダ

Visualize_-_Kibana_4_と_名称未設定フォルダ

CloudWatch Logsを連携させる

なんと、今回の機能拡張では、ClodWatch LogsをAmazon ESに連携させる機能が増えています!早速使ってみましょう。

CloudWatch Logsの画面にアクセスし、Log Groupを選択して[Actions]をクリックすると、[Subscribe to Lambda/Amazon ES]というアクションが増えています!

CloudWatch_Management_Console

[Define filter]で、CloudWatch Logsに対するフィルターパターンを設定します。

CloudWatch_Management_Console 2

このパターンはすでに公式で用意されています。

  • VPC Flow Dashboard ... [version, account_id, interface_id, srcaddr, dstaddr, srcport, dstport, protocol, packets, bytes, start, end, action, log_status]
  • Lambda Dashboard ... [timestamp=*Z, request_id="*-*", event]
  • CloudTrail Dashboard ... JSON化されているのでパターン不要。

パターン設定画面の下部には、パターンをテストする画面も用意されています。問題なければ[Next]ボタンをクリック。

CloudWatch_Management_Console 4

次にLambda Functionを設定します。CloudWatch LogsからAmazon ESへのデータ連携はLambdaによって実現するんですね。ここでAmazon ESのドメインを設定します。また必要なIAM Roleを設定します。ここで設定するIAM RoleはLambda Roleになります。設定完了後、[Next]ボタンをクリック。

CloudWatch_Management_Console 5

最後に確認画面が表示されるので、問題なければ[Subscribe]ボタンをクリックします。

CloudWatch_Management_Console 6

フィルターが作成されました!

CloudWatch_Management_Console 7

すると、以下のようにAmazon ESにIndexが追加されます。ここで一つ問題。@timestampがlong型になっています...ここは最初からmappingを定義するなど、検討の余地がありそうですね。

Amazon_Elasticsearch_Service_Management_Console 16

当然Kibanaでも表示できます。以前VPC Flow LogsをElasticsearch + Kibana4で可視化するというブログ記事を書いたのですが、Amazon ESを使って簡単にできますね!

Visualize_-_Kibana_4

さいごに

Amazon ESはICU AnalysisKuromojiをサポートしているとのことなので、日本語ももちろん問題ありません。商用プラグインであるShieldMarvelは現時点ではサポートしておりませんが、代わりにIAMとCloudWatchで制御・監視が可能です。

これは、激アツなサービスですね!