AWSにおけるElasticsearch

AWSにおけるElasticsearch

Elasticsearchとは

  • ElasticsearchはオープンソースのRESTful分散検索・分析エンジンであり、Apache Luceneを基盤として構築されています。
  • 2010 年のリリース以来、Elasticsearchはすぐに最も人気のある検索エンジンとなり、ログ分析、フルテキスト検索、セキュリティインテリジェンス、ビジネス分析、およびオペレーショナルインテリジェンスのユースケースに広く使用されています。

Elasticsearchの仕組み

  • API、あるいはLogstashやAmazon Kinesis Firehoseなどの取り込みツールを使用して、JSONドキュメントの形式でデータをElasticsearchに送信できます。
  • Elasticsearchは自動的に元のドキュメントを保存し、そのドキュメントへの検索可能な参照をクラスターのインデックスに追加します。その後、Elasticsearch APIを使用してドキュメントの検索と取得ができます。
  • オープンソースの可視化ツールであるKibanaとElasticsearchを併用してデータを可視化し、インタラクティブなダッシュボードを構築することもできます。

Elasticsearchの利用は無料?

  • はい。Elasticsearchは無料のオープンソースのソフトウェアです。
  • Elasticsearchはオンプレミス、Amazon EC2、またはAmazon Elasticsearch Serviceで実行できます。
  • オンプレミスまたはAmazon EC2のデプロイでは、Elasticsearchやその他の必要なソフトウェアのインストール、インフラストラクチャのプロビジョニング、およびクラスターの管理はお客様の責任となります。
  • 一方、Amazon Elasticsearch Serviceは完全マネージド型のサービスなので、ハードウェアのプロビジョニング、ソフトウェアのパッチ適用、障害復旧、バックアップ、モニタリングなどの時間のかかるクラスター管理タスクについて心配する必要はありません。

Elasticsearchの利点

  • 高性能
    • Elasticsearchは分散型であるため、大量のデータを並行して処理し、クエリに最適なものをすばやく見つけることができます。
  • 簡単なアプリケーション開発
    • Elasticsearchは、Java、Python、PHP、JavaScript、Node.js、Rubyなど、様々な言語をサポートしています。
  • ほぼリアルタイムのオペレーション
    • データの読み書きなどのElasticsearchオペレーションは、通常、完了までに 1 秒もかかりません。
    • これにより、アプリケーションのモニタリングや異常検出など、ほぼリアルタイムのユースケースにElasticsearchを使用することができます。
  • 無料ツールとプラグイン
    • Elasticsearchは、一般的な可視化およびレポート作成ツールであるKibanaと統合されています。
    • また、ソースデータを簡単に変換してElasticsearchクラスターにロードすることを可能にしつつ、BeatsとLogstashとの統合も提供します。
    • 言語アナライザや言語サジェスタなど、オープンソースのElasticsearchプラグインをいくつか使用して、アプリケーションに豊富な機能を追加することもできます。

AWSでのElasticsearchの開始方法

  • ステップ1:Amazon Elasticsearch Service (Amazon ES) ドメインの作成

    1. https://aws.amazon.comへアクセスし、Sign In to the Consoleを選択します。
    2. Analyticsの下にElasticsearch Serviceを選択します。
    3. Create a new domainを選択します。
    4. Deployment typeDevelopment and testingを選択します。
    5. Elasticsearch versionlatest versionを選択し、Nextを押下します。
    6. ドメイン名を入力します。
    7. Data nodesの下に、instance typet3.small.elasticsearchを選択し、Number of nodesでデフォルト値のままにします。
    8. 他の設定を飛ばしてNextを押下します。
    9. Network configurationPublic accessを選択します。
    10. Fine-grained access controlEnable fine-grained access controlを外します。
    11. Domain access policyCustom access policyを選択し、ドメインへアクセスできるようなIPアドレス若しくはIAM ARNを入力します。
    12. 他の設定を飛ばしてNextを押下します。
    13. 他のタグを飛ばしてNextを押下します。
    14. 設定したドメイン構成を確認した上Confirmを押下します 。なお、普通、新たなドメインの初期化は構成によって15分~30分かかる場合があります。
  • ステップ2:データのAmazon ESへのアップロード

    • ケース1:単一のドキュメントをアップロードする場合、以下の通りになります。
    • 以下のようにコマンドラインを利用します。
    • curl -XPUT 'domain-endpoint/users/_doc/1' -d '{"id": 1, "userName": "Nguyen Van A", "email": "test@gmail.com"}' -H 'Content-Type: application/json'
    • 以下のようにPostmanを利用します。
    • ケース2:複数のドキュメントをjsonファイルでアップロードする場合、以下のような情報でusers.jsonファイルを作成しておく必要があります。
    • { "index" : { "_index": "users", "_id" : "2" } }
      
      {"id": 2, "userName": "Nguyen Van B", "email": "test+1@gmail.com"}
      
      { "index" : { "_index": "users", "_id" : "3" } }
      
      {"id": 3, "userName": "Nguyen Van C", "email": "test+2@gmail.com"}
    • 以下のようにコマンドラインを利用します。
    • curl -XPOST 'domain-endpoint/_bulk' --data-binary @users.json -H 'Content-Type: application/json'
    • 以下のようにPostmanを利用します。
  • ステップ3:Amazon ESでのドキュメントの検索

    • usersドメインでデータをgmail.comキーワードで検索するため、以下の通りになります。
    • 以下のようにコマンドラインを利用します。
    • curl -XGET 'domain-endpoint/users/_search?q=gmail.com&pretty=true'
    • 以下のようにPostmanを利用します。
  • ステップ4:Amazon ESドメインの削除

    1. Amazon Elasticsearch Serviceへログインします。
    2. My domainsの下に、削除対象のドメインを選択します。
    3. Actions を選択し、Delete domainを選択します。

参照元:

https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-gsg.html