キュー管理と queue.yaml の使用

このページでは、Cloud Tasks API の使用によるキューの管理と、Cloud Tasks の queue.yaml ファイルまたは queue.xml ファイルのアップロードによるキューの管理の違いについて説明します。また、両方の方法を使用する場合の危険性や共通の問題に対処する方法についても説明します。

概要

Cloud Tasks API は、App Engine Task Queue サービスへの App Engine に依存しないインターフェースを提供します。このインターフェースの一部として、コンソールや 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.yamlqueue.xml の使用は避けてください。Cloud Tasks でキューを管理すると、キューの作成、更新、削除を行うときの選択肢が増えます。

ただし、queue.yaml または queue.xml をすでに利用していて、queue.yaml と Cloud Tasks のキュー管理メソッドを混在させる危険性を理解している場合に限り、キュー管理メソッドの切り替えを検討してください。

構成方法が混在しないように、グループと権限を使用してキュー管理アクティビティへのアクセスを制御することもできます。詳細については、キュー設定の保護をご覧ください。

デバッグ

プロジェクトの管理アクティビティ監査ログを調べると、キューの作成、更新、削除など、キューの設定変更の履歴を確認できます。

    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 メソッドを使用して追加のキューを作成すると、割り当て不足のエラーが発生します。この問題を解決するには、Cloud Console の [割り当て] ページの [割り当てを編集] を使用してリクエストを送信します。

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 呼び出しで変更できます。

次のステップ