LoginSignup
2
3

More than 5 years have passed since last update.

Digdagからsh>でEmbulk起動時にプラグインバージョンを固定(ローカルgemなし版)

Last updated at Posted at 2017-02-15

ローカルgemファイル(自作プラグイン等)を含まない場合はbundle機能を使うのが正式かと思う

$ embulk --version
embulk 0.8.16
$ digdag version
2017-02-15 11:11:19 +0900: Digdag v0.9.4
Client version: 0.9.4
Server version: 0.9.4
$ cd digdagtest1
$ mkdir embulk_bundle
$ vi embulk_bundle/Gemfile
$ cat embulk_bundle/Gemfile
source 'https://rubygems.org/'
gem 'embulk-input-td',  '= 0.1.0' # 範囲指定も出来る
gem 'embulk-output-td', '= 0.3.12'
$ cat embulk_gem_install.sh
mkdir -p /digsv_nfs/embulk_bundle/digdagtest1
cp -r embulk_bundle/Gemfile /digsv_nfs/embulk_bundle/digdagtest1
cd /digsv_nfs/embulk_bundle/digdagtest1
/usr/local/bin/embulk bundle --path .
$ cat a.dig
+embulk_gem_install:
  sh>: embulk_gem_install.sh
+task1:
  sh>: /usr/local/bin/embulk run --bundle /digsv_nfs/embulk_bundle/digdagtest1 task1.yml.liquid

以上をDigdagサーバにpushして実行すると
Digdagサーバ間で共有しているNFSディレクトリにEmbulkプラグインをインストールする
(同じDigdagサーバにpushされた他プロジェクトとGemfileを上書きし合わないようにプロジェクト名のサブディレクトリを切っている)
実行の度にembulk bundleが実行されるが許容する

NFSディレクトリにインストールする理由

複数サーバでプラグインを共有するため
embulk bundleが1号機で実行されてembulk runが2号機で実行されても大丈夫 → NFSの必要性の理由1

サーバが1台ならホームディレクトリにインストールしても良い(bundle時の--pathを取る)
その場合、複数プロジェクトから同一プラグインの同一バージョンは共用される
また、複数プロジェクトから同一プラグインのバージョン違いがインストールされても自プロジェクトのGemfileに記載されたバージョンが使用される

pushサイズ制限

クライアントでdigdagプロジェクトディレクトリ内にインストールしてからpushすることも試したが、プラグイン数が多い(7個とか)場合にpushサイズ制限にひっかかった

error: Status code 400: {"message":"Size of the uploaded archive file exceeds limit (2097152 bytes)","status":400}
$ du -sh embulk_bundle
21M     embulk_bundle/

事前インストール

dig内でembulk bundleしてるが、Digdagサーバに入る権限があれば事前にDigdagサーバ上でembulk bundleしておけば良い
各サーバ上で作業すればNFSディレクトリにインストールする必要もない(ホームディレクトリとか)

ローカルgemがある場合

別記事にて

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3