このページでは、ジャンプまたはループを使用して、ワークフローのステップの実行順序を制御する方法について説明します。基本的なジャンプでは、ワークフローが次に実行するステップを定義できます。条件付きジャンプは、基本的なジャンプに基づいて構築され、条件付き式を使用して、ワークフローを介して実行の順序を制御できます。たとえば、別のワークフロー ステップからの変数またはレスポンスが特定の条件を満たしている場合にのみ、特定のステップを実行できます。
このページの例では、曜日を返すサンプル API を使用します。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- 実行順序を変更する既存のワークフローがすでに存在している必要があります。ワークフローを作成してデプロイする方法については、ワークフローの作成と更新をご覧ください。
ジャンプを使用して実行順序を変更する
デフォルトでは、すべてのワークフローは、ワークフローのソースコードに定義された順序で各ステップが実行される、順序付きリストです。ジャンプを使用することで、このデフォルトの順序をオーバーライドすることもできます。
基本ジャンプ
基本的なジャンプを使用して、ワークフローの次に実行するステップを指定できます。
Console
Google Cloud Console で [ワークフロー] ページを開きます。
[ワークフロー] に移動既存のステップの実行順序を変更するワークフローの名前を選択します。
[ワークフローの編集] ページで、[次へ] を選択してワークフロー エディタに移動します。
ステップの最後に
next
フィールドを追加して、特定のステップにジャンプするようにワークフローに指示します。YAML
- step_a: ... next: STEP_NAME_TO_JUMP_TO - step_b: ... - next_step: ...
JSON
[ { "step_a": { ... "next": "STEP_NAME_TO_JUMP_TO" } } { "step_b": { ... } } { "next_step": { ... } } ]
STEP_NAME_TO_JUMP_TO
は、ワークフローを実行するステップの名前に置き換えます。例:next_step
[デプロイ] を選択します。
gcloud
テキスト エディタでワークフローの定義ファイルを開きます。
ステップの最後に
next
フィールドを追加して、特定のステップにジャンプするようにワークフローに指示します。YAML
- step_a: ... next: STEP_NAME_TO_JUMP_TO - step_b: ... - next_step: ...
JSON
[ { "step_a": { ... "next": "STEP_NAME_TO_JUMP_TO" } } { "step_b": { ... } } { "next_step": { ... } } ]
STEP_NAME_TO_JUMP_TO
は、ワークフローを実行するステップの名前に置き換えます。例:next_step
。ワークフロー ファイルを保存します。
ワークフローをデプロイするには、次のコマンドを入力します。
gcloud workflows deploy WORKFLOW_NAME \ --source=WORKFLOW_FILE.YAML
以下を置き換えます。
WORKFLOW_NAME
: 必須。: ワークフローの名前。WORKFLOW_FILE.YAML
: 必須。ワークフローのソースファイル。
例
たとえば、次のワークフローを例にとると、ステップの順番がばらばらになっています。
YAML
- get_time: call: http.get args: url: https://us-central1-workflowsample.cloudfunctions.net/datetime result: currentTime - return_daylight_savings_bool: return: ${daylightSavings} - get_daylight_savings_bool: assign: - daylightSavings: ${currentTime.body.isDayLightSavingsTime}
JSON
[ { "get_time": { "call": "http.get", "args": { "url": "https://us-central1-workflowsample.cloudfunctions.net/datetime" }, "result": "currentTime" } }, { "return_daylight_savings_bool": { "return": "${daylightSavings}" } }, { "get_daylight_savings_bool": { "assign": [ { "daylightSavings": "${currentTime.body.isDayLightSavingsTime}" } ] } } ]
この例では、next
フィールドが get_daylight_savings_bool
ステップと return_daylight_savings_bool
ステップに追加され、ステップが正しい順序で実行されるようになっています。
YAML
- get_time: call: http.get args: url: https://us-central1-workflowsample.cloudfunctions.net/datetime result: currentTime next: get_daylight_savings_bool - return_daylight_savings_bool: return: ${daylightSavings} - get_daylight_savings_bool: assign: - daylightSavings: ${currentTime.body.isDayLightSavingsTime} next: return_daylight_savings_bool
JSON
[ { "get_time": { "call": "http.get", "args": { "url": "https://us-central1-workflowsample.cloudfunctions.net/datetime" }, "result": "currentTime", "next": "get_daylight_savings_bool" } }, { "return_daylight_savings_bool": { "return": "${daylightSavings}" } }, { "get_daylight_savings_bool": { "assign": [ { "daylightSavings": "${currentTime.body.isDayLightSavingsTime}" } ], "next": "return_daylight_savings_bool" } } ]
条件付きジャンプ
条件付きジャンプを使用すると、ワークフローで次に実行するステップを決定できます。条件付きジャンプでは、特定の条件が満たされたときに指定されたステップにジャンプする switch
ブロックが使用されます。各 switch
ブロックには、最大 50 個の条件を設定できます。
Console
Google Cloud Console で [ワークフロー] ページを開きます。
[ワークフロー] に移動switch
ブロックを追加するワークフローの名前を選択します。[ワークフローの編集] ページで、[次へ] を選択してワークフロー エディタに移動します。
[ワークフローの定義] ページに、ワークフローの現在の定義が表示されます。条件文に基づいて特定のステップが実行されるように、ワークフローを編集するには、
switch
ブロックを使用するステップを追加します。YAML
- SWITCH_STEP_NAME: switch: - condition: ${EXPRESSION_ONE} next: STEP_A - condition: ${EXPRESSION_TWO} next: STEP_B ... next: STEP_C - STEP_A ... - STEP_B ... - STEP_C ...
JSON
[ { "SWITCH_STEP_NAME": { "switch": [ { "condition": "${EXPRESSION_ONE}", "next": "STEP_A" }, { "condition": "${EXPRESSION_TWO}", "next": "STEP_B" } ], "next": "STEP_C" } "STEP_A": { ... } "STEP_B": { ... } "STEP_C": { ... } } ]
以下を置き換えます。
SWITCH_STEP_NAME
:switch
ブロックを含むステップの名前。EXPRESSION_ONE
: 評価する最初の式。この式が true と評価されると、ワークフローは次にSTEP_A
を実行します。この式が false と評価されると、ワークフローは次の式を評価します。EXPRESSION_TWO
: 評価する 2 番目の式。この式が true と評価されると、ワークフローは次にSTEP_B
を実行します。この式が false と評価されると、ワークフローはSTEP_C
を実行します。STEP_A
、STEP_B
、STEP_C
: プレースホルダのステップ名。
[デプロイ] を選択します。
gcloud
テキスト エディタでワークフローの定義を開きます。
条件文に基づいて特定のステップが実行されるように、ワークフローを編集するには、
switch
ブロックを使用するステップを追加します。YAML
- SWITCH_STEP_NAME: switch: - condition: ${EXPRESSION_ONE} next: STEP_A - condition: ${EXPRESSION_TWO} next: STEP_B ... next: STEP_C - STEP_A ... - STEP_B ... - STEP_C ...
JSON
[ { "SWITCH_STEP_NAME": { "switch": [ { "condition": "${EXPRESSION_ONE}", "next": "STEP_A" }, { "condition": "${EXPRESSION_TWO}", "next": "STEP_B" } ], "next": "STEP_C" } "STEP_A": { ... } "STEP_B": { ... } "STEP_C": { ... } } ]
以下を置き換えます。
SWITCH_STEP_NAME
:switch
ブロックを含むステップの名前。EXPRESSION_ONE
: 評価する最初の式。この式が true と評価されると、ワークフローは次にSTEP_A
を実行します。この式が false と評価されると、ワークフローは次の式を評価します。EXPRESSION_TWO
: 評価する 2 番目の式。この式が true と評価されると、ワークフローは次にSTEP_B
を実行します。この式が false と評価されると、ワークフローはSTEP_C
を実行します。STEP_A
、STEP_B
、STEP_C
: プレースホルダのステップ名。
ワークフロー ファイルを保存します。
ワークフローをデプロイするには、次のコマンドを入力します。
gcloud workflows deploy WORKFLOW_NAME \ --source=WORKFLOW_FILE.YAML
以下を置き換えます。
WORKFLOW_NAME
: 必須。: ワークフローの名前。WORKFLOW_FILE.YAML
: 必須。ワークフローのソースファイル。
例
たとえば、このワークフローではスイッチ ブロックを使用して、ワークフローの実行順序を制御します。
YAML
- getCurrentTime: call: http.get args: url: https://us-central1-workflowsample.cloudfunctions.net/datetime result: currentTime - conditionalSwitch: switch: - condition: ${currentTime.body.dayOfTheWeek == "Friday"} next: friday - condition: ${currentTime.body.dayOfTheWeek == "Saturday" OR currentTime.body.dayOfTheWeek == "Sunday"} next: weekend next: workWeek - friday: return: "It's Friday! Almost the weekend!" - weekend: return: "It's the weekend!" - workWeek: return: "It's the work week."
JSON
[ { "getCurrentTime": { "call": "http.get", "args": { "url": "https://us-central1-workflowsample.cloudfunctions.net/datetime" }, "result": "currentTime" } }, { "conditionalSwitch": { "switch": [ { "condition": "${currentTime.body.dayOfTheWeek == "Friday"}", "next": "friday" }, { "condition": "${currentTime.body.dayOfTheWeek == "Saturday" OR currentTime.body.dayOfTheWeek == "Sunday"}", "next": "weekend" } ], "next": "workWeek" } }, { "friday": { "return": "It's Friday! Almost the weekend!" } }, { "weekend": { "return": "It's the weekend!" } }, { "workWeek": { "return": "It's the work week." } } ]
この例では、switch
ブロックに 2 つの条件があります。パーサーは各条件を順番に評価し、条件の式の結果が true
の場合、その条件の next
ステップが呼び出されます。どの条件も満たされない場合、ワークフローは switch
ブロックの外にある next
フィールドで指定されたステップを呼び出します。この例では、ステップ workWeek
です。
たとえば、曜日が "Saturday"
の場合、ワークフローはステップ weekend
にジャンプし、メッセージ "It's the weekend!"
を返します。ワークフローではこのステップが実行されません。friday
条件付きジャンプではスキップされるため、ワークフローはステップを実行しません。workWeek
理由: return
ワークフローの終了を、weekend
ステップに進みます。
for
ループを使用して反復処理を行う
for
ループを使用することで、一連の数値や、リストやマップなどのデータのコレクションに対する反復処理を行えます。
リストやマップ内のすべての項目は、アイテムベースの反復処理を使用して処理できます。反復する特定の数値範囲がある場合は、範囲ベースの反復処理を使用できます。
詳細と例については、iterationの構文リファレンスをご覧ください。