digdag入門しはじめた
— hatappi (@hatappi) 2017年5月11日
しました
DigdagはDocker上でタスクに依存性をもたせて処理を実行するために使用し始めました
Digdagを使うことが出来るDocker Imageは今回は自前で用意したものを使用します
※ Digdagのバージョンは0.9.10
https://hub.docker.com/r/hatappi/digdag/
ENTRYPOINTにはdigdagを指定しているので docker run hatappi/digdag init hoge
みたいに使えます
例えば下記のようなワークフローを/tmp/workflow.dig
にホストマシンに定義したとします
timezone: Asia/Tokyo +setup: echo>: SETUP! +echo_date: sh>: date +cleanup: echo>: CLEANUP!
処理としては SETUP!
をechoした後に date
で現時刻を表示して最後にCLEANUP!
と表示して完了します
docker runにてworkflow.digをコンテナ上にマウントして実行します
$ docker run -w /digdag -v /tmp/workflow.dig:/digdag/workflow.dig hatappi/digdag run workflow.dig 2017-05-11 15:35:10 +0000: Digdag v0.9.10 2017-05-11 15:35:12 +0000 [WARN] (main) io.digdag.cli.Run: Using a new session time 2017-05-12T00:00:00+09:00. 2017-05-11 15:35:12 +0000 [INFO] (main) io.digdag.cli.Run: Using session /digdag/.digdag/status/20170512T000000+0900. 2017-05-11 15:35:12 +0000 [INFO] (main) io.digdag.core.workflow.WorkflowExecutor: Starting a new session project id=1 workflow name=workflow session_time=2017-05-12T00:00:00+09:00 2017-05-11 15:35:14 +0000 [INFO] (0016@[0:default]+workflow+setup) io.digdag.core.agent.OperatorManager: echo>: SETUP! SETUP! 2017-05-11 15:35:15 +0000 [INFO] (0016@[0:default]+workflow+echo_date) io.digdag.core.agent.OperatorManager: sh>: date Thu May 11 15:35:15 UTC 2017 2017-05-11 15:35:17 +0000 [INFO] (0016@[0:default]+workflow+cleanup) io.digdag.core.agent.OperatorManager: echo>: CLEANUP! CLEANUP! Success. Task state is saved at /digdag/.digdag/status/20170512T000000+0900 directory.
そしてもう一度同じコマンドを実行したとする
digdagはそれぞれタスクが完了したかのセッション情報をもっているので本来は完了したタスクはskipされるはずですが、コンテナをたてなおすとセッション情報も保持していないので最初からの実行になってしまいます
これを解決するためにまずdigdagのセッション情報の保持の仕方を確認します
digdagのセッション情報は*.dig
ファイルがあるディレクトリに.dig/[session_time]
でディレクトリがきられそこにタスクごとに状態を保持したymlファイルが生成されておりdigdag run
した際に該当時間内のsession_timeの情報があるか見に行っているようです
そのディレクトリをDockerのData Volumeを使って永続化してあげれば良さそうです
今回は任意の場所にセッションを保存したかったためdigdag run
のオプションの--save
を使用して任意の場所にセッション情報を保持するようにしました
後はそのディレクトリをホストマシンにマウントしてあげるだけです
$ docker run -w /digdag -v /tmp/workflow.dig:/digdag/workflow.dig -v /tmp/dig:/digdag_session hatappi/digdag run workflow.dig --save /digdag_session
これで何回コンテナをたてなおしてもセッション情報をみてdigdag run
できるようになりました