ワークフローでの実行順序の制御

このページでは、ワークフローのステップが実行される順序を制御するジャンプの使用方法を説明します。基本ジャンプを使用すると、ワークフローによって次に実行されるステップを定義できます。条件付きジャンプは、基本ジャンプに基づいて作成されます。これにより、条件を使用して、ワークフローの実行順序を制御できます。たとえば、別のワークフロー ステップからの変数またはレスポンスが特定の条件を満たしている場合にのみ、特定のステップを実行できます。

このページの例では、曜日を返すサンプル API を使用しています。

始める前に

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    [プロジェクトの選択] ページに移動

  3. Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

  4. 実行順序を変更する既存のワークフローを用意します。ワークフローの作成とデプロイ方法については、ワークフローの作成と更新をご覧ください。

ジャンプを使用して実行順序を変更する

デフォルトでは、すべてのワークフローは、ワークフローのソースコードに定義された順序で各ステップが実行される、順序付きリストです。ジャンプを使用することで、このデフォルトの順序をオーバーライドすることもできます。

基本ジャンプ

基本ジャンプを使用して、ワークフローで次に実行するステップを指定できます。

Console

  1. Google Cloud Console で [ワークフロー] ページを開きます。
    [ワークフロー] ページに移動

  2. 既存のステップの実行順序を変更するワークフローの名前を選択します。

  3. [ワークフローの編集] ページで、[次へ] を選択してワークフロー エディタに移動します。

  4. ステップの最後に next フィールドを追加して、特定のステップにジャンプするようにワークフローに指示します。

    - step_a:
        ...
        next: STEP_NAME
    - step_b:
        ...
    - next_step:
        ...
    

    STEP_NAME を、次にワークフローで実行するステップの名前に置き換えます。例: next_step

  5. [デプロイ] を選択します。

gcloud

  1. 任意のテキスト エディタでワークフローの定義ファイルを開きます。

  2. ステップの最後に next フィールドを追加して、特定のステップにジャンプするようにワークフローに指示します。

    - step_a:
        ...
        next: STEP_NAME
    - step_b:
        ...
    - next_step:
        ...
    

    STEP_NAME を、次にワークフローで実行するステップの名前に置き換えます。例: next_step

  3. ワークフロー ファイルを保存します。

  4. ワークフローをデプロイするには、次のコマンドを入力します。

    gcloud workflows deploy WORKFLOW_NAME \
    --source=WORKFLOW_FILE.YAML
    

    以下を置き換えます。

    • WORKFLOW_NAME: 必須。ワークフローの名前。

    • WORKFLOW_FILE.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}

ワークフローが適切な順序で実行されるように、get_timeget_daylight_savings_bool のステップに next フィールドを追加します。

- 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 ブロックには、最大 10 個の条件を含めることができます。

Console

  1. Google Cloud Console で [ワークフロー] ページを開きます。
    [ワークフロー] ページに移動

  2. switch ブロックを追加するワークフローの名前を選択します。

  3. [ワークフローの編集] ページで、[次へ] を選択してワークフロー エディタに移動します。

  4. [ワークフローの定義] ページに、ワークフローの現在の定義が表示されます。条件文に基づいて特定のステップが実行されるように、ワークフローを編集するには、switch ブロックを使用するステップを追加します。

    - 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_ASTEP_BSTEP_C: プレースホルダのステップ名。

  5. [デプロイ] を選択します。

gcloud

  1. 任意のテキスト エディタでワークフローの定義を開きます。

  2. 条件文に基づいて特定のステップが実行されるように、ワークフローを編集するには、switch ブロックを使用するステップを追加します。

    - 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_ASTEP_BSTEP_C: プレースホルダのステップ名。

    switch ステートメントには、必要に応じて多くの条件を含めることができます。

  3. ワークフロー ファイルを保存します。

  4. ワークフローをデプロイするには、次のコマンドを入力します。

    gcloud workflows deploy WORKFLOW_NAME \
    --source=WORKFLOW_FILE.YAML
    

    以下を置き換えます。

    • WORKFLOW_NAME: 必須。ワークフローの名前。

    • WORKFLOW_FILE.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."

この例では、switch ブロックには 2 つの条件があります。パーサーは各条件を順番に評価し、条件の式の結果が true であれば、その条件の next ステップが呼び出されます。どの条件も満たされていない場合は、switch ブロックの外の next フィールドで指定されたステップ(この例ではステップ workWeek)がワークフローに呼び出されます。

たとえば、曜日が "Saturday" の場合、ワークフローはステップ weekend にジャンプし、メッセージ "It's the weekend!" を返します。ワークフローでは、条件付きジャンプによってスキップされるため、ステップ friday は実行されません。また、return によってステップ weekend の最後でワークフローの実行が停止されるため、ステップ workWeek は実行されません。

次のステップ