Cloud Tasks の概要

このページでは、Cloud Tasks のタスクとキューの概要と、それぞれの使い方を説明します。Cloud Tasks を使用すると、メインのアプリケーション フローの外部で独立して実行できる作業を分離し、作成したハンドラを使用した非同期での処理に回します。 このような独立した作業は、タスクと呼ばれます。たとえば、ユーザー リクエストの処理の一環としてデータベースを更新する必要がありますが、更新には時間がかかることがあります。この詳細をタスクとしてオフロードすると、リクエストからさらに迅速に戻ることができます。

オフロードされたタスクはキューに追加され、タスクは正常に実行されるまで保持されます。また、キューは、初期構成に基づいて、ディスパッチ フロー制御の一種として機能します。キューを作成して構成すると、それを Cloud Tasks サービスが管理します。タスクが追加されると、キューによってタスクがディスパッチされ、ワーカーによって確実に処理されます。 ユーザー側のレイテンシコスト、サーバーのクラッシュ、リソース消費の制限、再試行の管理など、このプロセスに関連する複雑な管理作業はサービスによって処理されます。

タスク自体は一意の名前と構成情報からなります。リクエストの処理に必要であれば、最初のリクエストのデータ(ペイロード)も含まれます。ペイロードはリクエストの本文で送信されるため、ペイロードを含むタスクは HTTP メソッドとして POST または PUT を使用する必要があります。

App Engine スタンダード環境の第 1 世代ランタイムのユーザーは、App Engine Task Queue API を介して Cloud Tasks サービスにアクセスする必要があります。このメソッドの使用に関する詳細については、Java 8Python 2.7Go 1.9PHP 5.5 のドキュメントをご覧ください。App Engine スタンダード環境の第 2 世代ランタイム、フレキシブル環境、他のプラットフォームのユーザーは、Cloud Tasks API を使用できます。

Cloud Tasks API を使用して Cloud Tasks サービスにアクセスするには、作成した Cloud Tasks キューをホストする App Engine アプリプロジェクトに含まれている必要があります。このアプリは特定のリージョンに配置されます。そのリージョンは Cloud Tasks リクエストの LOCATION_ID パラメータとして使用するため、メモしておいてください。App Engine コマンドで europe-west および us-central と呼ばれる 2 つのロケーションは、Cloud Tasks コマンドではそれぞれ europe-west1 および us-central1 と呼ばれます。これらのリージョン内にあるアプリは、デベロッパーが作成するあらゆるキューのロケーションとして使用されます。 基礎となる Cloud Tasks サービス自体も、キューと同じロケーションで稼働します。

使用例

主な用途としては、次のようなものがあります。

  • データベースの更新など、処理速度に影響を及ぼすバックグラウンド オペレーションをワーカーに委任し、ユーザーのレスポンス時間を短縮する。
  • 本番環境で予期しないインシデントが発生した場合にリクエストを保存する。
  • ユーザーに直接関係のないタスクをメインユーザーのフローから削除し、トラフィックの急増を抑える。
  • サードパーティ API 呼び出しレートの管理

HTTP ターゲットを使用した Cloud Tasks キュー

汎用 HTTP ターゲットの場合、Cloud Tasks サービスは、Cloud FunctionsCloud RunGKECompute Engine、さらにはオンプレミスのウェブサーバーなどの汎用 HTTP エンドポイントにあるワーカーに、タスクの構成方法に応じてタスク リクエストを転送します。これらのキューは確実なレートでリクエストをディスパッチします(このレートは構成可能です)。これらのキューにより、信頼性の高いタスク実行が保証されます。タスクが正常に実行されると、すべてのワーカーは期限の 10 分以内に HTTP レスポンス コード(200~299)を Cloud Tasks サービスに送信する必要があります。 別のレスポンスが送信された場合、あるいはレスポンスがない場合、タスクが再試行されます。

HTTP ベースのキュー

ターゲットはワーカーのスケーリングを管理し、タスクが完了したらタスクをクリーンアップする必要があります。

ターゲットで認証が必要な場合は、2 つのサービス アカウントを設定する必要があります。1 つはアプリケーションとクライアント用であり、もう 1 つはキュー用です。これらのアカウントには、必要な権限を付与する必要があります。また、タスク リクエストには、クライアント サービス アカウントの識別子を含める必要があります。詳細については、HTTP Target タスクの作成をご覧ください。

App Engine ターゲットを使用した Cloud Tasks キュー

App Engine ターゲットの場合、Cloud Tasks サービスは、タスク(または、あまり一般的ではありませんがキュー自体)の構成方法に応じて、タスク リクエストを App Engine 内に配置されたワーカーに転送します。これらのキューは確実なレートでリクエストをディスパッチします(このレートは構成可能です)。これらのキューにより、信頼性の高いタスク実行が保証されます。タスクが正常に実行されると、サービスのインスタンス スケーリングのタイプに応じた期限までに、このインスタンス内で、すべてのワーカーが HTTP レスポンス コード(200~299)を Cloud Tasks サービスに送信する必要があります。コードを返す期限は、自動スケーリングで 10 分以内、手動スケーリングで 24 時間以内です。別のレスポンスが返された場合、あるいはレスポンスがない場合は、タスクが再試行されます。

App Engine ベースのキュー

ハンドラは App Engine の一部であるため、タスクのプロセス管理の大半は Cloud Tasks サービスが処理できます。これには、トラフィック量に応じたワーカーのスケールアップとスケールダウン、完了したタスクの削除も含まれます。

ワークフロー

一般的なワークフローは次のとおりです。

  1. タスクを処理するためのワーカーを作成します。
  2. キューを作成します。
  3. プログラムでタスクを作成し、キューに追加します。
  4. Cloud Tasks サービスが元のアプリケーションに OK を返します。これは、タスクが Cloud Task ストレージに正常に書き込まれて、タスク作成リクエストの高可用性と耐久性が確保されたことを意味します。
  5. タスクがワーカーに渡されます。
  6. ワーカーがタスクを処理します。
  7. シーケンスを完了するために、ワーカーが 2xx の成功ステータス コードを Cloud Tasks サービスに返します。

タスクがキューに渡された後は、最初のリクエストでデータが使用できなくなります。

特徴

Cloud Tasks を使用すると、次のコントロールを使用して非同期作業アイテムをディスパッチできます。

  • 具体的な配信時間のスケジュール
  • 配信レートの管理
  • 再試行動作の構成
  • キュー内の個々のタスクへのアクセスと管理
  • タスクの重複排除の有効化

利用規約

次の表に、Cloud Tasks の動作の側面を説明する主要な用語を記載します。

用語 定義
キュー 単一の構成で管理される、同じターゲット タイプのタスクのセット。
ターゲット タイプ タスクの処理方法を定義します。
ワーカー タスクを処理するサービス。
試行 タスクを実行しようとすること。
ディスパッチの試行 Cloud Tasks がタスクをそのターゲットに送信すること。
試行のレスポンス 正常に完了したか失敗したタスクに関連付けられた作業を示すワーカーからのレスポンス。
再試行 タスクの実行を複数回試行します。再試行回数は、RetryConfig によって設定されます。
レート制限 キューのレート制限。

指標

Stackdriver では、次の定義済みの Cloud Task 指標を利用できます。

指標タイプ
表示名
種類、タイプ、単位
説明
ラベル
api/request_count
API リクエスト
DELTA, INT64, 1
Cloud Tasks API の呼び出し数。
api_method: 呼び出された API メソッド(例: CreateTask)
response_code: 文字列での正規のレスポンス コード(例: OK)。
queue/depth
ベータ版キューの深さ
GAUGEINT641
キュー内のタスクの数。60 秒ごとにサンプリングされます。サンプリング後、データは最長 120 秒間表示されません。
queue/task_attempt_count
タスク試行回数
DELTA, INT64, 1
レスポンス コード別のタスクの試行回数。
response_code: 文字列での正規のレスポンス コード(例: OK)。
queue/task_attempt_delays
タスク試行の遅延
DELTA, DISTRIBUTION, ms
予定された試行時間と実際の試行時間の間の遅延。