このページでは、Cloud Tasks API の使用によるキューの管理と、Cloud Tasks の queue.yaml
ファイルのアップロードによるキューの管理の違いについて説明します。また、両方の方法を使用する場合の危険性や共通の問題に対処する方法についても説明します。
はじめに
Cloud Tasks API は、App Engine Task Queue サービスへの App Engine に依存しないインターフェースを提供します。このインターフェースでは、Console や gcloud
コマンドを使用してキューを管理できます。Cloud Tasks API で作成されたキューは App Engine SDK からアクセスできます(その逆も同様)。互換性を維持するため、App Engine SDK で使用される構成ファイル(queue.yaml
)を使用することや、Cloud Tasks API を介して使用されるキューを作成して構成することもできます。ただし、ファイルによる構成と Cloud Tasks API による構成を混在させると、予期しない結果が発生する可能性があります。
queue.yaml
と Cloud Tasks のキュー管理メソッドが混在した場合の危険性
基になるサービスとしては、queue.yaml
ファイルは確実な方法です。作成方法に関係なく、プロジェクト内の既存のキューを省略した queue.yaml
をアップロードすると、これらのキューが無効または一時停止になります。したがって、Cloud Tasks API を使用して CreateQueue
または UpdateQueue
を呼び出し、それらを省略した queue.yaml
ファイルをアップロードすると、Cloud Tasks の呼び出しで作成されたキューは無効になります。
次のシナリオを考えてみます。
CreateQueue
を呼び出して、「cloud-tasks-queue」という名前のキューを作成します。queue.yaml
ファイルをアップロードし、次の内容を追加します。queue: - name: queue-yaml-queue
このプロジェクトのキューの現在の状態を見てみます。「cloud-tasks-queue」というキューとその前に存在していた他のキューは DISABLED
状態で、「queue-yaml-queue」というキューは RUNNING
状態です。
Cloud Tasks API を使用してキューを作成した場合、この動作は意外かもしれません。以下の手順では無効なキューを再開する方法について説明します。
同様に、Cloud Tasks API でキューが無効になっているが、後でアップロードされた queue.yaml
ファイルに表示された場合、そのキューは再開されます。
DeleteQueue
メソッドで削除されたキューが後で queue.yaml
ファイルに表示される場合、削除後キュー名が数日間再利用できないため、queue.yaml
アップロードが失敗することがあります。
ベスト プラクティス
Cloud Tasks または App Engine を初めて使用する場合は、Cloud Tasks API だけを使用してキューを管理し、queue.yaml
との併用は避けてください。Cloud Tasks でキューを管理すると、キューの作成、更新、削除を行うときの選択肢が増えます。
ただし、queue.yaml
をすでに利用していて、queue.yaml
と Cloud Tasks のキュー管理メソッドを混在させる危険性を理解している場合に限り、キュー管理メソッドの切り替えを検討してください。
ユーザーがタスク管理メソッドを混在させるのを防ぐためのひとつの方法は、すべてのユーザーがキューの作成、更新、削除に使用する必要があるウェブ アプリまたはコマンドライン ツールを作成することです。そのツールが Cloud Tasks のキュー管理メソッドまたは queue.yaml
を使用するかどうかは、ユーザーが気にする必要のないツールの実装の詳細です。ユーザーがこのツールを使用する必要がある場合、Cloud Tasks のキュー管理メソッドと queue.yaml
の使用を不注意に混在させることはありません。このようなツールの使用を適用するには、ツールにキュー管理者のロールを付与し、ユーザーにツールの使用を認証させます。アクセス管理の詳細については、キュー構成の保護をご覧ください。
デバッグ
プロジェクトの管理アクティビティ監査ログを調べると、キューの作成、更新、削除など、キューの設定変更の履歴を確認できます。
gcloud logging read \
'protoPayload.methodName=
(com.google.appengine.legacy.queue_created OR
com.google.appengine.legacy.queue_updated OR
google.cloud.tasks.v2.CloudTasks.CreateQueue OR
google.cloud.tasks.v2.CloudTasks.UpdateQueue OR
google.cloud.tasks.v2.CloudTasks.DeleteQueue)'
たとえば、既存のキューが queue.yaml
アップロードによって無効にされた場合、「Disabled queue '[QUEUE_NAME]'」が com.google.appengine.legacy.queue_updated
メソッドによって監査ログに表示されます。
queue.yaml
のアップロードで無効になったキューを再開する方法
queue.yaml
と Cloud Tasks キュー管理メソッドを組み合わせて queue.yaml
ファイルをアップロードすると、Cloud Tasks API で作成されたキューが誤って無効になることがあります。
キューを再開するには、キューで ResumeQueue
を呼び出すか、queue.yaml
に追加してアップロードします。以前にキューの queue.yaml
構成でカスタム処理 rate
を設定していた場合、ResumeQueue
を呼び出すとデフォルトの rate
にキューがリセットされる点に注意してください。これは ResumeQueue
への応答の maxDispatchesPerSecond
フィールドに反映されます。
割り当て
queue.yaml
を使用してキューを作成する場合、デフォルトでは、最大 100 のキューを作成できます。Cloud Tasks API を使用して作成されたキューでは、デフォルトの最大キュー数は 1,000 です。他の場合と同様に、queue.yaml
メソッドと Cloud Tasks API メソッドを混在させると、予期しない結果が生じることがあります。たとえば、queue.yaml
を使用して一部のキューを作成し、割り当てを 2,000 に増やしたとします。その後、Cloud Tasks API メソッドを使用してさらにキューを作成すると、割り当てエラーが発生します。Google Cloud コンソールの [割り当て] ページにある [割り当ての編集] を使用してリクエストを送信します。
Cloud Tasks のキュー管理メソッドに関する追加情報
キュー設定とキューの起動の遅延
キュー設定の変更は、数分かかることがあります。たとえば、CreateQueue
または UpdateQueue
を呼び出すと、そのキューの CreateTask
が呼び出されるまでに数分かかることがあります。
Cloud Tasks と default
App Engine キュー
「default」という名前の App Engine キューに対しては、App Engine SDK でも Cloud Tasks API でも特殊な処理が行われます。
default
キューが存在しない場合は、次の状況で作成されます。
- App Engine SDK を使用して、タスクが最初に
default
キューに追加されたとき。 default
キューを指定するqueue.yaml
ファイルがアップロードされたとき。default
キューを作成するCreateQueue
またはUpdateQueue
が呼び出されたとき。
App Engine との互換性を維持するため、Cloud Tasks では次の制限が適用されます。
- 「default」というキューが作成された場合、そのキューは App Engine タスクを使用するキューになります。
- 作成された後、ユーザーが
default
キューを削除することはできません。
Cloud Tasks API では、default
キューに次の制限も適用されます。
- Cloud Tasks API は、
default
キューまたはその他のキューを自動的に作成しません。 - その他のキュー同様に
default
キューでGetQueue
を呼び出すと、キューの作成前に呼び出しが行われた場合、「見つかりません」というエラーになります。 - 同様に、
default
キューは作成される前にListQueues
の出力に表示されません。 default
キューの構成はUpdateQueue
呼び出しで変更できます。
次のステップ
- リファレンス ドキュメントの RPC Cloud Tasks API で、利用可能なメソッドを確認する。
- リファレンス ドキュメントの REST Cloud Tasks API で、利用可能なメソッドを確認する。
queue.yaml
について読む。