Questa pagina descrive come eseguire la migrazione del codice delle code in modalità coda in modalità push da code di attività a Cloud Tasks. Cloud Tasks è ora il modo preferito per lavorare con le code push di App Engine.
Cloud Tasks ti consente di accedere allo stesso servizio a cui accedi con l'API RPC Task Queues. Ciò significa che non devi ricreare le code push e le attività push esistenti. Tuttavia, devi eseguire la migrazione del codice che crea o interagisce con le code push o le attività push per utilizzare l'API Cloud Tasks.
Puoi creare e interagire con le code push e le attività push utilizzando le API REST e RPC di Cloud Tasks, la libreria client Cloud Tasks, Google Cloud CLI e la Google Cloud console. Questa pagina fornisce esempi che utilizzano gcloud CLI e la libreria client Cloud Tasks.
In Cloud Tasks, tutte le code funzionano come code push. Nel resto di questa guida e nella documentazione di Cloud Tasks, il termine coda è equivalente al termine coda push. Allo stesso modo, il termine attività è equivalente al termine attività push.
Funzionalità non disponibili in Cloud Tasks
Le seguenti funzionalità non sono disponibili in Cloud Tasks:
- Accodamento delle attività nelle transazioni Datastore
- Utilizzo della libreria delle attività differite anziché di un servizio di gestione dei worker
- Utilizzare le attività nelle 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 prezzi. Come per Task Queues, l'invio di richieste alla tua app App Engine con un'attività può comportare costi per la tua app.
Quote
Le quote di Cloud Tasks sono diverse dalle quote per le code di attività. Come per le code di attività, l'invio di richieste alla tua app App Engine da Cloud Tasks potrebbe influire sulle quote di richieste di App Engine.
Prima della migrazione
Se non l'hai ancora fatto, configura il tuo ambiente di sviluppo Python per utilizzare una versione di Python compatibile con Google Cloude installa gli strumenti di test per creare ambienti Python isolati.Le sezioni seguenti descrivono i passaggi di configurazione prima di eseguire la migrazione delle code push a Cloud Tasks.
Migrazione delle code in modalità pull
Prima di iniziare,
esegui la migrazione delle code pull
prima di seguire le istruzioni riportate in questa guida
per eseguire la migrazione delle code push. La migrazione delle code pull dopo la migrazione delle code push non è
consigliata perché l'utilizzo obbligatorio del file queue.yaml
potrebbe causare
un comportamento imprevisto con Cloud Tasks.
Protezione della configurazione delle code
Una volta avviato il processo di migrazione a Cloud Tasks,
la modifica del file queue.yaml
può causare un comportamento imprevisto e non è
consigliata. Proteggi la configurazione della coda dalle modifiche apportate dal file queue.yaml
seguendo questi passaggi.
Configura gcloud CLI in modo da 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 comando seguente nel terminale dalla directory di primo livello dell'app. Questo comando restituirà il nome del file se esiste.ls -a | grep .gcloudignore
Per saperne di più sui file
.gcloudignore
, consulta la documentazione di riferimento su.gcloudignore
.Limita le autorizzazioni per il file
queue.yaml
.Segui le best practice descritte nella nostra guida alla configurazione sicura delle code.
Scopri di più su Cloud Tasks e sul 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 un comportamento imprevisto. Per saperne di più, leggi Gestione delle code e queue.yaml.
Abilitazione dell'API Cloud Tasks
Per abilitare l'API Cloud Tasks, fai clic su Abilita nell'API Cloud Tasks nella libreria API. Se vedi un pulsante Gestisci anziché un pulsante Abilita, significa che hai già abilitato l'API Cloud Tasks per il tuo progetto e non devi farlo di nuovo.
Autenticare l'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 localmente, ti consigliamo di utilizzare un account di servizio. Per istruzioni sulla configurazione di un account di servizio e sul collegamento all'app, leggi Ottenere e fornire manualmente le credenziali del account di servizio account.
Per eseguire il deployment dell'app su App Engine, non è necessario fornire una 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 installata in precedenza. Esegui questo comando 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 per la 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 di Python 3 supportata. Ad esempio:runtime: python310 # or another support version
Il runtime Python 3 installa automaticamente le librerie, quindi non devi specificare le librerie integrate del runtime Python 2 precedente. Se la tua app Python 3 utilizza altri servizi legacy inclusi 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 all'elenco delle dipendenze nel file
requirements.txt
.google-cloud-tasks
Quindi esegui
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 all'elenco delle 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 esiste.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
presuppone che la directory di lavoro corrente sia quella in cui si trova la cartellalib
. In alcuni casi, ad esempio nei test unitari, la directory di lavoro corrente può essere diversa. Per evitare errori, puoi trasmettere 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 le code push dell'API Task Queues:
from google.cloud import tasks
Una volta completata la migrazione di tutto il codice che crea o interagisce con le code push a 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 sia di un file
queue.yaml
sia dell'API Cloud Tasks non è consigliato, ma
potrebbe essere una parte inevitabile della migrazione da Task Queues a
Cloud Tasks a seconda della tua app. Leggi
Utilizzo della gestione delle code rispetto a queue.yaml per scoprire
le best practice.
Creazione di code
Leggi questa sezione se la tua app crea code a livello di programmazione 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 Google Cloud regione. La parte
QUEUE_ID
del nome della coda equivale al campo
Coda di Task Queues name
. Il nome della coda viene generato
durante la creazione della coda in base al progetto, alla regione e al QUEUE_ID
specificati.
In generale, la posizione (ovvero la regione) della coda deve corrispondere a quella
della tua 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 regioni sono chiamate rispettivamente europe-west1
e us-central1
.
Puoi specificare la configurazione della coda facoltativa durante la creazione della coda, ma puoi anche farlo aggiornando la coda dopo la creazione.
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
Devi attendere 7 giorni dopo l'eliminazione di una coda per crearne una con lo stesso ID coda nello stesso progetto e nella stessa località (ovvero 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à di 5/s
. La seconda
coda ha l'ID coda queue-red
e invia le attività a una velocità di 1/s
. Entrambi vengono creati nel progetto con ID progetto my-project-id
nella località us-central1
.
Si tratta dell'equivalente di Cloud Tasks della creazione
di code
in Task Queues.
gcloud
gcloud CLI deduce il progetto e la località dalla configurazione di gcloud CLI.
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 Cloud Tasks.
Impostazione della velocità di elaborazione della coda
La tabella seguente elenca i campi che differiscono da Task Queues a Cloud Tasks.
Campo Code 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 App Engine create o aggiornate utilizzando un
file |
total_storage_limit |
Funzionalità ritirata in Cloud Tasks | 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
velocità di elaborazione di una coda denominata queue-blue
già creata. Se
queue-blue
è stato creato o configurato utilizzando un file queue.yaml
, il seguente
esempio reimpostamax_burst_size
in base al valore max_dispatches_per_second
di
20
. Questo è l'equivalente di Cloud Tasks
dell'impostazione della velocità di
elaborazione della coda
in Task Queues.
gcloud
gcloud tasks queues update queue-blue \ --max-dispatches-per-second=20 \ --max-concurrent-dispatches=10
libreria client
Per scoprire di più, consulta Definire i limiti di frequenza.
Disattivazione e ripresa delle code
Cloud Tasks utilizza il termine sospensione nello stesso modo in cui Task Queues utilizza il termine disattivazione. La sospensione di una coda impedisce l'esecuzione delle attività nella coda finché la coda non viene ripristinata. Tuttavia, puoi continuare ad aggiungere attività a una coda in pausa. Cloud Tasks utilizza il termine riprendi nello stesso modo di Task Queues.
L'esempio seguente mette in pausa una coda con ID coda
queue1
. Questo è
l'equivalente di Cloud Tasks
della disattivazione
delle code
in Task Queues.
gcloud
gcloud tasks queues pause queue1
libreria client
Per saperne di più, consulta il riferimento di Cloud Tasks Messa in pausa delle code.
Eliminazione delle code
Una volta eliminata una coda, devi attendere 7 giorni prima di crearne una con lo stesso nome. Se non puoi aspettare 7 giorni, valuta la possibilità di eliminare definitivamente tutte le attività da una coda e riconfigurarla.
L'esempio seguente elimina la coda con ID coda
queue1
. Questo
è l'equivalente di Cloud Tasks
dell'eliminazione delle code
in Task Queues.
gcloud
gcloud tasks queues delete queue1
libreria client
Per saperne di più, consulta il riferimento di Cloud Tasks Eliminazione delle code.
Creazione e gestione delle attività
Questa sezione descrive come creare e gestire le attività utilizzando l'API Cloud Tasks.
Creare attività
La tabella seguente elenca i campi che differiscono da Task Queues a Cloud Tasks.
Campo Code 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 chiamate attività App Engine. |
method |
http_method |
Specifica il metodo di richiesta, ad esempio POST |
url |
relative_uri |
Specifica il gestore delle attività. Nota la differenza nell'ultima lettera:
i per Uniform Resource Identifier anziché
l per Uniform Resource Locator |
target |
app_engine_routing |
Facoltativo. Specifica service , version e instance di App Engine per un'attività App Engine. Se non impostati, vengono utilizzati il servizio, la versione e l'istanza predefiniti. |
L'esempio seguente crea un'attività che viene indirizzata a un servizio App Engine denominato worker
con il gestore /update_counter
. Si tratta dell'equivalente di Cloud Tasks per la
creazione
di attività
in 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à App Engine.
Specificare il servizio di destinazione e il routing
La specifica del servizio, della versione e dell'istanza di destinazione di App Engine per le attività App Engine è facoltativa. Per impostazione predefinita, le attività App Engine vengono indirizzate al servizio, alla versione e all'istanza predefiniti al momento del tentativo di esecuzione dell'attività.
Imposta la proprietà app_engine_routing
dell'attività durante la creazione per specificare un servizio, una versione o un'istanza App Engine diversi per l'attività.
Per indirizzare tutte le attività di una determinata coda allo stesso servizio, versione e istanza di App Engine, puoi impostare la proprietà app_engine_routing_override
nella coda.
Per saperne di più, consulta il riferimento di Cloud Tasks Configurare il routing.
Trasferimento dei dati al gestore
Come per le code di attività, puoi passare i dati al gestore in due modi utilizzando Cloud Tasks. Puoi trasmettere i dati come parametri di query nell'URI relativo oppure nel corpo della richiesta utilizzando i metodi HTTP POST o PUT.
Cloud Tasks utilizza il termine body nello stesso modo in cui Task Queues utilizza il termine payload. In Cloud Tasks, il tipo di contenuto del corpo predefinito è octet-stream anziché testo normale. Puoi impostare il tipo di contenuti del corpo specificandolo nell'intestazione.
L'esempio seguente passa una chiave al gestore
/update_counter
in due modi diversi. Questo è l'equivalente di Cloud Tasks di
trasferimento di dati al
gestore
in Task Queues.
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 del task, Cloud Tasks lo crea per te generando un ID task e deducendo il progetto e la località (ovvero la regione) in base alla coda che hai specificato durante la creazione del task.
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
dell'attività di code di attività name
.
Riutilizzare i nomi delle attività
Devi attendere prima di riutilizzare il nome di un'attività. Il tempo di attesa prima di farlo varia a seconda che la coda che distribuisce l'attività sia stata creata in Cloud Tasks o Task Queues.
Per le attività nelle code create utilizzando Task Queues (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 TASK_ID
impostato su first-try
e
la aggiunge alla coda predefinita. Questo è l'equivalente di Cloud Tasks per
denominare
le attività
in code di attività.
gcloud
gcloud CLI crea il nome del task 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
a quelli della coda a cui viene aggiunta l'attività.
Ritentare le attività non riuscite
Puoi impostare la configurazione dei tentativi di ripetizione delle attività nelle code durante la creazione della coda o aggiornandola. La tabella seguente elenca il campo Task Queues e il campo Cloud Tasks corrispondente.
Campo Code 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 di ripetizione specifici per l'attività
I parametri di ripetizione specifici per l'attività configurati in Task Queues funzionano in Cloud Tasks, ma non puoi modificarli o impostarli per nuove attività. Per modificare i parametri di ripetizione per un'attività che dispone di parametri di ripetizione specifici per l'attività, ricrea l'attività con una coda Cloud Tasks che dispone dei parametri di ripetizione desiderati.
L'esempio seguente mostra vari scenari di nuovi tentativi:
- In
fooqueue
, i tentativi di esecuzione delle attività vengono ripetuti fino a sette volte e per un massimo di due giorni dal primo tentativo di esecuzione. Dopo aver superato entrambi i limiti, l'operazione non andrà a buon fine in modo permanente. - In
barqueue
, App Engine tenta di ripetere le attività, aumentando l'intervallo linearmente tra un tentativo e l'altro fino a raggiungere il backoff massimo e riprovando indefinitamente all'intervallo massimo (quindi gli intervalli tra le richieste sono 10 s, 20 s, 30 s, ..., 190 s, 200 s, 200 s, ...). - In
bazqueue
, l'intervallo tra i tentativi inizia a 10 secondi, poi raddoppia tre volte, aumenta in modo lineare e infine i tentativi vengono eseguiti a intervalli massimi (quindi gli intervalli tra le richieste sono 10 s, 20 s, 40 s, 80 s, 160 s, 240 s, 300 s, 300 s, ...).
Questo è l'equivalente di Cloud Tasks di riprovare le attività in 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ù, consulta la documentazione di riferimento di Cloud Tasks Impostare i parametri di ripetizione dei tentativi.
Eliminazione di attività da una coda
Quando elimini un'attività, devi attendere 9 giorni prima di crearne una con lo stesso nome se l'attività si trovava in una coda creata utilizzando un file queue.yaml
oppure 1 ora se l'attività 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 dell'eliminazione
delle attività� in Task Queues.
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 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 dell'eliminazione delle attività in code di attività.
gcloud
Il progetto e la località della coda vengono dedotti dal progetto predefinito gcloud CLId.
gcloud tasks queues purge queue1
libreria client
Per saperne di più, consulta il riferimento di Cloud Tasks Eliminazione di tutte le attività da una coda.
Passaggi successivi
- Documentazione di Cloud Tasks
- Libreria client Cloud Tasks
- Panoramica del riferimento REST di Cloud Tasks
- Panoramica del riferimento RPC di Cloud Tasks
- Per un tutorial, consulta il codelab Eseguire la migrazione dalle code push di App Engine Task Queue a Cloud Tasks.