Utilizzare queue.yaml per gestire le code

Sebbene sia possibile utilizzare un queue.yaml file per gestire le code, la combinazione di metodi di gestione delle code può causare risultati imprevisti. Questa guida spiega i rischi della combinazione di questi metodi e mostra come risolvere i problemi di configurazione comuni.

L'API Cloud Tasks fornisce un'interfaccia indipendente al servizio App Engine Task Queue. Utilizzando questa interfaccia, puoi gestire le code tramite la Google Cloud console o la Google Cloud CLI. Le code create con l'API Cloud Tasks sono accessibili da App Engine SDK, una raccolta di API specifiche della piattaforma, strumenti autonomi e file di runtime, mentre le code create con App Engine SDK sono accessibili dall' API Cloud Tasks.

Per mantenere la compatibilità, puoi utilizzare queue.yaml, il file di configurazione per App Engine SDK, per creare e configurare le code per l'API Cloud Tasks. Tuttavia, la gestione delle code utilizzando questo file e l'API Cloud Tasks può causare problemi descritti in questa guida.

Prima di iniziare

Se non hai familiarità con Cloud Tasks o App Engine, utilizza esclusivamente l'API Cloud Tasks per gestire le code ed evita di utilizzare queue.yaml. I metodi di gestione delle code di Cloud Tasks offrono più opzioni per creare, aggiornare ed eliminare le code.

Se utilizzi già queue.yaml valuta la possibilità di passare a metodi di gestione delle code di Cloud Tasks solo se comprendi i rischi della combinazione di metodi di gestione delle code.

Applicare un metodo di gestione delle code

Per evitare di combinare i metodi di gestione delle code, puoi creare un'app web o uno strumento a riga di comando per creare, aggiornare ed eliminare le code. Se lo strumento utilizza i metodi di gestione delle code di Cloud Tasks o queue.yaml è un dettaglio di implementazione di cui gli utenti non devono essere a conoscenza. Applicando l'utilizzo dello strumento, puoi assicurarti che non vi sia una combinazione involontaria di metodi. Concedi il ruolo di amministratore delle code di Cloud Tasks Identity and Access Management (IAM) allo strumento e richiedi agli utenti di autenticarsi. Per saperne di più sulla gestione degli accessi, consulta Proteggere la configurazione delle code.

Ritardi nella configurazione delle code

Le modifiche alla configurazione delle code possono richiedere diversi minuti per essere applicate. Ad esempio, dopo aver chiamato CreateQueue o UpdateQueue, potrebbero passare diversi minuti prima di poter chiamare correttamente CreateTask nella coda.

Coda default di App Engine

La coda di App Engine denominata default riceve un trattamento speciale in App Engine SDK e nell'API Cloud Tasks.

Quando viene creata la coda default?

Se la coda default non esiste, viene creata nelle seguenti situazioni:

  • Quando un'attività viene aggiunta per la prima volta alla coda default utilizzando App Engine SDK
  • Quando viene caricato un file queue.yaml che specifica una default coda
  • Quando viene chiamata CreateQueue o UpdateQueue per creare la coda default
Quali limitazioni applica Cloud Tasks?

Per preservare la compatibilità con App Engine, Cloud Tasks applica le seguenti limitazioni relative alla default coda:

  • L'API Cloud Tasks non crea automaticamente la default coda o altre code
  • Se viene creata una coda denominata default, deve essere una coda che utilizza le attività di App Engine
  • La chiamata di GetQueue nella coda default restituisce un errore not found se la coda non esiste ancora
  • La coda default non viene visualizzata nell' ListQueues output finché non viene creata
  • Puoi modificare la configurazione della coda default utilizzando la chiamata UpdateQueue
  • Una volta creata, non puoi eliminare la coda default

Rischi della combinazione di metodi di gestione delle code

Per il servizio sottostante, i file queue.yaml sono definitivi. Il caricamento di un file queue.yaml che omette le code esistenti nel progetto, indipendentemente da come sono state create, disattiva o mette in pausa queste code. Ad esempio, se utilizzi l'API Cloud Tasks per chiamare CreateQueue o UpdateQueue e poi carichi un file queue.yaml che omette queste code, le code vengono disattivate. Dovrai quindi riprendere le code disattivate.

La combinazione di metodi di gestione delle code può comportare un comportamento imprevisto. Considera ad esempio i seguenti scenari:

Scenario 1

Chiami CreateQueue per creare una coda denominata cloud-tasks-queue e poi carichi un file queue.yaml con i seguenti contenuti:

queue:
- name: queue-yaml-queue

Di conseguenza, gli stati delle code sono i seguenti:

  • La coda denominata cloud-tasks-queue e tutte le altre code preesistenti sono in stato DISABLED.
  • La coda denominata queue-yaml-queue è in stato RUNNING.

Scenario 2

Utilizzi l'API Cloud Tasks per disattivare una coda, ma in seguito questa viene visualizzata in un file queue.yaml caricato. La coda viene ripresa.

Scenario 3

Elimini una coda con il metodo DeleteQueue e in seguito questa viene visualizzata in un file queue.yaml. Il caricamento di queue.yaml potrebbe non riuscire perché i nomi delle code non possono essere riutilizzati per diversi giorni dopo l'eliminazione.

Eseguire il debug utilizzando gli audit log

Puoi esaminare gli audit log delle attività di amministrazione del progetto e recuperare una cronologia delle modifiche alla configurazione delle code, incluse le creazioni, gli aggiornamenti e le eliminazioni delle code.

Ad esempio, se un caricamento queue.yaml disattiva una coda esistente, puoi eseguire il seguente comando per restituire un messaggio di log Disabled queue QUEUE_NAME tramite il metodo com.google.appengine.legacy.queue_updated:

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)'

Per saperne di più, consulta Leggere le voci di log.

Riprendere una coda disattivata dal caricamento di un file queue.yaml

Se combini i metodi di gestione delle code, il caricamento di un file queue.yaml potrebbe disattivare accidentalmente una coda creata tramite l'API Cloud Tasks. Per riprendere la coda, puoi chiamare ResumeQueue nella coda o aggiungerla a queue.yaml e caricarla.

Se in precedenza hai impostato un'elaborazione personalizzata rate nella configurazione queue.yaml, ResumeQueue reimposta la coda sul valore predefinito rate. Questo si riflette nel maxDispatchesPerSecond campo della risposta a ResumeQueue.

Risolvere i problemi relativi alle quote

Se utilizzi queue.yaml per creare le code, il progetto ha una quota predefinita per il numero massimo di code che puoi creare. Anche le code create utilizzando l'API Cloud Tasks hanno una quota predefinita. Come in altri casi, la combinazione di metodi queue.yaml e API Cloud Tasks può produrre risultati imprevisti.

Ad esempio, quando crei le code utilizzando queue.yaml e poi ricevi un aumento della quota, se in seguito utilizzi l'API Cloud Tasks per creare altre code, potresti ricevere errori di superamento della quota. Per risolvere il problema, puoi gestire le quote utilizzando la Google Cloud console. Per saperne di più, consulta Gestire le quote utilizzando la console.

Passaggi successivi