Elasticsearch 8で初期パスワードを指定する

Elasticsearch 8を何も考えずに起動すると、初回起動時にelasticユーザーのパスワードが自動生成されます。起動する前にパスワードを設定しておきたい場合は、elasticsearch-keystoreコマンドで、bootstrap.passwordを設定しておけばそれが利用されるわけですが、インタラクティブに聞かれても面倒な場合は以下のような感じで渡してあげると設定できます。

$ echo ${es_password} | ./bin/elasticsearch-keystore add "bootstrap.password" -xf

eckctl

ElasticsearchをKubernetes上で便利に使えるものとして、Elastic Cloud on Kubernetes(ECK)があるけど、ローカル環境でも手軽にKubernetesクラスタを作って、そこでECKを動かせるようにしたいな、ということで、eckctlにまとめてみました。

手軽にKubernetesクラスタも作る必要があるので、eckctlではデフォルトでkindを利用することにしてます。なので、

$ ./eckctl create

とすると、ローカル環境にKubernetesクラスタができて、そこにECKを入れて、Elasticsearchクラスタができます。

サービス経由でアクセスするか、ポートフォワーディングで、

$ ./eckctl proxy

をして、別ターミナルで

$ ./eckctl curl https://localhost:9200/

みたいにするとElasticsearchのクラスタにアクセスできます。ECKのElasticsearchにはパスワードがかかっているので、eckctl経由にすることで、パスワードを付加してアクセスしています。

あとは、使い終わったら

$ ./eckctl delete

すれば、きれいに削除することができます。

使いながら、もう少し便利にしていこうかとは思いますが(ドキュメントを含めて…)、別にkindに依存しているわけではないので、そのうち、AWSやGCPにもデプロイできるようにしたいなとも思いますが、そこまで時間がないような気も…。とりあえず、FessのK8s対応が保留になっているので、eckctlベースに対応を進められないかなと考えています。

Docker Compose for Elasticsearch

ElasticsearchやKibanaをある程度はきちんとした状態で、手軽に試したいときがあるのだけど、そういうときにはdocker-fessを使っていた。でも、別にFessを使う必要はないし、プラグインとかも調整したいなということで、docker-elasticsearchにまとめてみた。

Elasticsearchだけを起動してみたいときには

$ docker-compose -f docker-compose.yml up

とすれば、localhost:9200でアクセスできるし、Kibanaも一緒に使いたいなー、というときには

$ docker-compose -f docker-compose.yml -f docker-compose.kibana.yml up

とすれば、localhost:5601でKibanaを使えるようになる。

プラグインとかをインストールしておきたいときには

$ ./bin/elasticsearch-plugin install analysis-kuromoji

とすれば、起動したElasticsearchで使えるはず。

今後も必要に応じて、微調整していく気はするけど、これで必要なときにコマンド1つで起動できるから便利になるかな…。