ワークフローを実行すると、そのワークフローに関連付けられた現在のワークフロー定義が実行されます。
ワークフロー実行リクエストでランタイム引数を渡し、ワークフロー変数を使用してこれらの引数にアクセスできます。詳細については、実行リクエストでランタイム引数を渡すをご覧ください。
ワークフローの実行が完了すると、履歴と結果が一定期間保持されます。詳細については、割り当てと上限をご覧ください。
準備
組織で定義されているセキュリティの制約により、次の手順を完了できない場合があります。トラブルシューティング情報については、制約のある Google Cloud 環境でアプリケーションを開発するをご覧ください。
- 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.
- ワークフローが他の Google Cloud リソースにアクセスする場合、適切な権限を持つサービス アカウントに関連付けられていることを確認します。既存のワークフローに関連付けられているサービス アカウントについては、ワークフローに関連付けられたサービス アカウントの確認をご覧ください。
リソースを作成してサービス アカウントを関連付けるには、対象のリソースを作成し、リソースに関連付けるサービス アカウントになりすますための権限が必要です。詳細については、サービス アカウント権限をご覧ください。
- Google Cloud コンソールまたは Google Cloud CLI を使用してワークフローをデプロイします。
ワークフローを実行する
クライアント ライブラリ、Google Cloud コンソール、gcloud CLI を使用するか、Workflows REST API にリクエストを送信して、ワークフローを実行できます。
Console
ワークフローを実行するには、Google Cloud コンソールで [Workflows] ページに移動します。
[ワークフロー] ページで、ワークフローを選択して詳細ページに移動します。
[ワークフローの詳細] ページで [play_arrow 実行] を選択します。
[ワークフローの実行] ページの [入力] ペインに、ワークフローに渡すオプションのランタイム引数を入力できます。引数は JSON 形式にする必要があります(例:
{"animal":"cat"}
)。ワークフローでランタイム引数を使用しない場合は、ここは空白のままにします。必要に応じて、ワークフローの実行中に適用するコールロギングのレベルを指定します。[呼び出しログレベル] リストで、次のいずれかを選択します。
- 指定なし: ロギングレベルは指定されません。この設定がデフォルトです。 実行ログレベルが指定されていない場合を除き、実行ログレベルがワークフローのログレベルよりも優先されます(デフォルト)。実行ログレベルが指定されていない場合、ワークフローのログレベルが適用されます。
- エラーのみ: キャッチされた例外をすべてログに記録します。または、例外により呼び出しが停止した場合についてもログに記録します。
- すべてのコール: サブワークフローまたはライブラリ関数のすべての呼び出しとその結果を記録します。
- ログがない: コールロギングはありません。
[実行] をクリックします。
[実行の詳細] ページで、出力、実行 ID と状態、ワークフロー実行の現在のステップまたは最後のステップを含む、実行結果を確認できます。詳細については、ワークフローの実行結果にアクセスするをご覧ください。
gcloud
ターミナルを開きます。
実行するワークフローの名前を見つけます。ワークフローの名前がわからない場合は、次のコマンドを入力して、すべてのワークフローを一覧表示できます。
gcloud workflows list
ワークフローは、
gcloud workflows run
コマンドまたはgcloud workflows execute
コマンドを使用して実行できます。ワークフローを実行し、実行が完了するまで待ちます。
gcloud workflows run WORKFLOW_NAME \ --call-log-level=CALL_LOGGING_LEVEL \ --data=DATA
実行の試行の完了を待たずにワークフローを実行します。
gcloud workflows execute WORKFLOW_NAME \ --call-log-level=CALL_LOGGING_LEVEL \ --data=DATA
以下を置き換えます。
WORKFLOW_NAME
: ワークフローの名前。CALL_LOGGING_LEVEL
(省略可): 実行中に適用するコールロギングのレベル。以下のいずれかになります。none
: ロギングレベルは指定されません。この設定がデフォルトです。実行ログレベルが指定されていない場合を除き、実行ログレベルがワークフローのログレベルよりも優先されます(デフォルト)。実行ログレベルが指定されていない場合、ワークフローのログレベルが適用されます。log-errors-only
: キャッチされた例外をすべてログに記録します。または、例外により呼び出しが停止した場合についてもログに記録します。log-all-calls
: サブワークフローまたはライブラリ関数のすべての呼び出しとその結果をログに記録します。log-none
: コールロギングなし。
DATA
(省略可): ワークフローのランタイム引数(JSON 形式)。
gcloud workflows execute
を実行すると、ワークフロー実行の試行の一意の ID が返され、出力は次のようになります。To view the workflow status, you can use following command: gcloud workflows executions describe b113b589-8eff-4968-b830-8d35696f0b33 --workflow workflow-2 --location us-central1
実行のステータスを表示するには、前の手順で返されたコマンドを入力します。
実行の試行が成功した場合、出力は次のようになります。state
はワークフローの正常終了を示し、status
は実行の最終ワークフロー ステップを示します。
argument: '{"searchTerm":"Friday"}' endTime: '2022-06-22T12:17:53.086073678Z' name: projects/1051295516635/locations/us-central1/workflows/myFirstWorkflow/executions/c4dffd1f-13db-46a0-8a4a-ee39c144cb96 result: '["Friday","Friday the 13th (franchise)","Friday Night Lights (TV series)","Friday the 13th (1980 film)","Friday the 13th","Friday the 13th (2009 film)","Friday the 13th Part III","Friday the 13th Part 2","Friday (Rebecca Black song)","Friday Night Lights (film)"]' startTime: '2022-06-22T12:17:52.799387653Z' state: SUCCEEDED status: currentSteps: - routine: main step: returnOutput workflowRevisionId: 000001-ac2
クライアント ライブラリ
次のサンプルでは、ワークフロー myFirstWorkflow
をすでにデプロイしていることを前提としています。
クライアント ライブラリをインストールし、開発環境を設定します。詳細については、Workflows クライアント ライブラリの概要をご覧ください。
ローカルマシンにサンプルアプリのリポジトリのクローンを作成します。
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
または、zip 形式のサンプルをダウンロードし、ファイルを抽出してもかまいません。
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
または、zip 形式のサンプルをダウンロードし、ファイルを抽出してもかまいません。
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
または、zip 形式のサンプルをダウンロードし、ファイルを抽出してもかまいません。
Workflows のサンプルコードが含まれているディレクトリに移動します。
Java
cd java-docs-samples/workflows/cloud-client/
Node.js
cd nodejs-docs-samples/workflows/quickstart/
Python
cd python-docs-samples/workflows/cloud-client/
サンプルコードを見てみましょう。
Java
Node.js (JavaScript)
Node.js (TypeScript)
Python
サンプルでは以下を行います。
- Workflows 用の Cloud クライアント ライブラリを設定します。
- ワークフローを実行します。
- 実行が終了するまで、ワークフローの実行をポーリングします(指数バックオフを使用)。
- 実行結果を出力します。
サンプルを実行するには、まず依存関係をインストールします。
Java
mvn compile
Node.js (JavaScript)
npm install
Node.js (TypeScript)
npm install && npm run build
Python
pip3 install -r requirements.txt
スクリプトを実行します。
Java
GOOGLE_CLOUD_PROJECT=PROJECT_ID LOCATION=CLOUD_REGION WORKFLOW=WORKFLOW_NAME mvn compile exec:java -Dexec.mainClass=com.example.workflows.WorkflowsQuickstart
Node.js (JavaScript)
npm start PROJECT_ID CLOUD_REGION WORKFLOW_NAME
Node.js (TypeScript)
npm start PROJECT_ID CLOUD_REGION WORKFLOW_NAME
Python
GOOGLE_CLOUD_PROJECT=PROJECT_ID LOCATION=CLOUD_REGION WORKFLOW=WORKFLOW_NAME python3 main.py
以下を置き換えます。
PROJECT_ID
(必須)Google Cloud プロジェクトのプロジェクト IDCLOUD_REGION
: ワークフローのロケーション(デフォルト:us-central1
)WORKFLOW_NAME
: ワークフローの ID(デフォルト:myFirstWorkflow
)
出力は次のようになります。
Execution finished with state: SUCCEEDED ["Sunday","Sunday in the Park with George","Sunday shopping","Sunday Bloody Sunday","Sunday Times Golden Globe Race","Sunday All Stars","Sunday Night (South Korean TV series)","Sunday Silence","Sunday Without God","Sunday Independent (Ireland)"]
REST API
特定のワークフローの最新リビジョンを使用して新しい実行を作成するには、projects.locations.workflows.executions.create
メソッドを使用します。
なお、認証を行うには、ワークフローを実行する権限があるサービス アカウントが必要になります。たとえば、サービス アカウントに Workflows 起動元ロール(roles/workflows.invoker
) を付与して、そのアカウントにワークフロー実行をトリガーする権限を持たせることができます。詳細については、ワークフローを呼び出すをご覧ください。
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_NUMBER
: [IAM と管理] の [設定] ページに表示される Google Cloud プロジェクト番号。LOCATION
: ワークフローがデプロイされているリージョン(例:us-central1
)。WORKFLOW_NAME
: ワークフローのユーザー定義の名前(例:myFirstWorkflow
)。PARAMETER
: 省略可。実行しているワークフローが、実行リクエストの一部として渡すランタイム引数を受け取ることができる場合、値が1 つ以上のエスケープされたパラメータ値のペアである JSON 形式の文字列をリクエスト本文に追加できます(例:"{\"searchTerm\":\"asia\"}"
)。VALUE
: 省略可。ワークフローがランタイム引数として受け取るパラメータ値のペアの値。CALL_LOGGING_LEVEL
: 省略可。 実行中に適用する呼び出しロギングのレベル。デフォルトではロギングレベルが指定されず、代わりにワークフロー ログレベルが適用されます。詳細については、Logging にログを送信するをご覧ください。次のいずれかになります。CALL_LOG_LEVEL_UNSPECIFIED
: ロギングレベルは指定されず、代わりにワークフロー ログレベルが適用されます。この設定がデフォルトです。それ以外の場合は、実行ログレベルが適用され、ワークフロー ログレベルよりも優先されます。LOG_ERRORS_ONLY
: キャッチされた例外をすべてログに記録します。または、例外により呼び出しが停止した場合についてもログに記録します。LOG_ALL_CALLS
: サブワークフローまたはライブラリ関数のすべての呼び出しとその結果をログに記録します。LOG_NONE
: コールロギングなし。
BACKLOG_EXECUTION
: 省略可。true
に設定すると、同時実行割り当てが使い果たされても実行はバックログになりません。詳細については、実行バックログを管理するをご覧ください。
リクエストの本文(JSON):
{ "argument": "{\"PARAMETER\":\"VALUE\"}", "callLogLevel": "CALL_LOGGING_LEVEL", "disableConcurrencyQuotaOverflowBuffering": "BACKLOG_EXECUTION" }
リクエストを送信するには、次のいずれかのオプションを展開します。
成功した場合、レスポンスの本文には、新しく作成された Execution
のインスタンスが含まれます。
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/workflows/WORKFLOW_NAME/executions/EXECUTION_ID", "startTime": "2023-11-07T14:35:27.215337069Z", "state": "ACTIVE", "argument": "{\"PARAMETER\":\"VALUE\"}", "workflowRevisionId": "000001-2df", "callLogLevel": "CALL_LOGGING_LEVEL", "status": {} }
実行のステータスを確認する
ワークフロー実行のステータスの確認に役立つコマンドがいくつかあります。
ワークフロー実行の試行とその ID のリストを取得するには、次のコマンドを入力します。
gcloud workflows executions list WORKFLOW_NAME
WORKFLOW_NAME
はワークフローの名前で置き換えます。このコマンドは、次のような
NAME
値を返します。projects/PROJECT_NUMBER/locations/REGION/workflows/WORKFLOW_NAME/executions/EXECUTION_ID
実行 ID をコピーして、次のコマンドで使用します。
実行の試行のステータスを確認し、試行が完了するまで待機するには、次のコマンドを入力します。
gcloud workflows executions wait EXECUTION_ID
EXECUTION_ID
を実行の試行 ID に置き換えます。このコマンドは、実行の試行の完了を待ってから、結果を返します。
最後の実行が完了するまで待ち、完了した実行結果を返すには、次のコマンドを入力します。
gcloud workflows executions wait-last
同じ
gcloud
セッションで以前の実行を試行した場合、コマンドは、以前の実行の試行が完了するのを待ってから、完了した実行の結果を返します。以前の試行が存在しない場合、gcloud
は次のエラーを返します。ERROR: (gcloud.workflows.executions.wait-last) [NOT FOUND] There are no cached executions available.
最後の実行のステータスを取得するには、次のコマンドを入力します。
gcloud workflows executions describe-last
同じ
gcloud
セッションで以前の実行を試行した場合、たとえそれが実行中であっても、コマンドは最後の実行の結果を返します。以前の試行が存在しない場合、gcloud
は次のエラーを返します。ERROR: (gcloud.beta.workflows.executions.describe-last) [NOT FOUND] There are no cached executions available.
実行をフィルタ
フィルタは、workflows.executions.list
メソッドが返すワークフロー実行のリストに適用できます。
次のフィールドでフィルタが可能です。
createTime
disableOverflowBuffering
duration
endTime
executionId
label
startTime
state
stepName
workflowRevisionId
たとえば、ラベル(labels."fruit":"apple"
)でフィルタするには、次のような API リクエストを作成します。
GET https://workflowexecutions.googleapis.com/v1/projects/MY_PROJECT/locations/MY_LOCATION/workflows/MY_WORKFLOW/executions?view=full&filter=labels.%22fruit%22%3A%22apple%22"
ここで
view=full
は、返される実行で入力するフィールドを定義するビューを指定します。この場合、すべてのデータlabels.%22fruit%22%3A%22apple%22
は、URL エンコードされたフィルタ構文です。
詳細については、AIP-160 フィルタリングをご覧ください。
実行バックログを管理する
実行バックログを使用すると、クライアントサイドの再試行を回避し、実行遅延を排除して、スループットを最大化できます。バックログ実行は、実行同時実行の割り当てが使用可能になるとすぐに自動的に実行されます。
同時に実行できるアクティブなワークフロー実行には最大数があります。この割り当てが使い果たされ、実行バックログが無効になっている場合、またはバックログ実行の割り当てに達した場合、新しい実行は HTTP 429 Too many requests
ステータス コードで失敗します。実行バックログを有効にすると、新しい実行は成功し、QUEUED
状態で作成されます。実行の同時実行割り当てが使用可能になるとすぐに、実行が自動的に実行され、ACTIVE
状態になります。
デフォルトでは、実行バックログは、次の例外を除いて、すべてのリクエスト(Cloud Tasks によってトリガーされたリクエストを含む)に対して有効になっています。
- ワークフローで
executions.run
コネクタまたはexecutions.create
コネクタを使用して実行を作成する場合、実行バックログはデフォルトで無効になります。実行のdisableConcurrencyQuotaOverflowBuffering
フィールドを明示的にfalse
に設定することで構成できます。 - Pub/Sub によってトリガーされる実行の場合、実行バックログは無効になり、構成できません。
次の点にご注意ください。
- キューに入れられた実行は、ベスト エフォート方式で先入れ先出し(FIFO)順序で開始されます。
createTime
タイムスタンプ フィールドは、実行が作成された日時を示します。startTime
タイムスタンプは、実行がバックログ キューから自動的にポップされて、実行が開始されるタイミングを示します。バックログにない実行の場合、両方のタイムスタンプ値は同じです。- バックログ実行の上限は、
workflowexecutions.googleapis.com/executionbacklogentries
割り当て指標を使用して確認できます。詳細については、割り当ての表示と管理をご覧ください。
実行バックログを無効にする
実行バックログは、Google Cloud CLI の使用時にフラグを設定することで無効にできます。次に例を示します。
gcloud workflows execute WORKFLOW_NAME --disable-concurrency-quota-overflow-buffering
または、Workflows REST API に実行リクエストを送信するときに、リクエスト JSON 本文の disableConcurrencyQuotaOverflowBuffering
フィールドを true
に設定して、実行バックログを無効にすることもできます。次に例を示します。
{ "argument": {"arg1":"value1"}, "callLogLevel": "LOG_NONE", "disableConcurrencyQuotaOverflowBuffering": true }
詳細については、ワークフローを実行するをご覧ください。