[プレビュー]Workflowsの詳細な実行履歴を確認できるオプションが追加されました

[プレビュー]Workflowsの詳細な実行履歴を確認できるオプションが追加されました

Clock Icon2025.02.10

2025/2/7のアップデートで、Workflowsを作成する際にワークフローの実行履歴をより詳細に取得できるオプションが追加されました。2025/2/10時点ではプレビューの機能となります。
https://cloud.google.com/workflows/docs/debug-steps

本記事ではこの機能の概要や実際に動作させてみた結果をまとめています。

機能の概要

Workflowsのワークフロー作成・実行・トリガー作成時などでExecution historyという項目が追加されています。この項目で詳細を選択すると以下のデータを実行履歴で確認することができるようになります。基本を選択すると従来通りの実行履歴となります。

項目 原文 翻訳
メタデータ If applicable, the expected number of iterations in the step's progress—for example, when using a for loop, a parallel branch, or an iteration.
Note that the calculated count won't work as expected if the loop bounds include expressions that incorporate any of the following:
・ A nested expression depth that exceeds 10
・ Built-in functions other than len()
・ Evaluations that involve values such as .inf, -.inf, .NAN, Infinity, or -Infinity
・ Errors
For details, see StepEntryMetadata.
ステップの進行における期待される反復回数。例えば、forループ、並列ブランチ、または反復を使用する場合。ループ境界に次のいずれかを含む式がある場合、計算されたカウントは期待通りに機能しません。
・ ネストされた式の深さが10を超える場合
・ len()以外の組み込み関数
・ .inf、-.inf、.NAN、Infinity、または-Infinityなどの値を含む評価
・ エラー
詳細はStepEntryMetadataを参照。
変数データ Data related to in-scope variable values associated with this step including the names and values of user‑defined local variables and the results of expression evaluations.
Note that the scope excludes internal variables linked to Workflows built-in functions.
For details, see VariableData.
このステップに関連するスコープ内の変数値に関するデータ。ユーザー定義のローカル変数の名前と値、および式評価の結果が含まれます。スコープには、Workflowsの組み込み関数にリンクされた内部変数は含まれません。
詳細はVariableDataを参照。

forループや並列ブランチ、反復処理でループ回数や処理対象の変数の詳細が確認できるようになったというのがざっくりとした理解になりそうです。また、len()以外の関数でループ回数を設定している場合はループ回数が取得できないというのも注意が必要そうです。

どうやって有効にするのか

ワークフロー作成時、ワークフロー実行時、ワークフロートリガー設定時に設定することができます。また、ワークフロー作成時に設定した方のレベル詳細または基本に関しては実行時にレベルを指定しなかった場合のデフォルトとして動作します。例えば既存のワークフローをgcloudコマンドで実行した場合では、基本で実行されます。
まとめると以下の動きになります。

種別 実行時にレベルを省略 実行時にレベルを指定
既存のワークフロー 基本で動作 指定したレベルで動作
新規のワークフロー デプロイ時に指定したレベルで動作 指定したレベルで動作

※2025/2/10時点ではgcloudコマンドでワークフロー実行する際のオプションではまだレベル指定できないようです。betaでも該当オプションが見当たりませんでした。

パフォーマンスにおける注意点

詳細を指定すると、パフォーマンスに影響が出る可能性がある旨の記載がリファレンスにありました。

Note: Specifying a Detailed execution history level might have a slight impact on execution performance.
実行履歴の[詳細]レベルを指定すると、実行パフォーマンスに若干の影響を与える可能性がある。

https://cloud.google.com/workflows/docs/debug-steps#history-level

実際に動作を見てみる

有効化方法

Execution historyという項目で詳細を選択すると有効化されます。ワークフロー作成、編集、実行時などで選択することができます。
スクリーンショット 2025-02-10 9.58.32.png

ワークフロー実行時の指定方法

実行履歴の項目で詳細を指定します。ワークフローから継承という項目も追加されていました。ワークフローから継承を選択するとワークフローデプロイ時に指定したレベルが使用されます。
スクリーンショット 2025-02-10 11.34.36.png

項目 概要
ワークフローから継承 デプロイ時に指定した値
基本 従来の実行履歴
詳細 詳細な実行履歴

設定状況の確認方法

ワークフローの詳細 > 詳細実行履歴で確認できました。
以下は詳細になっている例です。基本の場合は基本と表示されます。
スクリーンショット 2025-02-10 10.46.29.png

有効化して見てみる

サンプルとしてaからzまでの配列をループするワークフローを作成しました。

main:
  steps:
    - init:
        assign:
          - sample_array : ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
    - execute_child_workflows:
        parallel:
          for:
            value: val
            in: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26]
            steps:
                 - logStep:
                    call: sys.log
                    args:
                        text: ${val}
                        severity: INFO 
                    result: execution_result

実行した結果を見て見ます。
実行の詳細 > ステップへと遷移して、forループを見て見ます。
スクリーンショット 2025-02-10 10.53.20.png

変数で変数の内容と、ステップの進行状況で成功や失敗数がわかるようになっていますね。
進行状況はページ再読み込み不要で値がどんどん変化していきました。以下はforループ実行中のスクショです。
スクリーンショット 2025-02-10 10.55.12.png

len()を用いた場合でも同様に見て見ます。

main:
  steps:
    - init:
        assign:
          - sample_array : ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
    - execute_child_workflows:
        parallel:
          for:
            value: val
            range: ${[0, len(sample_array)]}
            steps:
                 - logStep:
                    call: sys.log
                    args:
                        text: ${val}
                        severity: INFO 
                    result: execution_result

スクリーンショット 2025-02-10 11.14.17.png

こちらも同様に問題ないですね。実行履歴の詳細が確認できます。

レベル[基本]の実行履歴を見てみる

ワークフロー実行時に基本を設定してみてみます。
スクリーンショット 2025-02-10 11.16.03.png

変数ステップの進行状況ともに詳細な実行履歴が有効になっていないため内容が表示されていませんでした。

ループカウンタにmax()を用いてみる

len()以外のループカウンタを使用した場合はリファレンスに以下の通り、意図した動作しないとあるので試して見ました(他にも条件あり)。

Note that the calculated count won't work as expected if the loop bounds include expressions that incorporate any of the following:
・A nested expression depth that exceeds 10
・Built-in functions other than len()
・Evaluations that involve values such as .inf, -.inf, .NAN, Infinity, or -Infinity
Errors

main:
  steps:
    - init:
        assign:
          - test_max : ${math.max(1, 25)}
    - execute_child_workflows:
        parallel:
          for:
            value: val
            range: ${[0, int(test_max)]}
            steps:
                 - logStep:
                    call: sys.log
                    args:
                        text: ${val}
                        severity: INFO 
                    result: execution_result

0から25までの範囲でループし、各ループでvalをログに記録するワークフローを用意しました。max関数でループカウンタを算出します。
スクリーンショット 2025-02-10 11.24.08.png

変数の内容は問題ありませんでしたが、ステップの進行状況成功数残りの値が不自然なものになっていました。特に、残りに関してはワークフロー実行完了後でもマイナス表示のままでした。ループカウンタの条件はリファレンス記載の通り注意が必要と考えます。

まとめ

Workflowsはforループや並列ブランチを用いて並列でCloud Run Functionsなどを呼び出して処理することが多いのでループ内のデータが詳細に見れることはありがたいことだなと思いました。
一方で、パフォーマンスが若干低下するとあるので本番運用時に適用するかどうかは検証検討が必要だと考えます。
開発時には使用したい機能なのでGAするのも待ち遠しいなと思います。

それではまた。ナマステー

参考

https://cloud.google.com/workflows/docs/debug-steps

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.