[プレビュー]Workflowsの詳細な実行履歴を確認できるオプションが追加されました
2025/2/7のアップデートで、Workflowsを作成する際にワークフローの実行履歴をより詳細に取得できるオプションが追加されました。2025/2/10時点ではプレビューの機能となります。
本記事ではこの機能の概要や実際に動作させてみた結果をまとめています。
機能の概要
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.
実行履歴の[詳細]レベルを指定すると、実行パフォーマンスに若干の影響を与える可能性がある。
実際に動作を見てみる
有効化方法
Execution history
という項目で詳細
を選択すると有効化されます。ワークフロー作成、編集、実行時などで選択することができます。
ワークフロー実行時の指定方法
実行履歴
の項目で詳細
を指定します。ワークフローから継承
という項目も追加されていました。ワークフローから継承
を選択するとワークフローデプロイ時に指定したレベルが使用されます。
項目 | 概要 |
---|---|
ワークフローから継承 | デプロイ時に指定した値 |
基本 | 従来の実行履歴 |
詳細 | 詳細な実行履歴 |
設定状況の確認方法
ワークフローの詳細
> 詳細
の実行履歴
で確認できました。
以下は詳細
になっている例です。基本の場合は基本
と表示されます。
有効化して見てみる
サンプルとして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ループ
を見て見ます。
変数
で変数の内容と、ステップの進行状況
で成功や失敗数がわかるようになっていますね。
進行状況はページ再読み込み不要で値がどんどん変化していきました。以下はforループ実行中のスクショです。
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
こちらも同様に問題ないですね。実行履歴の詳細が確認できます。
レベル[基本]の実行履歴を見てみる
ワークフロー実行時に基本
を設定してみてみます。
変数
・ステップの進行状況
ともに詳細な実行履歴が有効になっていないため内容が表示されていませんでした。
ループカウンタに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
関数でループカウンタを算出します。
変数の内容は問題ありませんでしたが、ステップの進行状況
で成功数
・残り
の値が不自然なものになっていました。特に、残り
に関してはワークフロー実行完了後でもマイナス表示のままでした。ループカウンタの条件はリファレンス記載の通り注意が必要と考えます。
まとめ
Workflowsはforループや並列ブランチを用いて並列でCloud Run Functionsなどを呼び出して処理することが多いのでループ内のデータが詳細に見れることはありがたいことだなと思いました。
一方で、パフォーマンスが若干低下するとあるので本番運用時に適用するかどうかは検証検討が必要だと考えます。
開発時には使用したい機能なのでGAするのも待ち遠しいなと思います。
それではまた。ナマステー
参考