Azkabanのジョブファイルを自動生成するツールを書きました
https://github.com/wyukawa/ayd
たいした事は全然やってなくて要するにYAMLからプロパティファイルを作っているだけです。
例えば、
のようなAzkabanのflowがあるとして、本来なら以下のようなファイルを用意する必要があります。
foo.job
retry.backoff=300000 retries=1 command=echo "foo" type=command
bar.job
retry.backoff=300000 retries=1 dependencies=foo command=echo "bar" type=command
hoge.job
retries=2 dependencies=foo command=echo "hoge" retry.backoff=30000 type=command command.1=echo "hoge1"
piyo.job
retry.backoff=300000 retries=1 dependencies=bar, hoge command=echo "piyo" type=command
4つもファイル作るの面倒ですよね。1つにしたいですよね。
そこで下記のようなファイルを用意してaydを実行すれば上記ファイルを自動生成します。
foo: type: command command: echo "foo" retries: 1 retry.backoff: 300000 bar: type: command command: echo "bar" dependencies: foo retries: 1 retry.backoff: 300000 hoge: type: command dependencies: foo command: echo "hoge" command.1: echo "hoge1" retries: 2 retry.backoff: 30000 piyo: type: command dependencies: bar, hoge command: echo "piyo" retries: 1 retry.backoff: 300000
これだけです。
一応マイグレーション用のコマンドも用意していてAzkabanのジョブファイルからYAMLを自動生成することもできます。
現状では僕の環境で少しだけ適用しています。
開発した動機はAzkabanのジョブファイルを書く手間を減らす事です。
Azkaban Roadmap
https://github.com/azkaban/azkaban/wiki/Azkaban-Roadmap
によればDSLを用意する未来はあったのかもしれませんが、開発が停滞している現状だと難しそうなので自作しました。
DSLとしては下記を参考にして最終的にはYAMLにしました。
https://gist.github.com/davidzchen/b3af9f2afa1765e5dd59
https://gist.github.com/davidzchen/c5175c8931033bff99ae
https://gist.github.com/davidzchen/ed954aeaec1a9850c856
Rakefile形式で書くGitHub - matthayes/azkaban-rb: A Ruby DSL for creating Azkaban jobs using Rakeというものもあったのですが、YAMLでシンプルに書きたかったので自作しました。