2024/07/09 更新
概要
Earkのワークフローは Google Cloud Workflows
を採用しております。
Workflowsでの記述法はEarkのワークフローでそのまま使用可能ですが、以下の制約がございます。
- Yamlの本文は必ず以下のように
main:
のsteps:
から始めること。
main:
steps:
これは後でご説明するEark独自の記述を変換するために必要となります。 このルールを無視した場合は正しく動作しない場合があります。
下記は、ワークフローの基本的な記述になります。
main:
steps:
- sample_step1:
# なんらかの処理1(例。S3のデータをGCSにコピー)
- sample_step2:
# なんらかの処理2(例。GCSのデータをBigQueryにロード)
- sample_step3:
# なんらかの処理3(例。BigQueryのデータのレコードを確認)
基本的に steps:
以下の各stepが1つの処理のイメージになります。
上記の例ですと全部で3stepあり、それぞれ上から順に実行され、途中で何かのエラーがある場合はそこで処理が止まります。
yamlの記述法次第では分岐やgotoのようなことも可能です。 詳しくは公式ドキュメントをご参考ください。
Google Cloud Platform
内であれば公式のコネクターも用意されていますので、使う用途に応じて使用してください。
公式のコネクター一覧
Earkの独自記述法について
Eark内で定義したコネクター(Embulk)やスクリプト(Python)をワークフローで回す場合は通常の Google Cloud Workflows
の記述法とは異なるEarkの独自の記述法に従い作成する必要があります。
コネクターやスクリプトの実行する場合の例は以下をご参考ください。
コネクターの実行
Eark内にコネクターを作成していることを前提とします。
作成したコネクターの名前をここでは sample_connector_1
とします。
以下、sample_connector_1
をワークフローで実行する例となります。
main:
steps:
# "CONNECTOR_"はこれからコネクターを回すとの約束語です。"CONNECTOR_"以降は自由に命名してください
- CONNECTOR_test1:
# nameは実行するコネクター名をいれてください
name: "sample_connector_1"
# completeは "CONNECTOR_test1" のstepが完了した後、どのstepと繋ぐかの設定になります。
# completeは必ず必要ですので1つのコネクターを回す場合は最低でもstep数を2個以上にしてください。
# 今のcomplete設定ですと、"sample_connector_1" が完了した後は "hogehoge2" のstepに飛ばします。(この場合、hogehoge1のstepは無視されます。)
complete: "hogehoge2"
- hogehoge1:
call: sys.log
args:
text: "hogehoge1のstepです。"
- hogehoge2:
call: sys.log
args:
text: "hogehoge2のstepです。"
説明をなくしてYamlだけ記載しますと以下のようになります。
main:
steps:
- CONNECTOR_test1:
name: "sample_connector_1"
complete: "hogehoge2"
- hogehoge1:
call: sys.log
args:
text: "hogehoge1のstepです。"
- hogehoge2:
call: sys.log
args:
text: "hogehoge2のstepです。"
スクリプトの実行
コネクターの実行と同様にEark内にコネクターを作成していることを前提とします。
作成したコネクターの名前をここでは sample_script_1
とします。
以下、sample_script_1
をワークフローで実行する例となります。
main:
steps:
# "PYTHON_"はこれからスクリプト(python)を回すとの約束語です。"PYTHON_"以降は自由に命名してください
- PYTHON_test1:
# nameは実行するコネクター名をいれてください
name: "sample_script_1"
# completeは "PYTHON_test1" のstepが完了した後、どのstepと繋ぐかの設定になります。
# completeは必ず必要ですので1つのコネクターを回す場合は最低でもstep数を2個以上にしてください。
# 今のcomplete設定ですと、"sample_script_1" が完了した後は "hogehoge2" のstepに飛ばします。(この場合、hogehoge1のstepは無視されます。)
complete: "hogehoge2"
- hogehoge1:
call: sys.log
args:
text: "hogehoge1のstepです。"
- hogehoge2:
call: sys.log
args:
text: "hogehoge2のstepです。"
説明をなくしてYamlだけ記載しますと以下のようになります。
main:
steps:
- PYTHON_test1:
name: "sample_script_1"
complete: "hogehoge2"
- hogehoge1:
call: sys.log
args:
text: "hogehoge1のstepです。"
- hogehoge2:
call: sys.log
args:
text: "hogehoge2のstepです。"
コネクターとスクリプトを一つのワークフローで実行する場合
一つのワークフロー内にコネクターやスクリプトを両方実行する場合もあります。 その場合は以下のような記述になります。
- 例1)
main:
steps:
- CONNECTOR_test1:
name: "sample_connector_1"
complete: "PYTHON_test1" # <---処理完了後、"PYTHON_test1"のstepを実行します
- PYTHON_test1:
name: "sample_script_1"
complete: "hogehoge1" # <---処理完了後、"hogehoge1"のstepを実行します
- hogehoge1:
call: sys.log
args:
text: "hogehoge1のstepです。"
- 例2)
main:
steps:
- CONNECTOR_test1:
name: "sample_connector_1"
complete: "CONNECTOR_test2" # <---処理完了後、"CONNECTOR_test2"のstepを実行します
- CONNECTOR_test2:
name: "sample_connector_2"
complete: "hogehoge1" # <---処理完了後、"hogehoge1"のstepを実行します
- hogehoge1:
call: sys.log
args:
text: "hogehoge1のstepです。"
- PYTHON_test1:
name: "sample_script_1"
complete: "hogehoge2" # <---処理完了後、"hogehoge2"のstepを実行します
- hogehoge2:
call: sys.log
args:
text: "hogehog2のstepです。"