トラブルシューティング

ワークフローの使用中に問題が発生した場合に役立つトラブルシューティングの方法について説明します。

デプロイエラーのトラブルシューティング

ワークフローがデプロイされると、Workflows はソースコードにエラーが含まれていないことと、言語構文と一致していることを確認します。エラーが見つかった場合、Workflows はエラーを返します。最も一般的なデプロイエラーは次のとおりです。

  • 未定義の変数、ステップ、サブワークフローを参照する
  • 不適切な構文
    • 不適切なインデント
    • {}"-: の欠落、または無関係なものがある

たとえば、次のソースコードは、return ステートメントが未定義の変数 varC を参照しているため、デプロイエラーをスローします。

- step1:
    assign:
    - varA: "Hello"
    - varB: "World"
- step2:
    return: ${varC + varB}

この間違ったソースコードは、次の Cloud Console と Cloud SDK のサンプルで使用されています。

Console

デプロイエラーが発生した場合、ワークフローではソースコードの上に、赤いバナー内にエラー メッセージが表示されます。

デプロイエラー

エラー メッセージは、可能な場合はエラーの発生場所を指定して、ソースコードの問題を報告します。

Could not deploy workflow: failed to build: error in step step2: error
evaluating return value: symbol 'varC' is neither a variable nor a
sub-workflow name (Code: 3)

gcloud

gcloud workflows deploy コマンドを実行すると、デプロイが失敗した場合、Workflows はコマンドラインにエラー メッセージを返します。エラー メッセージは、可能な場合はエラーの発生場所を指定して、ソースコードの問題を報告します。

ERROR: (gcloud.workflows.deploy) [INVALID_ARGUMENT] failed to build:
error in step step2: error evaluating return value: symbol 'varC' is neither
a variable nor a sub-workflow name

ワークフローのソースコードを編集して問題を修正します。この場合は、代わりに varC への参照を varA に更新します。

ワークフローのデプロイと削除ログへのアクセス

Cloud Console で、ワークフローのデプロイと削除に関連するエラーログにアクセスできます。

  1. Google Cloud Console の [ワークフロー] ページに移動します。
    [ワークフロー] ページに移動

  2. ワークフローのログを表示するには、ワークフローの名前をクリックして [詳細] ページに移動します。

  3. [ログ] タブを選択します。

  4. 重大度でログをフィルタするには、[デフォルト] プルダウンを選択し、表示するログのエラータイプを選択します。

ワークフローの実行結果へのアクセス

ワークフローの実行結果には、Cloud Console または Cloud SDK を使用してアクセスできます。

Console

  1. Google Cloud Console の [ワークフロー] ページに移動します。
    [ワークフロー] ページに移動

  2. ワークフローの実行結果にアクセスするには、ワークフローの名前をクリックして [詳細] ページに移動します。

  3. 特定の実行の詳細については、リスト内の実行の ID をクリックします。実行ごとに次の情報が含まれます。

    • 実行の状態: ワークフローの終了状態を示します。
    • 実行開始: 実行が開始された日時。
    • 実行終了: 実行が終了した日時。
    • 実行期間: 合計経過時間。これは、ネットワーク エラーまたは接続の問題を示す場合があります。
    • 出力: ワークフローの出力。実行が失敗した場合は、実行の失敗の原因となる例外が含まれます。詳細については、実行エラー メッセージのセクションをご覧ください。
    • 入力: ワークフローに渡されるランタイム引数(存在する場合)。
  4. ワークフローの実行のすべてのログを表示するには、[ログ] をクリックして [ログ] タブを開きます。

  5. 実行ログをフィルタするには、表の上部にある [フィルタ] フィールドを使用します。たとえば、失敗した実行試行のみを表示するには、フィルタのテキスト フィールドに「failed」と入力します。

    実行ログをフィルタする

gcloud

  1. ワークフロー実行の完全なリストを表示するには、次のコマンドを入力します。

    gcloud workflows executions list [WORKFLOW-NAME]
    

    [WORKFLOW-NAME] をワークフローの名前に置き換えます。目的の実行の実行 ID をコピーします。

  2. ワークフローの実行ログを表示するには、次のコマンドを入力します。

    gcloud workflows executions describe \
    --workflow=[WORKFLOW-NAME] \
    [EXECUTION-ID]
    

    以下を置き換えます。

    • [WORKFLOW-NAME]: ワークフローの名前。
    • [EXECUTION-ID]: 実行の一意の ID。

このコマンドでは、次のような出力が返されます。

argument: '{"message":"I love it so much!"}'
endTime: '2020-07-21T17:48:16.438109757Z'
error: 'in step "sentimentCheck": {"message":"KeyError: key not found: messaage","tags":["KeyError","LookupError"]}'
name: projects/********/locations/us-central1/workflows/sentimentCheck/executions/e8103c53-72ba-4af7-8996-f5a8337c2a7
startTime: '2020-10-12T17:48:16.342177302Z'
state: FAILED
workflowRevisionId: '000009-e6d'

出力には次の情報が含まれます。

  • argument: ワークフローに渡されるランタイム引数(存在する場合)。
  • endTime: 実行が終了した日時。
  • error: 実行の失敗につながった例外の一部としてスローされたエラー メッセージ。
  • name: 実行の完全な名前(プロジェクトの名前、ワークフローのロケーション、ワークフローの名前、実行 ID を含む)。
  • startTime: 実行が開始された日時。
  • state: ワークフローの終了状態を示します。
  • workflowRevisionID: 実行時の現在のリビジョン。

実行エラー メッセージ

ワークフローが実行中に、try / except ブロックでキャッチされない例外をスローする場合、実行は失敗し、エラー辞書が返されます。

ワークフローの実行中にスローされたエラーには、エラーの原因を特定するためのタグが含まれています。次の表は、さまざまなエラータグの意味を説明したものです。

エラータグ 説明
TypeError 互換性のないタイプのオブジェクトに対してオペレーションまたは関数が適用された場合に発生します。関連する値は、型の不一致に関する詳細を示す文字列です。
ValueError オペレーションまたは関数が、型は適切ですが、値が正しくない引数を受け取った場合で、「IndexError」などの、より厳密な例外で状況が説明されない場合に発生します。
IndexError シーケンス サブスクリプトが範囲外の整数である場合に発生します。
KeyError 既存のキーのセットに辞書キーが見つからない場合に発生します。
RecursionError 最大再帰回数を超えることをインタープリタが検出した場合に発生します。
ZeroDivisionError 除算または剰余演算の 2 番目の引数がゼロの場合に発生します。関連する値は、演算対象のタイプと演算を示す文字列です。
SystemError インタープリタで内部エラーを検出した場合に発生します。
TimeoutError システム関数がシステムレベルでタイムアウトした場合に発生します。
ResourceLimitError 一部のリソースを上限まで使い切った場合に発生します。内部で発生すると、このタイプのエラーはキャッチされず、すぐに実行は失敗します。
HttpError HTTP エラー ステータスで HTTP リクエストが失敗した場合に発生します。この例外が発生すると、レスポンスは次の要素を持つ辞書になります。
* メッセージ - 人が読めるエラー メッセージ * コード - HTTP レスポンス ステータス コード * ヘッダー - レスポンス ヘッダー * 本文 - レスポンス本文

raise: 構文を使用してカスタムの例外を発生させることもできます。ユーザー定義の例外によって、既存のエラー辞書の要素が上書きされるので注意してください。

Cloud Logging へのログの送信

Workflows では、Cloud Logging でのワークフロー実行のログは自動生成されません。代わりに、ワークフローの実行中にログを Logging に送信するタイミングを管理します。Logging に送信するために選択するログは、カスタムログと呼ばれます。

ロギングに必要な権限

カスタムログを Logging に送信するには、roles/logging.logWriter ロールを持つサービス アカウントにワークフローを関連付ける必要があります。ワークフローで更新されたサービス アカウントを変更する必要がある場合は、ワークフローの更新をご覧ください。サービス アカウントの作成とロールの割り当ての詳細については、リソースへのアクセス権の付与、変更、取り消しをご覧ください。

実行中にログエントリを作成する

ワークフローの実行中に Logging でログエントリを作成するには、組み込みの sys.log サブワークフローを呼び出すステップをワークフローで定義します。

- step1:
    assign:
        - varA: "Hello"
        - varB: "World"
- logStep:
    call: sys.log
    args:
        text: TEXT
        severity: SEVERITY 
- step2:
    return: ${varA + " " + varB}

ログエントリを作成するときは、以下を定義します。

  • TEXT: 必須。ログに記録されるテキスト。辞書の値を記録する必要がある場合は、${json.encode_to_string(myDictionary)} を使用します。
  • SEVERITY: 省略可。ログエントリの重大度。たとえば、INFOWARNINGCRITICAL です。重大度のすべてのリストについては、Logging リファレンスをご覧ください。

カスタム ワークフロー ログを表示する

カスタムログは、Workflows または Logging で表示できます。1 つのワークフローのカスタムログを表示するには、Workflows の [ログ] タブを使用します。すべてのワークフローのカスタムログをまとめて表示するには、Logging の Logs Explorer ページを使用します。

ワークフローでログを表示する

ワークフローでワークフローのカスタムログを表示するには:

  1. Google Cloud Console の [ワークフロー] ページに移動します。
    [ワークフロー] ページに移動

  2. ワークフローのカスタムログにアクセスするには、ワークフローの名前をクリックして [詳細] ページに移動します。

  3. カスタムログを表示するには、[ログ] をクリックします。

  4. 重大度でログをフィルタするには、[デフォルト] プルダウンをクリックし、表示するログの重大度を選択します。デフォルトでは、すべての重大度レベルのログが表示されます。

ワークフローの [詳細] ページの [ログ] タブに、次のタイプのログが表示されます。

  • Logging に送信されるカスタムログ

  • ワークフロー定義の更新など、ワークフローで実行されるオペレーションの監査ログ

Logging でログを表示する

Logging でカスタムログを表示するには:

  1. Cloud Console の [ログ エクスプローラ] ページに移動します。
    ログ エクスプローラに移動する

  2. クエリビルダーで、[リソース] をクリックして「ワークフロー」と入力し、リストから [ワークフロー] を選択して、[追加] をクリックします。

    ワークフロー ロギング

  3. [実行] をクリックします。

Logging でログを表示する方法の詳細については、ログ エクスプローラの使用をご覧ください。