キュー管理または queue.yaml の使用

このページでは、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 の呼び出しで作成されたキューは無効になります。

次のシナリオを考えてみます。

  1. CreateQueue を呼び出して、「cloud-tasks-queue」という名前のキューを作成します。
  2. 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 キューが存在しない場合は、次の状況で作成されます。

  1. App Engine SDK を使用して、タスクが最初に default キューに追加されたとき。
  2. default キューを指定する queue.yaml ファイルがアップロードされたとき。
  3. default キューを作成する CreateQueue または UpdateQueue が呼び出されたとき。

App Engine との互換性を維持するため、Cloud Tasks では次の制限が適用されます。

  1. 「default」というキューが作成された場合、そのキューは App Engine タスクを使用するキューになります。
  2. 作成された後、ユーザーが default キューを削除することはできません

Cloud Tasks API では、default キューに次の制限も適用されます。

  1. Cloud Tasks API は、default キューまたはその他のキューを自動的に作成しません
  2. その他のキュー同様に default キューで GetQueue を呼び出すと、キューの作成前に呼び出しが行われた場合、「見つかりません」というエラーになります。
  3. 同様に、default キューは作成される前に ListQueues の出力に表示されません。
  4. default キューの構成は UpdateQueue 呼び出しで変更できます。

次のステップ

  • リファレンス ドキュメントの RPC Cloud Tasks API で、利用可能なメソッドを確認する。
  • リファレンス ドキュメントの REST Cloud Tasks API で、利用可能なメソッドを確認する。
  • queue.yaml について読む。