Digdagワークフローの定義


ワークフローは.digファイル(YAML)で定義します。

timezone: Asia/Tokyo # Timezoneの設定
_export:
foo: 1 # パラメータの設定
mysql:
!include : 'config/mysql.dig' # 別ファイルの読込
mail:
from: you@gmail.com
+step1: # タスク1 (+がタスクを表します)
sh>: tasks/shell_sample.sh # シェルスクリプトを実行 (> でアクションを実行を表す)
+step2: # タスク2
py>: tasks.MyWorkflow.step2 # Python のコードを実行
param1: this is param1 # パラメータ
+step3: # タスク3
rb>: MyWorkflow.step3 # ruby のコードを実行
require: tasks/ruby_sample.rb # require するファイル
_error: # 失敗時にメールを送る
mail>: body.txt
subject: this workflow failed
to: [me@example.com]

🗽 +はタスクを表します

+で始まるキー名はタスクを表します。タスクは上から順に実行されます。

🎳 >はオペレータを表します

タスクはtype>: COMMANDか、_type: NAMEでアクションを設定します。
ShellやRubyのメソッド、メール送信を行うオペレータがあります。

🐯 ${...}はJavaScriptとして展開

Digdagファイルに${...}と書いた場合は、JavaScriptとして展開されるのでちょっとした処理も簡単に記述できます。あとは、 Moment.js の時間計算が使えるのも魅力で、時間計算ができます。

+get_execution_time:
# 2016-09-24 05:24:49 -0700
echo>: ${moment().format(YYYY-MM-DD HH:mm:ss Z)}

詳細は「Workflow definition — Digdag documentation」を参照ください。

😎 _exportはパラメータを定義

_exportは変数を定義します。静的な設定値などを格納します。

_export:
foo: 1 # foo=1はどこでも使えます
+analyze:
_export:
bar: 2 # bar=2は+analyzeのみ
+step1:
py>: tasks.MyWorkflow.analyze_step1

0.9.10時点ではsecretsなどの変数の展開はしないようでした。

🐠 !includeで別のファイルを読み込み

!includeで別のdigファイルを読み込むことができます。

_export:
mysql:
!include : 'config/mysql.dig'
!include : 'tasks/foo.dig'

🏈 _errorでエラー通知

_errorでエラーが発生した際の通知を定義できます。

_error:
sh>: tasks/runs_when_workflow_failed.sh
+analyze:
sh>: tasks/analyze_prepared_data_sets.sh

🎂 参考リンク

📚 おすすめの書籍

🖥 サーバについて

このブログでは「Cloud Garage」さんのDev Assist Program(開発者向けインスタンス無償提供制度)でお借りしたサーバで技術検証しています。 Dev Assist Programは、開発者や開発コミュニティ、スタートアップ企業の方が1GBメモリのインスタンス3台を1年間無料で借りれる心強い制度です!(有償でも1,480円/月と格安)