Questa pagina descrive come eseguire la migrazione del codice di coda push da Code di attività a Cloud Tasks. Cloud Tasks è ora il modo preferito per lavorare con le code in modalità push di App Engine.
Panoramica
Con Cloud Tasks, accedi allo stesso servizio a cui accedi con l'API RPC Task. Ciò significa che non è necessario ricreare le code e le attività di push esistenti. Tuttavia, per utilizzare l'API Cloud Tasks devi eseguire la migrazione del codice che crea o interagisce con le code in modalità push o le attività push.
Puoi creare e interagire con code in modalità push e attività push utilizzando le API REST ed RPC di Cloud Tasks, la libreria client di Python Tasks Python, Google Cloud CLI e la console Google Cloud. Questa pagina fornisce esempi che utilizzano l'interfaccia a riga di comando gcloud e la libreria client Python di Cloud Tasks.
In Cloud Tasks, tutte le code funzionano come code in modalità push. Nel resto della guida e nella documentazione di Cloud Tasks, il termine coda equivale al termine pushtail. Allo stesso modo, il termine attività è equivalente al termine attività push.
Funzionalità attualmente non disponibili in Cloud Tasks
Le seguenti funzionalità non sono attualmente disponibili in Cloud Tasks:
- Accodare attività nelle transazioni Datastore
- Utilizzo della libreria di attività differita invece di un servizio worker
- Utilizzo delle attività nelle applicazioni multi-tenant
- Simulazione con il server di sviluppo locale
- Aggiungere le attività in modo asincrono
Prezzi e quote
La migrazione delle code in modalità push in Cloud Tasks potrebbe influire sui prezzi e sulle quote della tua app.
Prezzi
Cloud Tasks ha i propri prezzi specifici. Come per le code di attività, l'invio di richieste alla tua app App Engine con un'attività può comportare costi per l'app.
Quote
Le quote di Cloud Tasks sono diverse dalle quote per le code di attività. Come con le code di attività, l'invio di richieste alla tua app App Engine da Cloud Tasks potrebbe incidere sulle quote delle richieste di App Engine.
Prima della migrazione
Questa sezione descrive cosa è necessario fare prima di eseguire la migrazione delle code in modalità push in Cloud Tasks.
Migrazione delle code in modalità pull
Utilizza la guida per la migrazione di code di pull per eseguire la migrazione delle code in modalità pull prima di utilizzare questa guida per eseguire la migrazione delle code in modalità push.
La migrazione delle code in modalità pull dopo la migrazione delle code in modalità push non è consigliata perché l'utilizzo richiesto del file queue.yaml
potrebbe causare comportamenti imprevisti con Cloud Tasks.
Protezione della configurazione di coda
Dopo aver iniziato il processo di migrazione a Cloud Tasks,
la modifica del file queue.yaml
può causare comportamenti imprevisti e non è
consigliata. Proteggi la configurazione della coda dalle modifiche con il file queue.yaml
seguendo questi passaggi.
Configura l'interfaccia a riga di comando gcloud per omettere il file
queue.yaml
nei deployment futuri.Aggiungi il tuo file
queue.yaml
a un file.gcloudignore
. Per controllare se hai già un file.gcloudignore
, puoi eseguire il seguente comando nel terminale dalla directory di primo livello dell'app. Se il file esiste già, il comando restituirà il nome del file.ls -a | grep .gcloudignore
Per saperne di più sui file
.gcloudignore
, leggi il riferimento.gcloudignore
.Limita le autorizzazioni per il file
queue.yaml
.Segui le best practice descritte nella nostra guida sulla protezione della configurazione della coda.
(Facoltativo) Informazioni su Cloud Tasks e sul file
queue.yaml
.Quando utilizzi l'API Cloud Tasks per gestire la configurazione della coda, il deployment di un file
queue.yaml
sostituisce la configurazione impostata da Cloud Tasks, il che può causare comportamenti imprevisti. Per ulteriori informazioni, consulta Utilizzare la gestione delle code rispetto aQueue.yaml.
Abilitazione dell'API Cloud Tasks
Per abilitare l'API Cloud Tasks, fai clic su Abilita nell'API Cloud Tasks nella libreria delle API. Se vedi un pulsante Gestisci invece di un pulsante Abilita, significa che hai precedentemente abilitato l'API Cloud Tasks per il tuo progetto e non è necessario farlo di nuovo.
Autenticazione della tua app all'API Cloud Tasks
Devi autenticare la tua app nell'API Cloud Tasks. Questa sezione tratta l'autenticazione per due diversi casi d'uso.
Per sviluppare o testare la tua app localmente, ti consigliamo di usare un account di servizio. Per istruzioni sulla configurazione di un account di servizio e sul collegamento alla tua app, leggi l'articolo Ottenere e fornire manualmente le credenziali per l'account di servizio.
Per eseguire il deployment della tua applicazione su App Engine, non è necessario fornire una nuova autenticazione. Le credenziali predefinite dell'applicazione (ADC) deduceno i dettagli dell'autenticazione per le app di App Engine.
Download dell'interfaccia a riga di comando gcloud
Scarica e installa gcloud CLI per utilizzare l'interfaccia a riga di comando gcloud con l'API Cloud Tasks, se non l'hai installata in precedenza. Esegui questo comando dal terminale se hai già installato l'interfaccia a riga di comando gcloud.
gcloud components update
Importazione della libreria client Python
Segui questi passaggi per utilizzare la libreria client di Cloud Tasks Python con la tua app App Engine:
Crea una directory per archiviare le librerie di terze parti, ad esempio
lib/
:mkdir lib
Copia le librerie necessarie.
Ti consigliamo di utilizzare un file dei requisiti
pip
anziché installare le librerie una per volta dalla riga di comando. Crea un filerequirements.txt
nella stessa cartella in cui si trova il fileapp.yaml
se non hai ancora un filerequirements.txt
. Aggiungi le due righe seguenti:google-cloud-tasks
Utilizza
pip
(versione 6 o successiva) con il flag-t <directory>
per copiare la libreria Cloud Tasks specificata nel filerequirements.txt
nella cartella creata nel passaggio precedente. Ad esempio:pip install -t lib -r requirements.txt
Specifica le librerie RPC e
setuptools
nella sezionelibraries
del fileapp.yaml
:libraries: - name: grpcio version: 1.0.0 - name: setuptools version: 36.6.0
Utilizza il modulo
pkg_resources
per assicurarti che la tua applicazione utilizzi la giusta distribuzione della libreria client Python di Cloud Tasks.Crea un file
appengine_config.py
nella stessa cartella del fileapp.yaml
, se non ne hai già uno. Aggiungi quanto segue al tuo fileappengine_config.py
:# appengine_config.py import pkg_resources from google.appengine.ext import vendor # Set path to your libraries folder. path = 'lib' # Add libraries installed in the path folder. vendor.add(path) # Add libraries to pkg_resources working set to find the distribution. pkg_resources.working_set.add_entry(path)
Il file
appengine_config.py
riportato sopra presuppone che si trovi la directory di lavoro attuale dove si trova la cartellalib
. In alcuni casi, ad esempio i test delle unità, la directory di lavoro corrente può essere diversa. Per evitare errori, puoi passare esplicitamente il percorso completo alla cartellalib
utilizzando:import os path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
Importa la libreria client Python di Cloud Tasks in tutti i file che utilizzano le code in modalità push dall'API Task Queues:
from google.cloud import tasks
Dopo aver completato la migrazione completa di tutto il codice che crea o interagisce con le code in modalità push in Cloud Tasks, rimuovi le istruzioni che importano l'API Task Queues, ad esempio
from google.appengine.api import taskqueue
.
Creazione e gestione delle code
Questa sezione descrive come creare e gestire le code utilizzando l'API Cloud Tasks.
Con Cloud Tasks, non utilizzi un file queue.yaml
per creare o gestire le code. Utilizza invece l'API Cloud Tasks. L'utilizzo di un file queue.yaml
e dell'API Cloud Tasks non è consigliato, ma potrebbe essere una parte inevitabile della migrazione dalle code di attività a Cloud Tasks, a seconda della tua app. Leggi Utilizzare la gestione delle code invece diQueue.yaml per conoscere le best practice.
Creazione di code
Leggi questa sezione se l'app crea code in modo programmatico o se vuoi creare code aggiuntive dalla riga di comando.
In Cloud Tasks, i nomi delle code hanno il formato projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_ID
. La parte LOCATION_ID
del nome della coda corrisponde a una regione di Google Cloud. La parte QUEUE_ID
del nome della coda equivale al campo name
Code di attività. Il nome della coda viene generato
durante la creazione della coda in base al progetto, all'area geografica e al QUEUE_ID
specificati.
In generale, la posizione della coda (ovvero la regione) deve essere uguale alla regione della tua app. Le due eccezioni a questa regola si applicano alle app che utilizzano la regione europe-west
e alle app che utilizzano la regione us-central
. In Cloud Tasks, queste aree geografiche vengono chiamate rispettivamente europe-west1
e us-central1
.
Puoi specificare la configurazione della coda facoltativa durante la creazione della coda, ma puoi farlo anche aggiornando la coda dopo averla creata.
Non è necessario ricreare le code esistenti. Per eseguire la migrazione del codice che interagisce con le code esistenti, leggi le parti pertinenti di questa guida.
Riutilizzo dei nomi delle code
Devi attendere 7 giorni dopo l'eliminazione di una coda per creare una coda con lo stesso ID coda nello stesso progetto e nella stessa località, ad esempio nell'area geografica.
L'esempio seguente crea due code utilizzando Cloud Tasks. La
prima coda ha l'ID coda queue-blue
ed è configurata per inviare tutte le attività alla
versione v2
del servizio task-module
alla velocità 5/s
. La seconda coda ha queue-red
nella coda e invia le attività alla velocità 1/s
. Entrambi vengono creati nel progetto con ID progetto my-project-id
nella località us-central1
.
Si tratta dell'equivalente di Cloud Tasks nell'ambito della creazione di code nelle code di attività.
gcloud
L'interfaccia a riga di comando gcloud deduce il progetto e la località dalla configurazione dell'interfaccia a riga di comando gcloud.
gcloud tasks queues create queue-blue \ --max-dispatches-per-second=5 \ --routing-override=service:task-module,version:v2
gcloud tasks queues create queue-red \ --max-dispatches-per-second=1
libreria client
Per saperne di più, leggi il riferimento Cloud Functions Creazione di una coda Cloud Tasks.
Impostare la velocità di elaborazione delle code
La tabella seguente elenca i campi che differiscono da Code di attività per Cloud Tasks.
Campo Code di attività | Campo Cloud Tasks | Descrizione |
---|---|---|
rate |
max_dispatches_per_second |
La frequenza massima di invio delle attività dalla coda |
max_concurrent_requests |
max_concurrent_dispatches |
Il numero massimo di attività simultanee che possono essere inviate dalla coda |
bucket_size |
max_burst_size |
Cloud Tasks calcola una proprietà get-only
Per le code di App Engine create o aggiornate utilizzando un
file |
total_storage_limit |
Deprecato in Cloud Tasks | Attualmente Cloud Tasks non supporta l'impostazione di un limite di spazio di archiviazione personalizzato |
Puoi impostare la velocità di elaborazione della coda quando crei la coda o aggiornarla in seguito. L'esempio seguente utilizza Cloud Tasks per impostare la frequenza di elaborazione in una coda denominata queue-blue
già creata. Se
queue-blue
è stato creato o configurato utilizzando un file queue.yaml
, l'esempio
di seguito viene reimpostatomax_burst_size
in base al valore max_dispatches_per_second
di
20
. Si tratta dell'equivalente di Cloud Tasks nell'impostazione della frequenza di elaborazione delle code in Code di attività.
gcloud
gcloud tasks queues update queue-blue \ --max-dispatches-per-second=20 \ --max-concurrent-dispatches=10
libreria client
Per saperne di più, consulta Definire i limiti di frequenza.
Disattivazione e ripristino delle code
Cloud Tasks utilizza il termine pause esattamente come le code di attività utilizzano il termine disable. La messa in pausa di una coda interrompe l'esecuzione delle attività in coda fino al suo ripristino. Tuttavia, puoi continuare ad aggiungere attività a una coda in pausa. Cloud Tasks utilizza il termine ripresa esattamente come le code di attività.
L'esempio riportato di seguito mette in pausa una coda con ID coda queue1
. Si tratta dell'equivalente di Cloud Tasks nella disabilitazione delle code nelle code di attività.
gcloud
gcloud tasks queues pause queue1
libreria client
Per saperne di più, consulta la sezione Metti in pausa le code di riferimento per Cloud Tasks.
Eliminazione delle code
Una volta eliminata una coda, devi attendere sette giorni prima di crearne una con lo stesso nome. Ti consigliamo di eliminare definitivamente tutte le attività da una coda e riconfigurare la coda se non puoi attendere sette giorni.
L'esempio seguente elimina la coda con ID coda queue1
. Si tratta dell'equivalente di Cloud Tasks nell'eliminazione delle code nelle code di attività.
gcloud
gcloud tasks queues delete queue1
libreria client
Per saperne di più, consulta la guida di riferimento alle funzionalità di eliminazione di Cloud Tasks.
Creare e gestire le attività
Questa sezione descrive come creare e gestire attività utilizzando l'API Cloud Tasks.
Creazione di attività
La tabella seguente elenca i campi che differiscono da Code di attività per Cloud Tasks.
Campo Code di attività | Campo Cloud Tasks | Descrizione |
---|---|---|
NOVITÀ in Cloud Tasks | app_engine_http_request |
Crea una richiesta che ha come target un servizio App Engine. Queste attività sono definite attività App Engine. |
method |
http_method |
Specifica il metodo di richiesta, ad esempio POST |
url |
relative_uri |
Specifica il gestore di attività. Osserva la differenza nella lettera finale:
i per identificatore di risorsa uniforme anziché
l per localizzatore di risorse uniforme |
target |
app_engine_routing |
Opzione facoltativa. Specifica service , version e instance di App Engine per un'attività di App Engine. Se non viene configurato, vengono utilizzati il servizio, la versione e l'istanza predefiniti. |
L'esempio seguente crea un'attività che indirizza a un servizio App Engine denominato worker
con il gestore /update_counter
. Si tratta dell'equivalente di Cloud Tasks nell'ambito della creazione di attività nelle code di attività.
gcloud
gcloud tasks create-app-engine-task --queue=default \ --method=POST --relative-uri=/update_counter --routing=service:worker \ --body-content=10
libreria client
Per saperne di più, consulta il riferimento per Cloud Tasks Creazione di attività App Engine.
Specificare il servizio e il routing di destinazione
La specifica del servizio di destinazione, della versione e dell'istanza di App Engine per le attività di App Engine è facoltativa. Per impostazione predefinita, le attività di App Engine vengono instradate al servizio, alla versione e all'istanza predefiniti al momento del tentativo dell'attività.
Imposta la proprietà app_engine_routing
dell'attività durante la creazione dell'attività per specificare un servizio, una versione o un'istanza di App Engine diversi per l'attività.
Per instradare tutte le attività in una determinata coda alla stessa versione, istanza e servizio di App Engine, puoi impostare la proprietà app_engine_routing_override
nella coda.
Per ulteriori informazioni, consulta il riferimento Configura routing per Cloud Tasks.
Trasferimento di dati al gestore
Come con le code di attività, puoi trasferire i dati al gestore in due modi utilizzando Cloud Tasks. Puoi trasmettere i dati come parametri di ricerca nell'URI relativo oppure passare i dati nel corpo della richiesta utilizzando i metodi HTTP POST o PUT.
Cloud Tasks utilizza il termine body nello stesso modo in cui le code di attività utilizzano il termine payload. In Cloud Tasks, il tipo di contenuti del corpo predefinito è ottetto-stream invece del testo normale. Puoi impostare il tipo di contenuti del corpo specificandolo nell'intestazione.
L'esempio seguente trasmette una chiave al gestore /update_counter
in due modi diversi. Si tratta dell'equivalente di Cloud Tasks nel caso in cui trasferisci i dati al gestore in Code di attività.
console
gcloud tasks create-app-engine-task --queue=default --method=GET \ --relative-uri=/update_counter?key=blue --routing=service:worker
gcloud tasks create-app-engine-task --queue=default --method=POST \ --relative-uri=/update_counter --routing=service:worker \ --body-content="{'key': 'blue'}"
libreria client
Assegnare un nome alle attività
La specifica del nome dell'attività è facoltativa. Se non specifichi il nome dell'attività, Cloud Tasks la genera per te generando un ID attività e deducendo il progetto e la località (ad esempio l'area geografica) in base alla coda specificata durante la creazione dell'attività.
I nomi delle attività hanno il formato projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_ID/tasks/TASK_ID
. La parte TASK_ID
del nome dell'attività corrisponde al campo name
dell'attività di code di attività.
Riutilizzare i nomi delle attività
Devi attendere prima di riutilizzare il nome di un'attività. La quantità di tempo che devi attendere prima di eseguire questa operazione è diversa a seconda che la coda o all'invio dell'attività sia stata creata in Cloud Tasks o nelle code di attività.
Per le attività sulle code create usando le code di attività (inclusa la coda predefinita) devi attendere circa 9 giorni dall'eliminazione o dall'esecuzione dell'attività originale. Per le attività sulle code create usando Cloud Tasks, devi attendere circa un'ora dall'eliminazione o dall'esecuzione dell'attività originale.
L'esempio seguente crea un'attività con TASK_ID
impostato su first-try
e la aggiunge alla coda predefinita. Questo è l'equivalente di Cloud Tasks delle attività di denominazione nelle code di attività.
gcloud
L'interfaccia a riga di comando gcloud costruisce il nome dell'attività deducendo il progetto e la località dalla configurazione.
gcloud tasks create-app-engine-task first-try --queue=default \ --method=GET --relative-uri=/url/path
libreria client
Con la libreria client, devi specificare il nome completo dell'attività se vuoi specificare TASK_ID
. Il progetto e la località devono corrispondere al progetto e alla località della coda a cui viene aggiunta l'attività.
Riprovare le attività non riuscite
Puoi impostare la configurazione dei nuovi tentativi di attività sulle code durante la creazione della coda o aggiornando la coda. Nella tabella seguente sono elencati i campi Task Queues e Task Tasks corrispondenti.
Campo Code di attività | Campo Cloud Tasks |
---|---|
task_retry_limit |
max_attempts |
task_age_limit |
max_retry_duration |
min_backoff_seconds |
min_backoff |
max_backoff_seconds |
max_backoff |
max_doublings |
max_doublings |
Parametri per nuovi tentativi specifici per l'attività
I parametri dei nuovi tentativi specifici per l'attività configurati in Code di attività funzionano in Cloud Tasks, ma non puoi modificarli o impostarli in nuove attività. Per modificare i parametri dei nuovi tentativi per un'attività che include parametri per i nuovi tentativi specifici, ricrea l'attività con una coda di Cloud Tasks contenente i parametri dei nuovi tentativi desiderati.
L'esempio seguente mostra vari scenari di nuovo tentativo:
- In
fooqueue
, le attività vengono tentate fino a sette volte e per un massimo di due giorni dal primo tentativo di esecuzione. Una volta superati entrambi i limiti, l'operazione non andrà a buon fine. - In
barqueue
, App Engine tenta di riprovare le attività, aumentando l'intervallo in modo lineare tra ogni nuovo tentativo fino a raggiungere il numero massimo di backoff e riprovando a tempo indeterminato all'intervallo massimo (Pertanto gli intervalli tra le richieste sono 10, 20, 30, ..., 190, 200, 200 e così via). - In
bazqueue
, l'intervallo tra i tentativi inizia da 10 secondi, poi raddoppia per tre volte, poi aumenta in modo lineare e infine tenta di ripetere a tempo indeterminato l'intervallo massimo (ossia gli intervalli tra le richieste sono 10, 20, 40, 80, 160, 240, 300, 300 e ...).
Si tratta dell'equivalente a Cloud Tasks del riprovare le attività in code di attività.
gcloud
Quando imposti le opzioni che specificano un numero di secondi, devi includere s
dopo il numero intero (ad esempio 200s
non 200
).
gcloud tasks queues create fooqueue \ --max-attempts=7 \ --max-retry-duration=172800s #2*60*60*24 seconds in 2 days
gcloud tasks queues create barqueue \ --min-backoff=10s \ --max-backoff=200s \ --max-doublings=0
gcloud tasks queues create bazqueue \ --min-backoff=10s \ --max-backoff=300s \ --max-doublings=3
libreria client
Per saperne di più, leggi il riferimento per Cloud Tasks Impostare i parametri per nuovi tentativi.
Eliminare le attività da una coda
Quando elimini un'attività, devi attendere 9 giorni prima di crearne una con lo stesso nome se si trova in una coda creata utilizzando un file queue.yaml
oppure un'ora se si trova in una coda creata utilizzando Cloud Tasks.
L'esempio seguente elimina l'attività con ID attività foo
dalla coda con
ID coda queue1
. Si tratta dell'equivalente di Cloud Tasks nell'eliminazione delle attività nelle code di attività.
gcloud
Il progetto e la località dell'attività vengono dedotti dal progetto predefinito dell'interfaccia a riga di comando gcloud.
gcloud tasks delete foo --queue=queue1
libreria client
Per saperne di più, leggi il riferimento a Cloud Tasks Eliminare un'attività da una coda.
Eliminazione definitiva delle attività
L'esempio seguente elimina definitivamente tutte le attività dalla coda
con ID coda queue1
. Si tratta dell'equivalente di Tasks di Cloud Tasks nelle code di attività.
gcloud
Il progetto in coda e la posizione vengono dedotti dal progetto predefinito dell'interfaccia a riga di comando gcloud.
gcloud tasks queues purge queue1
libreria client
Per saperne di più, leggi il riferimento per Cloud Tasks Eliminare tutte le attività da una coda.
Passaggi successivi
- Documentazione di Cloud Tasks
- Libreria client Python di Cloud Tasks
- Panoramica del riferimento REST di Cloud Tasks
- Panoramica del riferimento RPC di Cloud Tasks