環境変数を活用してembulkを便利に使う

はじめまして。2017年度新入社員の増田です。現在WEBサービス開発グループでOJT中です。ちなみに読み方は”ますた“ですのでよろしくお願いします。

今回私が書くのは、環境変数を使ってembulkをより便利に使っていこうというお話です。

embulkとは、Treasure Dataによって開発されたオープンソースのバルクデータローダーです。よくfluentdのバッチ版と称されてますね。embulkは、fluentdと同様にプラグインが充実しており、インプット側とアウトプット側のプラグインを組み合わせれば様々な処理を行うことができます。例えば、csvファイルをRDBに入れたり、RDBからElasticsearchにデータを交換したりなどといった処理が簡単に行えます。また、フィルタープラグインを利用すればインプットしたデータを加工して投入することも可能です。

_images/embulk-architecture.png

前述したとおり、embulkはバッチ処理であるので、基本的にはcronなどに仕込んで利用します。もちろん、シェルスクリプトに内包することも可能で、活用すればよりembulkを使う幅が広がるのではないでしょうか。今回はテストを通して、皆さんに便利さをわかっていただければと思います。

今回のテスト概要

MySQLに入っているデータをElasticsearchにデータを格納するというテストをしてみます。取り込むデータは現在時刻からちょうど24時間前のデータから5分前のデータまでを取り込みます。

 

図3

インストール

まずはembulkをインストールしてみましょう。公式ドキュメントから引用させていただきます。embulkを利用するユーザに切り替えて以下のコマンドを叩きましょう。

次に、データソースに接続するためのプラグインをインストールしますが、embulkのプラグインのインストールは非常にシンプルです。

このコマンドを叩くだけで簡単にプラグインのインストールができます。

今回は、インプットのプラグインとしてembulk-input-jdbc

アウトプットのプラグインとしてembulk-output-elasticsearch を利用します。

configファイルの作成

これで準備は整いました。早速configファイルを作成していきましょう。configファイルとはembulkを動かすときに読み込むファイルで、このファイルの情報を基にembulkは動作します。configファイルはymlで記述しますが、環境変数を利用するためにはファイル名の拡張子を.yml.liquidにする必要があります。そして、configファイル内では{{ env.XXX}}と記述すれば環境変数を読み出すことができます。

そんなことを踏まえてこんな感じに作ってみました。

こうやってユーザ名やパスワード、向き先のホスト名、MySQLに投げるSQLなどを直接configファイルに記述するのではなく、環境変数で後からセットするような仕様にすることでembulkを柔軟に動作させることができます。次は、embulkを起動するメインスクリプトを記述していきます。

スクリプトファイルの作成

では、embulkを起動させるメインスクリプトを記述していきます。embulkを起動させるためにはこのコマンドを叩きます。

また、オプションとして”-J-Xmx”を記述してあげると最大のヒープサイズを指定することができます。他にも指定できるオプションはたくさんあります。(参考: http://qiita.com/hiroysato/items/86ad1cdfb1754440eed5)

そんなことを踏まえてこんな感じに作ってみました。

このような感じで変数に値を入れて、exportで環境変数化をしています。この環境変数が先ほど記述したconfigファイルを読み出すときに、読み込まれてembulkがそのように動作をしてくれるというわけです。更に複雑なスクリプトを組めばより、動的にembulkのconfigファイルの中身を変えることもできます。このように、configファイルに直接記述するのではなくシェルスクリプトを経由することで、embulkの柔軟性が高くなります。

実行

では、早速テストをしてみましょう。MySQLに格納されているデータの中から現在時刻の24時間前から5分前までのデータをElasticsearchに取り込みます。先ほど作成したシェルスクリプトを叩いてみます。

というわけで実行してみると133件データを取り込んだそうです。実際にちゃんとElasticsearchに取り込まれたかKibanaで確認してみましょう。

キャプチャ2

きちんと133件格納されていることがわかります。

最後に

今回は環境変数を活用したembulkの利用方法について書きましたが、embulkはconfigファイルにもプログラムが書けるなど、まだまだやれることがたくさんあります。プラグインも自作でき、全世界のユーザが作成をしていますので今後の発展が楽しみですね。

新米エンジニアに最後までお付き合いいただきありがとうございました。

今後ともどうぞニフティものづくりブログをよろしくお願いいたします。