Questa pagina descrive come eseguire la migrazione del codice delle code in coda in modalità push dalle code di attività a Cloud Tasks. Cloud Tasks è ora il modo migliore per lavorare con le code in modalità push di App Engine.
Con Cloud Tasks, accedi allo stesso servizio a cui accedi con l'API RPC Task Queues. Ciò significa che non devi ricreare le code e le attività push esistenti. Tuttavia, per utilizzare l'API Cloud Tasks, devi eseguire la migrazione del codice che crea o interagisce con code o attività push in modalità push.
Puoi creare e interagire con code in modalità push e attività push utilizzando le API REST e RPC di Cloud Tasks, la libreria client di Cloud Tasks, Google Cloud CLI e la console Google Cloud. Questa pagina fornisce esempi che utilizzano gcloud CLI e la libreria client di Cloud Tasks.
In Cloud Tasks, tutte le code funzionano come code in modalità push. Nel resto di questa guida e nella documentazione di Cloud Tasks, il termine coda è equivalente al termine coda push. Analogamente, 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:
- Accoda le attività nelle transazioni Datastore
- Utilizzo della libreria delle attività differite anziché di un servizio worker
- Utilizzo delle attività in applicazioni multi-tenant
- Simulazione con il server di sviluppo locale
- Aggiunta di attività in modo asincrono
Prezzi e quote
La migrazione delle code in modalità push a Cloud Tasks potrebbe influire sui prezzi e sulle quote della tua app.
Prezzi
Cloud Tasks ha i propri pricing. Come per le code di attività, l'invio di richieste all'app App Engine con un'attività può comportare costi per l'app.
Quote
Le quotas di Cloud Tasks sono diverse da quelle per le code di attività. Come per le code di attività, l'invio di richieste all'app App Engine da Cloud Tasks potrebbe influire sulle quote per le richieste di App Engine.
Prima di eseguire la migrazione
Se non l'hai ancora fatto, configura il tuo ambiente di sviluppo Python in modo da utilizzare una versione Python compatibile con Google Cloud e installa strumenti di test per creare ambienti Python isolati.Le seguenti sezioni descrivono i passaggi di configurazione prima di eseguire la migrazione delle code in modalità push a Cloud Tasks.
Migrazione delle code in modalità pull
Prima di iniziare,
esegui la migrazione delle code in modalità pull
prima di seguire le istruzioni in questa guida
per 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é è probabile che l'utilizzo richiesto del file queue.yaml
causi comportamenti imprevisti con Cloud Tasks.
Protezione della configurazione della coda
Una volta 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 da parte del
file queue.yaml
con i seguenti passaggi.
Configura gcloud CLI per omettere il file
queue.yaml
nei deployment futuri.Aggiungi il file
queue.yaml
a un file.gcloudignore
. Per verificare se hai già un file.gcloudignore
, puoi eseguire il seguente comando nel terminale dalla directory di primo livello dell'app. Questo comando genererà il nome del file se esiste.ls -a | grep .gcloudignore
Per scoprire 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 su come proteggere la configurazione delle code.
Scopri di più su Cloud Tasks e il file
queue.yaml
(facoltativo).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 saperne di più, consulta Utilizzo della gestione delle code e diQueue.yaml.
Abilitazione dell'API Cloud Tasks
Per abilitare l'API Cloud Tasks, fai clic su Abilita nell'API Cloud Tasks nella libreria API. Se visualizzi un pulsante Gestisci anziché un pulsante Abilita, significa che hai precedentemente abilitato l'API Cloud Tasks per il progetto e non è necessario che lo faccia di nuovo.
Autenticazione dell'app nell'API Cloud Tasks
Devi autenticare la tua app nell'API Cloud Tasks. Questa sezione illustra l'autenticazione per due diversi casi d'uso.
Per sviluppare o testare la tua app a livello locale, ti consigliamo di utilizzare un account di servizio. Per istruzioni su come configurare un account di servizio e collegarlo alla tua app, leggi l'articolo Ottenere e fornire manualmente le credenziali dell'account di servizio.
Per eseguire il deployment della tua app su App Engine, non è necessario fornire alcuna nuova autenticazione. Le credenziali predefinite dell'applicazione (ADC) deducono i dettagli di autenticazione per le app App Engine.
Download di gcloud CLI
Scarica e installa gcloud CLI per utilizzare gcloud CLI con l'API Cloud Tasks, se non l'hai ancora installato. Esegui il comando seguente dal terminale se hai già installato gcloud CLI.
gcloud components update
Importazione delle librerie client di Cloud
Per utilizzare la libreria client di Cloud Tasks con la tua app App Engine:
Aggiorna il file
app.yaml
. Segui le istruzioni relative alla tua versione di Python:Python 2
Per le app Python 2, aggiungi le versioni più recenti delle librerie
grpcio
esetuptools
.Di seguito è riportato un esempio di file
app.yaml
:runtime: python27 threadsafe: yes api_version: 1 libraries: - name: grpcio version: latest - name: setuptools version: latest
Python 3
Per le app Python 3, specifica l'elemento
runtime
nel fileapp.yaml
con una versione Python 3 supportata. Ad esempio:runtime: python310 # or another support version
Il runtime Python 3 installa le librerie automaticamente, quindi non è necessario specificare le librerie integrate del runtime Python 2 precedente. Se la tua app Python 3 utilizza altri servizi in bundle legacy durante la migrazione, puoi continuare a specificare le librerie integrate necessarie. In caso contrario, puoi eliminare le righe non necessarie nel file
app.yaml
.Aggiorna il file
requirements.txt
. Segui le istruzioni per la tua versione di Python:Python 2
Aggiungi le librerie client di Cloud per Cloud Tasks al tuo elenco di dipendenze nel file
requirements.txt
.google-cloud-tasks
Esegui quindi
pip install -t lib -r requirements.txt
per aggiornare l'elenco delle librerie disponibili per la tua app.Python 3
Aggiungi le librerie client di Cloud per Cloud Tasks al tuo elenco di dipendenze nel file
requirements.txt
.google-cloud-tasks
App Engine installa automaticamente queste dipendenze durante il deployment dell'app nel runtime Python 3, quindi elimina la cartella
lib
, se esistente.Per le app Python 2, se la tua app utilizza librerie integrate o copiate, devi specificare questi percorsi nel file
appengine_config.py
, che si trova nella stessa cartella del fileapp.yaml
: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 la directory di lavoro corrente sia la posizione della cartellalib
. In alcuni casi, ad esempio in caso di test delle unità, la directory di lavoro attuale 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 di Cloud Tasks in tutti i file che utilizzano code in modalità push dall'API Task Queues:
from google.cloud import tasks
Dopo aver completato correttamente la migrazione di tutto il codice che crea o interagisce con le code in modalità push in Cloud Tasks, rimuovi le istruzioni che importano l'API Tasks 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 sia di un file queue.yaml
sia dell'API Cloud Tasks non è consigliato, ma potrebbe essere una parte inevitabile della migrazione dalle code di attività a Cloud Tasks, a seconda dell'app. Consulta Utilizzo della gestione delle code rispetto aQueue.yaml per informazioni sulle best practice.
Creazione di code
Leggi questa sezione se la tua 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 porzione LOCATION_ID
del nome della coda corrisponde a un'area geografica Google Cloud. La parte QUEUE_ID
del nome della coda equivale al campo name
della coda di attività. Il nome della coda viene generato durante la creazione della coda in base al progetto, alla regione e al criterio QUEUE_ID
specificati.
In generale, la posizione della coda (ad esempio, la regione) deve corrispondere alla regione dell'app. Le due eccezioni a questa regola riguardano le app che utilizzano la regione europe-west
e le app che utilizzano la regione us-central
. In Cloud Tasks, queste aree geografiche sono chiamate rispettivamente europe-west1
e us-central1
.
Puoi specificare la configurazione facoltativa della coda durante la creazione della coda, ma puoi farlo anche aggiornando la coda dopo averla creata.
Non è necessario ricreare le code esistenti. Esegui invece la migrazione del codice che interagisce con le code esistenti leggendo le parti pertinenti di questa guida.
Riutilizzo dei nomi delle code
Dopo aver eliminato una coda, devi attendere 7 giorni per creare una coda con lo stesso ID coda nello stesso progetto e nella stessa località (ad esempio, regione).
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
a una velocità pari a 5/s
. La seconda
coda ha ID coda queue-red
e invia le attività a una frequenza pari a 1/s
. Entrambi vengono creati nel progetto con ID progetto my-project-id
nella località us-central1
.
Questo è l'equivalente di Cloud Tasks per la creazione di code nelle code di attività.
gcloud
gcloud CLI 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ù, consulta il riferimento di Cloud Tasks Creazione di una coda di Cloud Tasks.
Impostazione della velocità di elaborazione delle code
La tabella seguente elenca i campi diversi dalle code di attività a Cloud Tasks.
campo Code di attività | Campo Cloud Tasks | Descrizione |
---|---|---|
rate |
max_dispatches_per_second |
La frequenza massima con cui le attività vengono inviate dalla coda |
max_concurrent_requests |
max_concurrent_dispatches |
Il numero massimo di attività in parallelo che possono essere inviate dalla coda |
bucket_size |
max_burst_size |
Cloud Tasks calcola una proprietà di sola lettura
Per le code di App Engine create o aggiornate utilizzando un file |
total_storage_limit |
Deprecato in Cloud Tasks | Al momento Cloud Tasks non supporta l'impostazione di un limite di archiviazione personalizzato |
Puoi impostare la velocità di elaborazione della coda quando crei la coda o la aggiorni in un secondo momento. L'esempio seguente utilizza Cloud Tasks per impostare la frequenza di elaborazione su una coda denominata queue-blue
già creata. Se queue-blue
è stato creato o configurato utilizzando un file queue.yaml
, l'esempio riportato di seguito viene reimpostatomax_burst_size
in base al valore max_dispatches_per_second
di 20
. Questo è l'equivalente di Cloud Tasks per
impostare la velocità di elaborazione
delle code
nelle code di attività.
gcloud
gcloud tasks queues update queue-blue \ --max-dispatches-per-second=20 \ --max-concurrent-dispatches=10
libreria client
Per scoprire di più, consulta Definire le limitazioni di frequenza.
Disattivazione e ripristino delle code
Cloud Tasks utilizza il termine pause nello stesso modo in cui le code di attività utilizzano il termine disable. La messa in pausa di una coda interrompe l'esecuzione delle attività in coda fino al ripristino della coda. Tuttavia, puoi continuare ad aggiungere attività a una coda in pausa. Cloud Tasks utilizza il termine ripresa allo stesso modo delle code di attività.
L'esempio riportato di seguito mette in pausa una coda con ID coda
queue1
. Questo è l'equivalente di Cloud Tasks per la disattivazione delle code nelle code di attività.
gcloud
gcloud tasks queues pause queue1
libreria client
Per saperne di più, consulta il riferimento di Cloud Tasks Mettere in pausa le code.
Eliminazione delle code
Una volta eliminata una coda, devi attendere 7 giorni prima di creare una coda con lo stesso nome. Valuta la possibilità di eliminare tutte le attività da una coda e riconfigurare la coda se non puoi attendere 7 giorni.
L'esempio riportato di seguito elimina la coda con ID coda
queue1
. Questo è l'equivalente di Cloud Tasks per l'eliminazione di code nelle code di attività.
gcloud
gcloud tasks queues delete queue1
libreria client
Per ulteriori informazioni, consulta la sezione sull'eliminazione delle code di Cloud Tasks.
Creazione e gestione delle attività
Questa sezione descrive come creare e gestire attività utilizzando l'API Cloud Tasks.
Creazione delle attività
La tabella seguente elenca i campi diversi dalle code di attività a 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 dette attività di App Engine. |
method |
http_method |
Specifica il metodo di richiesta, ad esempio POST |
url |
relative_uri |
Specifica il gestore delle attività. Nota la differenza nella lettera finale:
i per Uniform Resource Identifier anziché
l per Uniform Resource Locator |
target |
app_engine_routing |
Facoltativo. Specifica i valori 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 instrada a un servizio App Engine denominato worker
con il gestore /update_counter
. Questo è l'equivalente di Cloud Tasks per la 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 di Cloud Tasks Creazione di attività di App Engine.
Specificare il servizio di destinazione e il routing
La specifica del servizio, della versione e dell'istanza di App Engine di destinazione 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 dell'esecuzione dell'attività.
Imposta la proprietà app_engine_routing
dell'attività durante la creazione dell'attività per specificare un servizio, una versione o un'istanza App Engine diversi per l'attività.
Per instradare tutte le attività su una determinata coda allo stesso servizio App Engine, alla stessa versione e alla stessa istanza, puoi impostare la proprietà app_engine_routing_override
nella coda.
Per saperne di più, consulta il riferimento di Cloud Tasks Configurare il routing.
Trasmissione dei dati al gestore
Come per le code di attività, puoi passare i dati al gestore in due modi utilizzando Cloud Tasks. Puoi passare i dati come parametri di query 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 contenuto del corpo predefinito è octet-stream anziché testo normale. Puoi impostare il tipo di contenuto del corpo specificandolo nell'intestazione.
Il seguente esempio passa una chiave al gestore
/update_counter
in due modi diversi. Questo è l'equivalente di Cloud Tasks per passare dati al gestore nelle 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
Attività di denominazione
La specifica del nome dell'attività è facoltativa. Se non specifichi il nome dell'attività, Cloud Tasks la costruisce per te generando un ID attività e deducendo il progetto e la località (ovvero la regione) 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à equivale al campo name
dell'attività Code di attività.
Riutilizzo dei nomi delle attività
Devi attendere prima di riutilizzare il nome di un'attività. Il tempo di attesa prima di eseguire questa operazione varia a seconda che la coda che invii l'attività sia stata creata in Cloud Tasks o nelle code di attività.
Per le attività nelle code create utilizzando le code di attività (inclusa la coda predefinita), devi attendere circa 9 giorni dopo l'eliminazione o l'esecuzione dell'attività originale. Per le attività nelle code create utilizzando Cloud Tasks, devi attendere circa un'ora dopo l'eliminazione o l'esecuzione dell'attività originale.
L'esempio seguente crea un'attività con il valore TASK_ID
impostato su first-try
e
la aggiunge alla coda predefinita. Questo è l'equivalente di Cloud Tasks
dell'assegnazione di nomi
alle attività
nelle code di attività.
gcloud
Gcloud CLI costruisce il nome dell'attività deducendo il progetto e la località dalla tua 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 posizione della coda a cui viene aggiunta l'attività.
Nuovo tentativo di attività non riuscite
Puoi impostare la configurazione dei nuovi tentativi delle attività sulle code durante la creazione della coda o aggiornando la coda. La tabella seguente elenca il campo Code di attività e il campo Cloud Tasks corrispondente.
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 i nuovi tentativi specifici per l'attività
I parametri per i nuovi tentativi specifici per le attività configurati nelle code di attività funzionano in Cloud Tasks, ma non puoi modificarli o impostarli in nuove attività. Per modificare i parametri per i tentativi per un'attività con parametri per i nuovi tentativi specifici, ricrea l'attività con una coda Cloud Tasks che abbia i parametri desiderati per i nuovi tentativi.
L'esempio seguente illustra 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 modo definitivo. - In
barqueue
, App Engine tenta di riprovare le attività, aumentando l'intervallo in modo lineare tra ogni nuovo tentativo fino a raggiungere il backoff massimo e riprovando a tempo indeterminato all'intervallo massimo (quindi gli intervalli tra le richieste sono 10, 20, 30 secondi, ..., 190 secondi, 200, 200 secondi e così via). - In
bazqueue
, l'intervallo tra i diversi tentativi inizia a 10 secondi, per poi raddoppiare tre volte, poi aumentare in modo lineare e, infine, riprovare a tempo indeterminato all'intervallo massimo (quindi gli intervalli tra le richieste sono 10, 20, 40, 80, 160, 240, 300, 300 e così via).
Questo è l'equivalente di Cloud Tasks per eseguire un nuovo tentativo di attività nelle code di attività.
gcloud
Quando imposti opzioni che specificano un numero di secondi, devi includere s
dopo il numero intero (ad es. 200s
e 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 di Cloud Tasks Impostare i parametri per i nuovi tentativi.
Eliminazione di attività da una coda
Quando elimini un'attività, devi attendere 9 giorni prima di creare un'attività con lo stesso nome se si trovava in una coda creata utilizzando un file queue.yaml
o 1 ora se si trovava in una coda creata utilizzando Cloud Tasks.
L'esempio seguente elimina l'attività con ID attività foo
dalla coda con ID coda queue1
. Questo è l'equivalente di Cloud Tasks per l'eliminazione di attività nelle code di attività.
gcloud
Il progetto e la località dell'attività vengono dedotti dal progetto predefinito di gcloud CLI.
gcloud tasks delete foo --queue=queue1
libreria client
Per saperne di più, consulta il riferimento di Cloud Tasks sull'eliminazione di un'attività da una coda.
Eliminazione definitiva delle attività
L'esempio seguente elimina definitivamente tutte le attività dalla coda con ID coda
queue1
. Questo è l'equivalente di Cloud Tasks per la cancellazione delle attività nelle code di attività.
gcloud
Il progetto e la località della coda vengono dedotti dal progetto predefinito di gcloud CLI.
gcloud tasks queues purge queue1
libreria client
Per saperne di più, consulta il riferimento di Cloud Tasks Eliminazione definitiva di tutte le attività da una coda.
Passaggi successivi
- Documentazione di Cloud Tasks
- Libreria client di Cloud Tasks
- Panoramica del riferimento REST di Cloud Tasks
- Panoramica Riferimento RPC Cloud Tasks
- Per un tutorial pratico, vedi Eseguire la migrazione dalle code di attività di App Engine al codelab di Cloud Tasks.