queue.yaml ファイルを使用してキューを管理できますが、キュー管理メソッドを混在させると、予期しない結果が生じる可能性があります。このガイドでは、これらの方法を混在させることのリスクと、一般的な構成の問題を解決する方法について説明します。
Cloud Tasks API は、App Engine Task Queue サービスへの独立したインターフェースを提供します。このインターフェースを使用すると、 Google Cloud コンソールまたは Google Cloud CLI を介してキューを管理できます。Cloud Tasks API で作成したキューには App Engine SDK(プラットフォーム固有の API、スタンドアロン ツール、ランタイム ファイルのコレクション)からアクセスできます。また、App Engine SDK で作成したキューには Cloud Tasks API からアクセスできます。
互換性を維持するため、App Engine SDK の構成ファイルである queue.yaml を使用して、Cloud Tasks API のキューを作成して構成できます。ただし、このファイルと Cloud Tasks API を使用してキューを管理すると、このガイドで説明する問題が発生する可能性があります。
始める前に
Cloud Tasks または App Engine を初めて使用する場合は、Cloud Tasks API だけを使用してキューを管理し、queue.yaml の使用は避けてください。Cloud Tasks のキュー管理メソッドを使用すると、キューの作成、更新、削除を行うときの選択肢が増えます。
queue.yaml をすでに利用している場合は、キュー管理メソッドを混在させるリスクを理解している場合に限り、Cloud Tasks のキュー管理メソッドへの切り替えを検討してください。
キュー管理方法を適用する
キュー管理メソッドの混在を防ぐには、キューの作成、更新、削除を行うウェブ アプリまたはコマンドライン ツールを作成します。そのツールが Cloud Tasks のキュー管理メソッドまたは queue.yaml を使用するかどうかは、ユーザーが気にする必要のない実装の詳細です。ツールの使用を強制することで、メソッドの不注意な混在を防ぐことができます。Cloud Tasks キュー管理者 Identity and Access Management(IAM)ロールをツールに付与し、ユーザーに認証を要求します。アクセス管理の詳細については、キュー構成の保護をご覧ください。
キュー構成の遅延
キュー構成の変更は、数分かかることがあります。たとえば、CreateQueue または UpdateQueue を呼び出すと、そのキューの CreateTask が呼び出されるまでに数分かかることがあります。
App Engine default キュー
default という名前の App Engine キューに対しては、App Engine SDK でも Cloud Tasks API でも特殊な処理が行われます。
default キューはいつ作成されますか? | |
|---|---|
|
|
| Cloud Tasks にはどのような制限がありますか? | |
App Engine との互換性を維持するため、Cloud Tasks では |
|
キュー管理メソッドが混在した場合のリスク
基になるサービスとしては、queue.yaml ファイルは確実な方法です。作成方法に関係なく、プロジェクト内の既存のキューを省略した queue.yaml ファイルをアップロードすると、これらのキューが無効になるか、一時停止されます。たとえば、Cloud Tasks API を使用して CreateQueue または UpdateQueue を呼び出し、それらのキューを省略した queue.yaml ファイルをアップロードすると、キューは無効になります。その後、無効にしたキューを再開する必要があります。
キュー管理メソッドを混在させると、予期しない動作が発生する可能性があります。たとえば、次のシナリオについて考えてみましょう。
シナリオ 1
CreateQueue を呼び出して cloud-tasks-queue という名前のキューを作成し、次の内容を含む queue.yaml ファイルをアップロードします。
queue:
- name: queue-yaml-queue
これにより、キューの状態は次のようになります。
cloud-tasks-queueという名前のキューと、それ以前に存在していた他のキューはDISABLED状態です。queue-yaml-queueという名前のキューがRUNNING状態になっています。
シナリオ 2
Cloud Tasks API を使用してキューを無効にしたが、後でアップロードされた queue.yaml ファイルに表示された。キューが再開されます。
シナリオ 3
DeleteQueue メソッドでキューを削除すると、後で queue.yaml ファイルに表示されます。削除後、キュー名を数日間再利用できないため、queue.yaml アップロードが失敗することがあります。
監査ログを使用してデバッグする
プロジェクトの管理アクティビティ監査ログを調べると、キューの作成、更新、削除など、キューの設定変更の履歴を確認できます。
たとえば、queue.yaml アップロードによって既存のキューが無効になった場合、次のコマンドを実行すると、com.google.appengine.legacy.queue_updated メソッドを介して Disabled queue QUEUE_NAME ログメッセージが返されます。
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 のアップロードで無効になったキューを再開する
キュー管理メソッドを混在させている場合、queue.yaml ファイルをアップロードすると、Cloud Tasks API で作成されたキューが誤って無効になることがあります。キューを再開するには、キューで ResumeQueue を呼び出すか、queue.yaml に追加してアップロードします。
以前に queue.yaml 構成でカスタム処理 rate を設定していた場合、ResumeQueue を呼び出すとデフォルトの rate にキューがリセットされます。これは ResumeQueue への応答の maxDispatchesPerSecond フィールドに反映されます。
割り当ての問題を解決する
queue.yaml を使用してキューを作成する場合、プロジェクトには作成できるキューの最大数のデフォルトの割り当てがあります。Cloud Tasks API を使用して作成されたキューにもデフォルトの割り当てがあります。他の場合と同様に、queue.yaml と Cloud Tasks API メソッドを混在させると、予期しない結果が生じる可能性があります。
たとえば、queue.yaml を使用してキューを作成し、割り当ての増加を受け取った後に、Cloud Tasks API を使用して追加のキューを作成すると、割り当てエラーが発生する可能性があります。この問題を解決するには、 Google Cloud コンソールを使用して割り当てを管理します。詳細については、コンソールを使用して割り当てを管理するをご覧ください。