VPCにあるAmazon Elasticsearch ServiceのKibanaだけPublicにするもう一つの方法
ども、藤本です。
先日、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 を参照します。
こうすることのメリットはいくつかあります。
- 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 対応で起動します。起動手順は下記エントリをご参照ください。
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://:5601/
うん、繋がりました。
t2.micro で動かしていますが、グラフ描画もストレスはないです。
まとめ
いかがでしょうか。どなたかの参考になれば幸いです。