Cloud Tasks を使用してワークフローをキューに入れ、非同期で実行できます。
Cloud Tasks には次のコントロールがあります。
- 具体的な配信時間のスケジュール
- 配信レートの管理
- 再試行動作の構成
- キュー内の個々のタスクへのアクセスと管理
- タスクの重複排除の有効化
これらのコントロールは、ワークフローをトリガーするリクエストや、Workflows の上限を予期せず超える可能性のあるリクエストを管理する場合などに役立ちます。レート制限と再試行を使用して Cloud Tasks キューを構成することで、このようなすべてのリクエストによってワークフローが確実に実行されるようにできます。
詳細については、Cloud Tasks について理解するをご覧ください。
次の点にご注意ください。
Execution API の write リクエストの Workflows の上限に基づいてレート制限を行う必要があります。必要に応じて、Google Cloud コンソールでほとんどの割り当てを増加させるようリクエストできます。割り当て増加リクエストについて詳しくは、こちらをご覧ください。
Cloud Tasks は「少なくとも 1 回」配信を行うように設計されていますが、Workflows では Cloud Tasks からの重複リクエストの 1 回限りの処理は保証されません。
Workflows で実行バックログを有効にすると、実行の遅延を解消し、スループットを最大化できます。バックログ実行は、実行同時実行の割り当てが使用可能になるとすぐに自動的に実行されます。詳細については、実行バックログを管理するをご覧ください。
始める前に
- キューに追加するワークフローがまだない場合は、作成します。
-
Enable the Cloud Tasks API.
ワークフローを実行するタスクをキューに入れる
Cloud Tasks が Workflows API にリクエストを行えるように、サービス アカウントを作成します。
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
SERVICE_ACCOUNT_NAME
は、6~30 文字の名前に置き換えます。小文字の英数字とハイフンを使用できます。作成したサービス アカウントの名前は変更できません。Cloud Tasks のコマンドを実行するプリンシパルが Identity and Access Management(IAM)サービス アカウントとして機能できるように、プリンシパルがサービスになりすますことを許可するロールを付与します。
新しいサービス アカウントがワークフローをトリガーする権限を持つように、このアカウントに workflows.invoker ロールを付与します。
gcloud projects add-iam-policy-binding PROJECT_NAME \ --member serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com \ --role roles/workflows.invoker
以下を置き換えます。
PROJECT_NAME
: Google Cloud Platform プロジェクトの名前です。SERVICE_ACCOUNT_NAME
: 前に作成したサービス アカウントの名前です。
Cloud Tasks キューがまだない場合は、作成します。
以前に作成した認証用のサービス アカウントを使用して、ワークフローの HTTP エンドポイントをターゲットとするタスクを作成します。
gcloud tasks create-http-task \ --queue="QUEUE_ID" \ --url="https://workflowexecutions.googleapis.com/v1/projects/PROJECT_NAME/locations/REGION_NAME/workflows/WORKFLOW_NAME/executions" \ --body-content="{\"argument\": \"DOUBLE_ESCAPED_JSON_STRING\"}" \ --oauth-service-account-email="SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com"
以下を置き換えます。
QUEUE_ID
: Cloud Tasks キューに割り当てた識別子です。例:my-queue
PROJECT_NAME
: Google Cloud プロジェクトの名前です。REGION_NAME
: ワークフローが存在するリージョンです(us-central1
など)。WORKFLOW_NAME
: タスクを作成するワークフローの名前です。DOUBLE_ESCAPED_JSON_STRING
: 渡す引数を JSON エンコードしたものです。引用符で囲まれた文字列に含まれる二重引用符は、バックスラッシュ(\)を使用してエスケープします(例: )。--body-content="{\"argument\": \"{\\\"foo\\\": \\\"bar\\\"}\"}"
SERVICE_ACCOUNT_NAME
: 前に作成したサービス アカウントの名前です。
タスクが作成され、Cloud Tasks キューに追加されます。ワークフローの実行が開始されて HTTP
2xx
ステータス コードが返されるまでタスクはキュー内に残り、その時点で Cloud Tasks はタスクが完了したと見なします。