このページでは、App Engine タスクを処理するワーカーコードである App Engine タスクハンドラの作成方法を説明します。Cloud Tasks キューは HTTP リクエストをタスクハンドラに送信します。処理が正常に完了すると、ハンドラは 200
〜299
の HTTP ステータス コードをキューに返します。その他の値を返した場合、タスクが失敗し、キューがタスクを再試行します。
App Engine タスクキュー リクエストは、IP アドレス 0.1.0.2
から送信されます。App Engine 環境に送信されるリクエストの IP 範囲もご覧ください。
C#
Go
Java
Node.js
PHP
Python
Ruby
タイムアウト
App Engine タスクには、実行中のサービスのスケーリング タイプに応じて固有のタイムアウトが設定されています。
スタンダード環境で実行されているワーカー サービスの場合:
- 自動スケーリング: タスクの処理は 10 分で完了する必要があります。
- 手動または基本スケーリング: リクエストは最大 24 時間まで実行できます。
フレキシブル環境で動作しているワーカー サービスの場合: すべてのタイプに 60 分のタイムアウトが設定されます。
ハンドラが期限までに処理を完了できない場合、キューはタスクが失敗したとみなしてタスクを再試行します。
App Engine タスクリクエスト ヘッダーの読み取り
Cloud Tasks キューによって App Engine ハンドラに送信されるリクエストは、特殊なヘッダーを有しています。このヘッダーには、ハンドラが使用する可能性のあるタスク固有の情報が含まれています。
これらのヘッダーは内部で設定されます。アプリケーションに対する外部ユーザー リクエストに、このようなヘッダーが 1 つでも含まれている場合は、いずれも内部ヘッダーで置き換えられます。ただし、ログイン済みのアプリケーション管理者からのリクエストは例外です。アプリケーション管理者は、テストの目的でヘッダーを設定することが許可されています。
App Engine タスク リクエストには、常に次のヘッダーが含まれます。
ヘッダー | 説明 |
---|---|
X-AppEngine-QueueName |
キューの名前。 |
X-AppEngine-TaskName |
タスクの「省略」名。または、作成時に名前が指定されなかった場合は、システムによって生成された一意の ID です。これは、完全なタスク名の my-task-id 値です(例: task_name = projects/my-project-id/locations/my-location/queues/my-queue-id/tasks/my-task-id )。 |
X-AppEngine-TaskRetryCount |
タスクが再試行された回数。最初の試行の場合は、この値は 0 です。この試行回数には、インスタンス数不足が原因でタスクが異常終了したため実行フェーズに到達できなかった試行も含まれています。 |
X-AppEngine-TaskExecutionCount |
タスクが実行され、ハンドラからレスポンスを受信した回数。Cloud Tasks は成功のレスポンスを受け取った時点でタスクを削除するため、それ以前のハンドラからのレスポンスはすべて失敗を意味します。この回数には、インスタンス数不足が原因の失敗は含まれていません。実行を試行する前に更新される場合、X-AppEngine-TaskExecutionCount は X-AppEngine-TaskRetryCount と同じにできます。 |
X-AppEngine-TaskETA |
タスクのスケジュール時間。1970 年 1 月 1 日からの秒数で指定されます。 |
リクエスト ハンドラが前述のヘッダーのいずれかを検出した場合、そのリクエストは Cloud Tasks からのリクエストであると想定できます。
さらに、Cloud Tasks からのリクエストには次のヘッダーが含まれる場合もあります。
ヘッダー | 説明 |
---|---|
X-AppEngine-TaskPreviousResponse |
前回の再試行の HTTP レスポンス コード。 |
X-AppEngine-TaskRetryReason |
タスクを再試行する理由。 |
X-AppEngine-FailFast |
既存のインスタンスが使用できない場合は、タスクがすぐに失敗することを意味します。 |
ターゲット ルーティング
App Engine タスクでは、キューとタスクハンドラは同じ Google Cloud プロジェクト内で動作します。トラフィックは転送中に暗号化され、Google のデータセンターの外部に提供されることがありません。プロトコル(HTTP や HTTPS など)を明示的に設定することはできません。ただし、ハンドラへのリクエストは HTTP プロトコルを使用したかのように見えます。
安全なタスクハンドラ、安全性の低いタスクハンドラ、サポートされるランタイムにおいては login: admin
で制限された URI に、タスクをディスパッチできます。タスクはユーザーとして動作しないため、login: required
で制限された URI にディスパッチできません。タスク ディスパッチはリダイレクトにも従いません。
次のステップ
- RPC API リファレンスでタスクの詳細を学習する。
- REST API リファレンスでタスクについて詳しく学習する。