2019.08.12

Amazon Elasticsearch Serviceの導入


本記事は、近年注目されている全文検索エンジンであるElasitcsearchを含むElastic Stack環境をAWSのサービスを利用して構築する記事です。
※ElasticStackの各種ソフトウェアの利用方法については言及しておりません。
 →後日別記事作成します

以下のユーザーを想定しています。
・ElasticStackの各サービスについて多少の知識がある
・AWSでVPC構築およびEC2インスタンスの作成ができる

Elastic Stack とは?

Elastic Stackは、Elastic社が提供するデータ収集・加工・検索・分析を行うOSSのソフトウェア群です。
・データ分析を行う Kibana
・データの保存および検索を行う Elasticsearch
・データ収集および加工を行う Logstash
・データ収集を行う Beats
の4つのソフトウェアで構成されています。

null

Elastic Stack環境を構築するには以下があります。

  • Amazon Elasticsearch Serviceを利用する
  • Elastic社のElastic Cloudを利用する
  • サーバーに自分でElastic Stack各種をインストールする

本記事では、AWSのマネージドサービスであるAmazon Elasticsearch Serviceを利用した構築方法をご紹介します。

AWS Elasitcisearch Service とは?

Amazon Elasticsearch Service (以下 AmazonES)は、Elasticsearchのマネージドサービスです。
サーバー管理/可用性構築/デプロイ等の手間を削減し、手軽にElasticsearchを利用することができるサービスです。
2019年8月現在では、Elasticsearch 6.7との互換になります。 (Elasticsearchの最新版は7.3)
※ただし、Elasticsearchとの完全互換ではありません。参照

(追記)AmazonESがバージョン7.1互換になりました!(2019/08/16)

また、AWSはElasticsearchのディストリビューションとして「Open Distro for Elasticsearch」を作成しており、 今後も活発に開発が進んでいくものと思われます。

料金について

公式サイトを参照してください。

無料利用枠に関しては以下の通りです。

AWS 無料利用枠を使用して、無料で Amazon Elasticsearch Service の使用を開始できます。 AWS 無料利用枠をご利用のお客様は、Amazon Elasticsearch Service で t2.micro.elasticsearch インスタンス最大 750 時間/月、およびオプションの Amazon EBS ストレージ (マグネティックまたは汎用) 10 GB/月を利用できます。無料利用枠の制限を超過した場合、使用した追加のリソースに対して Amazon Elasticsearch Service の料金が発生します。詳細は、提供規約をご覧ください。

と書いてあるのですが、AmazonESのインスタンスタイプの最小は、t2.small.elasticsearchです。
こちらが無料枠ですので個人使用の場合はt2.smallをお使いください。

VPCアクセスについて

AmazonESでは、ElasticsearchへのアクセスとしてパブリックアクセスVPCアクセスを提供しています。
「パブリックアクセス」は、エンドポイントに対してインターネットを経由してどこからでもアクセス可能な状態です。
「VPCアクセス」は、エンドポイントに対して同じVPC内からのアクセスのみにアクセス可能な状態です。

null

vpcアクセスを使用すると以下のような利点があります。

  • VPC内からの接続しか許容しないため、セキュアにElasticsearchの運用が可能
  • 通信がVPC内で完結しインターネットを経由しないため、通信速度の向上が可能

VPCアクセスを利用したElasticStack環境を構築手順を以降で紹介していきます。

AWS Elasitcisearch Service の構築手順

それではAmazonESの構築を始めましょう。
AWSのコンソール画面の分析ツールの一覧からElasticsearch Serviceを選択します。

null

AmazonESを1つも構築していない状態でコンソールにアクセスすると以下の画面が表示されます。
「新しいドメインの作成」から構築手順を進めていきます。

null

Step 1: デプロイタイプの選択

null

Step1では、Elasticsearch構築時のデプロイタイプおよびElasticsearchのバージョンを設定します。
以下設定値に関して説明します。

null

デプロイタイプの違いは冗長化の構成の違いになります。 カスタムで進めていきます。
選択によってStep2の設定時に多少選択項目が変わります。カスタムはすべて設定可能です。
テストで構築する場合の最小構成は、「開発およびテスト」「カスタム」どちらでも構築可能です。

バージョンは利用するElasticsearchのバージョンです。「6.7」で進めていきます。

Step 2: クラスターの設定

null

Step2では、Elasticsearchを利用する際のインスタンス関連の設定を行います。
以下設定値に関して説明します。

null

ドメインンの設定では、Elasticsearchを利用する際のドメイン名を設定します。

データのインスタンの設定では、Elasticsearchを利用する際のインスタンスサイズやAZの設定を行います。
最小構成の、 AZシングル構成「1-AZ」 インスタンスは「t2.medium」「1」台で作成します。

※無料枠はt2.smallですので、お試しの場合はそちらをお使いください。

null

専用マスターインスタンスと記載されていますが、公式ドキュメントによれば「専用マスターノード」のことだと思われます。
最小構成では不要なためチェックを外します。
詳細については公式ドキュメントをご確認ください。

ストレージタイプはデフォルト設定である「EBS」の「汎用(SSD)」の「10」GBを設定します。

null

暗号化は必要であればチェックを入れてください。
暗号化設定はドメイン作成後は変更できないことに注意してください。

スナップショットの設定は、1日1回実施されるスナップショット開始タイミングをUTCで設定します。

詳細設定はデフォルトのままで問題ありません。

Step 3: アクセスの設定

null

Step3では、Elasticsearchへのアクセスに関連する設定を行います。
以下設定値に関して説明します。

null

ネットワーク構成では前述した「VPCアクセス」「パブリックアクセス」を選択します。
VPCアクセスの場合には対応するVPC/サブネット/セキュリティグループを設定します。
ここでは「VPCアクセス」を選択してすすめます。 
VPC等の項目は作成済みのもで、適切に選択してください。
ElasticsearchへはHTTPアクセスのため、セキュリティグループは80または443portを開放しておきましょう。
ここで選択したVPCに後ほどEC2インスタンスを構築します。

null

Kibana認証は、Kibanaを利用する際にAmazon Cognito認証を実施する際に有効化します。
今回はチェックせずに進めます。

アクセスポリシーはJSON形式で設定します。
今回は「IAM認証情報を使用した署名リクエストを要求しない」を選択し設定されたJSONまま使います。

Step 4: 確認

null

最後確認画面では、入力値が正しいかを確認し、「確認」を押下します。

起動確認

null

「確認」後、Elasticsearchインスタンスの構築が開始されます。
構築には10分ほどかかり、その間はElasticSearchへはアクセスできません。

構築完了後、ドメインのステータスアクティブになります。

null

構築完了後、「VPCエンドポイント」「Kibana」に、それぞれURLが表示されます。
こちらは各エンドポイントへのアクセスURLなのですが、前述の通り「VPCアクセス」設定をしているため、VPC内からしかアクセスができません。

以降では、以下の内容を説明いたします。

  • 同じVPC内のEC2インスタンスからElasticsearchへ接続する方法
  • 同じVPC内のEC2インスタンスからLogstashを実行し、Elasticsearchへデータ登録をする方法
  • Kibanaのエンドポイントへアクセスする方法 →後日別記事として作成します

EC2インスタンスからElasticsearchへ接続する

※Elasticsearchと同じVPCにEC2インスタンスが構築されている前提で進めます。

CURLによる接続

EC2インスタンスへSSHログイン後、下記CURLを実行します。

CURL -XGET {ElasticsearchのエンドポイントURL}

JSON形式でElasticsearchの情報が返却されれば接続成功です。
ローカル環境や他VPCからではCURLコマンドは接続できません。

null

EC2インスタンスのLogstashからElasticsearchに接続する

構築したElasticsearchに対して、Logstashを用いてデータを投入する際の設定ファイルの記載について説明します。
詳細に関しては公式ドキュメントをご確認ください。
また、Logstashの導入および使い方については別記事をご覧ください。

Logstashの出力プラグインにElasticsearchがデフォルトで存在するのですが、AmazonESへはこちらの出力プラグインからで接続できません。
logstash-output-amazon_esプラグインをインストールして接続する必要があります。

Logstashにamazon_esのプラグイン導入

※Logstashは既にインストールされている前提で進めます。

下記コマンドを実行してプラグインのインストールを実施してます。

$ sudo /usr/share/logstash/bin/logstash-plugin install logstash-output-amazon_es

OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N
Validating logstash-output-amazon_es
Found logstash-output-amazon_es (6.4.1), but was for platform x86_64-linux
Installing logstash-output-amazon_es
Installation successful

Logstashの設定ファイルの記載

logstash.conf
・
・ inputおよびfilterは省略
・

output {
    amazon_es {
        hosts => ["foo.us-east-1.es.amazonaws.com"]
        region => "us-east-1"
        aws_access_key_id => 'ACCESS_KEY'
        aws_secret_access_key => 'SECRET_KEY'
        index => "production-logs-%{+YYYY.MM.dd}"
    }
}

outputにamazon_esを用いて設定します。
通常のElasticsearchへのoutputと同様にhostsindexがあります。
異なる点として、region aws_access_key_id aws_secret_access_keyを追加で記載します。。

regionにはAmazonoESが存在するリージョンを記載します。
aws_access_key_id aws_secret_access_keyにはAmazonESへ接続する実行ユーザーのキーを記載します。 実行ユーザーの作成方法に関しては、以下「(参考)IAMユーザーの作成」をご確認ください。

これらの設定が正しく設定されていれば、EC2インスタンスのLogstashからAmazonESへのデータ投入が可能になります。

終わりに

以上ElasticStack環境をAWSで構築する際の方法について記事を記載させていただきました。
Elasticsearchは検索が非常に早く、個人的にも気に入っているため今後も使い方の記事を書こうかなと思います。

情報不足や誤りがありましたらコメントでご指摘いただければ幸いです。
ありがとうございました(#^.^#)

(参考)IAMユーザーの作成

上記LogstashからAmazonESへ接続するためにIAMユーザーを作成手順を以下に記載します。

null

セキュリティ、ID、およびコンプライアンスの一覧から、IAMを選択してユーザー作成を実施します。

null


ユーザー名はAmazonESにアクセスする用のユーザーであることがわかる名前と、
アクセスの種類で、「プログラムによるアクセス」を選択します。

null


アクセス許可設定でAmazonESへの接続許可ポリシーであるAmazonESFullAccessを選択します。

null


タグは任意で付与してください。

null


設定情報に間違いがないか確認します。

null


ユーザーが作成されました。
この画面に表示されているアクセスキーIDシークレットアクセスキーをLogstashの設定で用います。


<!-- Font Awesome Free 5.0.13 by @fontawesome - https://fontawesome.com --><!-- License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) -->