布団の中にいたい

Elasticsearchいじったり、Androidアプリ書いたり。最近は数学の勉強が楽しくなってきました。

運用しているElasticsearchをAmazon Elasticsearch Serviceに移した

AWSの勉強ついでに、conohaで管理していたelasticsearchをAmazon Elasticsearch Serviceに移行してみました。かかる金額自体はAmazon Elasticsearch Serviceのほうが断然高いですが、まぁ勉強ついでということで。

やったことは以下 - Amazon Elasticsearch Serviceに接続できるようにする - logstashの設定ファイルを作る - logstashでデータを転送する

Amazon Elasticsearch Serviceに接続できるようにする

普通はIAM roleとかでアクセス制限かけたほうがいいと思うんですが、それやるとamazon_es pluginとか使わないといけなくなってしまうので、楽するために一旦IPでアクセスできるようにします。

github.com

きちんとやるならIPでやるのではなく、普通にawsの認証を通してから接続できるようにしたほうがいいと思います。

クラスメソッドさんのブログに色々書いてあるのでその辺見るといいんですかね。

dev.classmethod.jp

logstashの設定ファイルを作る

今回はelasticsearchからelasticsearchへのデータ転送なので改めてpluginをインストールする必要はありません。

ちなみに以下のような感じ。ちょっとデータを変換したいみたいなことを考えているのであれば、filterでいじるといいと思います。elasticsearchの5系以上であれば、似たようなことがelasticsearch標準でできるみたいなので、そっちでもいいかもしれません。

注意点ですが、もしkuromojiのようなanalyzerを指定しているのであれば、予めmappingを適用してください。

input {
    elasticsearch {
        hosts => "localhost:9200"
        index => "indexの名前"
        query => "{}"
    }
}


output {
    elasticsearch {
        hosts => "elasticsearch serviceのhost"
        index => "indexの名前"
    }
}

logstashでデータを転送する

別段継続的に動かすものでもないので、コマンド一発で終わらせます。

コマンドは以下

sudo /usr/share/logstash/bin/logstash -f logstash.conf --path.settings /etc/logstash

あとは、awsの方のelasticsearchを叩いてきちんとデータが挿入されているかを確認すれば終了です。 ちゃんと動いてるか確認したいなら、logstashとelasticsearchのログを見たり、一旦outputをstdoutにしてrubydebugとかで吐き出させてみるといいと思います。

まとめ

今回は、logstashを使って、既に運用しているelasticsearchからamazon elasticsearch serviceへlogstashを使用して、データ転送を行いました。今回はlogstashを使いましたが、データ転送の手段としては、embulkなどもあるので、使いやすいものを使うといいと思います。