[Embulk][小ネタ]S3への出力とプラグインのインストール先について

2015.05.08

はじめに

前回作成したサンプルを元に、今回は出力先をS3に変更してみました。と同時にプラグインのインストール先について分かったことがあるので書いておきたいと思います。

S3への出力手順

S3に出力するにはembulk-output-s3プラグインを使用します。以下、手順です。

1.プラグインのインストール

前回は独自のロジックをbundle用フォルダ「embulk_bundle」内に作成したため、プラグインのインストールもこのフォルダ内に行います。Gemfileに以下を記述してください。

Gemfile
gem 'embulk-output-s3'

以下のコマンドでbundleを行います。

$ java -jar embulk.jar bundle ./embulk_bundle

2.config用ymlを編集

configの「out」欄に使用するプラグインの定義を追加します。embulk-output-s3を参考に以下のように記述しました。

config_dev.yml
(中略)
out:
  type: s3
  path_prefix: /embulk
  file_ext: .csv.gz
  bucket: embulk-test/embulk
  endpoint: s3-ap-northeast-1.amazonaws.com
  access_key_id: YOUR_ACCESS_KEY
  secret_access_key: YOUR_SECRET_ACCESS_KEY
  formatter:
  (中略)

非常に分かり易い定義なので、ymlのキーを見れば何を定義しているかは分かるかと思います。

3.実行

以下のコマンドでEmbulkを実行します。

$ java -jar embulk.jar run config_dev.yml -b ./embulk_bundle

S3の指定したフォルダに出力されていることを確認してください。

プラグインをインストールする方法の2つの違いについて

先ほどもプラグインのインストールを行いましたが、インストール先によって2つの方法があります。

  1. マシンのグローバル領域にインストール
  2. 指定したローカルフォルダにインストール


の2つです。上記の例では2.を使いました。理由は先にも書いたとおりローカルフォルダに独自のロジックを記述したため、同じフォルダ内でプラグインも実行する必要があったためです。以下に2つの方法の違いについて書いておきます。

1.マシンのグローバル領域にインストール

「グローバル領域」と書きましたが、マシン内のどこからでも参照できるフォルダにインストールされます。具体的なインストール先は「~/.embulk/jruby/1.9/gems」となります(jrubyのバージョンによって「1.9」は今後変わってくるでしょう)。プラグインとして公開されているもののみを使用する場合などは、こちらの方法を使用することが多いかと思います。コマンドは以下のようになります。

$ java -jar embulk.jar gem install プラグイン名

2.指定したローカルフォルダにインストール

こちらは上記で行ったように、指定したローカルフォルダ内にインストールする方法です。「embulk_bundle」フォルダを指定したとすると、インストール先は「embulk_bundle/jruby/1.9/gems」となります。プラグインの開発時や、処理によってプラグインのバージョンが異なることが想定される場合などはこちらの方法を使用したほうがいいかと思います。手順は簡単に箇条書きすると

  1. 「$ java -jar embulk.jar bundle ./ローカルフォルダ」にてローカルフォルダを作成
  2. Gemfileにプラグインを記述
  3. 再び「$ java -jar embulk.jar bundle ./ローカルフォルダ」を実行してインストール


となります。

まとめ

プラグインのインストール先について分からないと、ローカルで開発したロジックを追加するプラグインと動かすことができないかと思います(というより私が動かせなかった)。何かの時の参考になれば幸いです。