VPCにあるAmazon Elasticsearch ServiceのKibanaだけPublicにするもう一つの方法

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

ども、藤本です。

先日、Amazon Elasticsearch Service が VPC に対応し、今までできなかった Kibana だけをユーザーに開放するということが可能となりました。

VPCにあるAmazon Elasticsearch ServiceにALBを追加してKibanaだけPublicにする

個人的には ↓ が大変そうに感じたので別の方法を考えてみました。

ESのPrivate IPは可変なので、定期的にALBのターゲットとなるPrivate IPをメンテナンスする必要があります。CloudWatch EventsのスケジュールからのLambdaの実行やEC2でのcronジョブなどを検討しましょう。AWS CLIでは、以下のようにPrivate IP一覧を取得できます。

構成

構成はすごくシンプルです。Kibana を EC2 上に個別に立てて、Amazon Elasticsearch Service を参照します。

esvpc-alb02

こうすることのメリットはいくつかあります。

  • Kibana から参照する Elasticsearch はドメイン指定可能なので ALB バージョンと違って IPアドレス変更時の切り替えの実装が不要
  • ユーザーは確実に Kibana しかアクセスできない(ALB の制御のようにパスで制御しなくてよい)
  • Kibana の処理負荷を Amazon Elasticsearch Service から取り除くことができ、Amazon Elasticsearch Service の負荷を緩和できる

その代わりに Kibana 部分は Amazon Elasticsearch Service のマネージド運用を使わないことになりますので、デメリットもあります。

  • Kibana の稼働率が落ちる?
    • EC2 の OSやサービスを監視しないといけないため、運用でカバーする必要ある
    • ただシステムの性質上では、Elasticsearch と比べて、Kibana の方が可用性が低いことが多い
    • ステートフルなデータは Elasticsearch 側に持つので Auto Headling により自動復旧を実装することで運用負荷を下げ、稼働率を上げることも可能
    • Kibana のダウンが許されないのであれば、最初に紹介したエントリの方法がいい
  • Kibana の EC2 のコストがかかる?
    • Kibana はサーバサイドの負荷はそこまで大きくない
    • ALB と同等コストの t2.small でも動作する(もちろんデータ量や、ダッシュボードのボリュームによる)
    • 踏み台サーバなどと同居したり、利用しない時は Kibana の EC2 を停止したりすることでコストを抑えることができる

いかがでしょうか?個人的にはありかなと思っています。

試してみた

それでは早速試してみましょう。

Amazon Elasticsearch Service ドメインの起動

Amazon Elasticsearch Service のドメインを VPC 対応で起動します。起動手順は下記エントリをご参照ください。

Amazon Elasticsearch ServiceがVPCをサポートしました

Kibana の構築

EC2 は Amazon Linux の AMI を使って、t2.micro で起動しました。セキュリティグループからアクセス元環境から 5601 でのアクセスを許可してください。

Kibana のインストール

Elasticsearch と Kibana はバージョンの組み合わせが 5系ではマイナーバージョンまで同じである必要があります。今回は Elasticsearch を 5.5(5.5.2)で起動したので、Kibana も合わせて 5.5.2 をインストールします。

$ echo '[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md' | sudo tee /etc/yum.repos.d/elastic.repo

$ sudo yum install -y kibana-5.5.2

Kibana の設定

Kibana の設定ファイルを変更し、参照する Elasticsearch の URL と、バインドする IPアドレスを変更します。Elasticsearch の URL は作成した Elasticsearch ドメインの VPC endpoint をご参照ください。

$ echo 'server.host: 0.0.0.0
elasticsearch.url: "http://vpc-xxxxx-xxxxxxxxxxxxxx.ap-northeast-1.es.amazonaws.com:80"' | sudo tee -a /etc/kibana/kibana.yml

設定したら、Kibana を起動します。

$ sudo /etc/init.d/kibana start
kibana started

動作確認

それでは Web ブラウザを起動してアクセスしてみましょう。

http://<Kibana のパブリックIPアドレス>:5601/

Kibana

うん、繋がりました。

Kibana 2

t2.micro で動かしていますが、グラフ描画もストレスはないです。

まとめ

いかがでしょうか。どなたかの参考になれば幸いです。