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

🐠 参考リンク

🖥 VULTRおすすめ

VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。 最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!

📚 おすすめの書籍