この記事について
Ruby on Rails から Docker 上の Open Distro for Elasticsearch に接続する方法を記載します。
Open Distro for Elasticsearch とは
Open Distro for Elasticsearch は Elasticsearch のディストリビューションで、 Amazon Elasticsearch Service で使われているものです。
Docker
公式のドキュメントを参考に docker-compose で Open Distro for Elasticsearch を立ち上げます。
今回はシングルノードで立ち上げています。
version: "3"
services:
elasticsearch_open_distro:
image: amazon/opendistro-for-elasticsearch:1.9.0
environment:
- discovery.type=single-node
- cluster.name=elasticsearch
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
ports:
- 9200:9200
Ruby on Rails から接続
elasticsearch-rails と elasticsearch-model を使います。
gem 'elasticsearch-model'
gem 'elasticsearch-rails'
素の Elasticsearch と違い Open Distro for Elasticsearch は localhost の場合も https で接続しなければなりません。
よって initializer は以下のように書きます。
localhost の場合は transport_options
で ssl の verify を false にしています。
ELASTICSEARCH_USER
と ELASTICSEARCH_PASSWORD
はデフォルトでは両方 admin を使うと接続することはできます。
Elasticsearch::Model.client = Elasticsearch::Client.new(
host: 'localhost',
port: 9200,
user: ENV['ELASTICSEARCH_USER'],
password: ENV['ELASTICSEARCH_PASSWORD'],
scheme: 'https',
transport_options: {
ssl: {
verify: false,
},
},
)
これで接続することができました。
elasticsearch-rails の Usage の手順で接続を確認することができます。