Azkabanのジョブファイルを自動生成するツールを書きました

https://github.com/wyukawa/ayd

aydはAzkaban YAML DSLの略です。

たいした事は全然やってなくて要するに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でシンプルに書きたかったので自作しました。