Con questa versione delle destinazioni HTTP, i gestori di Cloud Tasks possono essere eseguiti su qualsiasi endpoint HTTP con un indirizzo IP pubblico, come Cloud Functions, Cloud Run, GKE, Compute Engine o persino un server web on-prem. Le tue attività possono essere eseguite su uno qualsiasi di questi servizi in modo affidabile e configurabile.
Questa pagina mostra come creare in modo programmatico attività target HTTP e posizionarle nelle code di Cloud Tasks.
Se hai scelto di specificare un nome per l'attività, Cloud Tasks può utilizzare quel nome per garantire la deduplicazione dell'attività, sebbene l'elaborazione necessaria per questo possa aumentare la latenza.
In generale, le attività vengono create sotto forma di richiesta HTTP. L'utilizzo delle librerie client e di un account di servizio, come fanno gli esempi riportati di seguito, può essere utile per gestire i dettagli della comunicazione con il server Cloud Tasks e semplificare la creazione delle attività.
Creazione di attività target HTTP
Esistono due modi per creare attività che hanno target HTTP.
Metodo
BufferTask
: utilizza questo metodo se la coda è configurata per eseguire il buffering delle attività davanti a un servizio. La coda deve avere il routing a livello di coda.Metodo
CreateTask
: è più complesso. Devi creare esplicitamente un oggetto attività. Utilizza questo metodo se le attività in coda hanno configurazioni di routing diverse. In questo caso, specifichi il routing a livello di attività.
Metodo BufferTask
Limitazioni
Librerie client: il metodo
BufferTask
non è supportato nelle librerie client.API RPC: il metodo
BufferTask
non è supportato nell'API RPC.Routing a livello di coda: per utilizzare il metodo
BufferTask
, la coda deve utilizzare il routing a livello di coda (in caso contrario l'attività non contiene informazioni di routing). Se la coda non utilizza già il routing a livello di coda, consulta Configurare il routing a livello di coda per le attività HTTP.
Esempio REST
Il seguente snippet di codice mostra un esempio di creazione di attività utilizzando il metodo BufferTask
con curl
:
curl -X HTTP_METHOD\ "https://cloudtasks.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION/queues/QUEUE_ID/tasks:buffer" \
Sostituisci quanto segue:
HTTP_METHOD
: il metodo HTTP per la richiesta, ad esempioGET
oPOST
.PROJECT_ID
: l'ID del tuo progetto Google Cloud. Per farlo, esegui quanto segue nel terminale:gcloud config get-value project
LOCATION
: la posizione della coda.QUEUE_ID
: l'ID della coda.
Metodo CreateTask
Per creare un'attività utilizzando il metodo CreateTask
, devi creare e
definire in modo esplicito l'oggetto attività. Devi specificare il servizio e il gestore che elaborano
l'attività.
Se vuoi, puoi passare al gestore i dati specifici dell'attività. Puoi anche ottimizzare la configurazione dell'attività, ad esempio pianificare un orario futuro in cui eseguirla o limitare il numero di tentativi dell'attività in caso di errore.
I seguenti esempi seguono il metodo CreateTask
per creare un'attività utilizzando le librerie client di Cloud Tasks.
C#
Python
Prendi nota del file requirements.txt
:
Java
Prendi nota del file pom.xml
:
PHP
Prendi nota del file composer.json
:
Go
Node.js
Prendi nota del file package.json
:
Ruby
Configurazione degli account di servizio per l'autenticazione del gestore di destinazione HTTP
Cloud Tasks può chiamare i gestori HTTP Target che richiedono l'autenticazione se hai un account di servizio con le credenziali appropriate per accedere al gestore.
Se disponi di un account di servizio attuale che vuoi utilizzare, puoi farlo. Devi solo assegnare i ruoli appropriati. Queste istruzioni riguardano la creazione di un nuovo account di servizio specifico per questa funzione. L'account di servizio esistente o nuovo utilizzato per l'autenticazione di Cloud Tasks deve trovarsi nello stesso progetto delle code di Cloud Tasks.
Nella console Google Cloud, vai alla pagina Account di servizio.
Se necessario, seleziona il progetto appropriato.
Fai clic su Crea account di servizio.
Nella sezione Dettagli account di servizio, assegna un nome all'account. La console crea un nome di account email correlato per l'account. In questo modo puoi fare riferimento all'account. Puoi anche aggiungere una descrizione dello scopo dell'account. Fai clic su Crea e continua.
Nella sezione Concedi a questo account di servizio l'accesso al progetto, fai clic su Seleziona un ruolo. Cerca e seleziona In coda di Cloud Tasks. Questo ruolo concede all'account di servizio l'autorizzazione per aggiungere attività alla coda.
Fai clic su + Aggiungi un altro ruolo.
Fai clic su Seleziona un ruolo. Cerca e seleziona Utente account di servizio. Questo ruolo consente all'account di servizio di autorizzare la coda per creare token per suo conto utilizzando le credenziali dell'account di servizio.
Se il gestore fa parte di Google Cloud, concedi all'account di servizio il ruolo associato all'accesso al servizio in cui è in esecuzione il gestore. Ogni servizio all'interno di Google Cloud richiede un ruolo diverso. Ad esempio, per accedere a un gestore su Cloud Run è necessario il ruolo Invoker di Cloud Run e così via. Puoi utilizzare l'account di servizio appena creato o qualsiasi altro account di servizio nel tuo progetto.
Fai clic su Fine per completare la creazione dell'account di servizio.
Cloud Tasks deve avere un account di servizio dedicato a cui è stato concesso il ruolo Cloud Tasks Service Agent
. In questo modo può generare token di intestazione in base alle credenziali associate all'account di servizio Cloud Tasks per l'autenticazione con la destinazione del gestore. L'account di servizio Cloud Tasks a cui è stato concesso questo ruolo viene creato automaticamente quando abiliti l'API Cloud Tasks, a meno che tu non l'abbia abilitata prima del 19 marzo 2019. In tal caso, devi aggiungere il ruolo manualmente.
Utilizzo di attività HTTP Target con i token di autenticazione
Per l'autenticazione tra Cloud Tasks e un gestore di destinazione HTTP che richiede questa autenticazione, Cloud Tasks crea un token di intestazione. Questo token si basa sulle credenziali dell'account di servizio Cloud Tasks Enqueuer
, identificate dal suo indirizzo email. L'account di servizio utilizzato per l'autenticazione deve far parte dello stesso progetto in cui si trova la coda di attività Cloud. La richiesta, con il token di intestazione,
viene inviata tramite HTTPS dalla coda al gestore. Puoi utilizzare un token ID o un token di accesso.
I token ID in genere devono essere utilizzati per qualsiasi gestore in esecuzione su Google Cloud, ad esempio su Cloud Functions o Cloud Run. L'eccezione principale riguarda le API di Google ospitate su *.googleapis.com
: queste API si aspettano un token di accesso.
Puoi specificare un token ID (OIDC) o un token di accesso (OAuth) nell'attività stessa.
Metodo BufferTask
Limitazioni
Librerie client: il metodo
BufferTask
non è supportato nelle librerie client.API RPC: il metodo
BufferTask
non è supportato nell'API RPC.Routing a livello di coda: per utilizzare il metodo
BufferTask
, la coda deve utilizzare il routing a livello di coda (in caso contrario l'attività non contiene informazioni di routing). Se la coda non utilizza già il routing a livello di coda, consulta Configurare il routing a livello di coda per le attività HTTP.
Esempio REST con autenticazione
Quando utilizzi il metodo BufferTask
per creare le attività, qualsiasi configurazione OIDC o OAuth impostata a livello di coda sostituisce la configurazione a livello di attività.
Per configurare l'autenticazione a livello di coda, vedi Creare code di Cloud Tasks. Tuttavia, puoi autenticarti durante la creazione dell'attività. L'esempio seguente utilizza le credenziali predefinite dell'applicazione per l'autenticazione durante la creazione di un'attività:
curl -X HTTP_METHOD\ "https://cloudtasks.googleapis.com/v2/projects/PROJECT_ID/locations/LOCATION/queues/QUEUE_ID/tasks:buffer" \ -H "Authorization: Bearer ACCESS_TOKEN"
Sostituisci quanto segue:
HTTP_METHOD
: il metodo HTTP per la richiesta, ad esempioGET
oPOST
.PROJECT_ID
: l'ID del tuo progetto Google Cloud. Per farlo, esegui quanto segue nel terminale:gcloud config get-value project
LOCATION
: la posizione della coda.QUEUE_ID
: l'ID della coda.ACCESS_TOKEN
: il tuo token di accesso. Per farlo, esegui quanto segue nel terminale:gcloud auth application-default login
gcloud auth application-default print-access-token
Metodo CreateTask
Gli esempi seguenti utilizzano il metodo CreateTask
con le librerie client di Cloud Tasks per creare un'attività che includa anche la creazione di un token di intestazione. Negli esempi vengono utilizzati i token ID.
Per utilizzare un token di accesso, sostituisci il parametro OIDC con il parametro OAuth appropriato per il linguaggio nella creazione della richiesta.
Python
Prendi nota del file requirements.txt
:
Java
Prendi nota del file pom.xml
:
Go
Node.js
Prendi nota del file package.json
:
Fornitura di gestori di attività di destinazione HTTP
I gestori di attività target HTTP sono molto simili ai gestori di attività di App Engine, con le seguenti eccezioni:
- Timeout: per tutti i gestori di attività di destinazione HTTP, il timeout predefinito è di 10 minuti, con un massimo di 30 minuti.
- Logica di autenticazione: se stai scrivendo il tuo codice nel servizio di destinazione per convalidare il token, devi utilizzare un token ID. Per ulteriori informazioni su cosa comporta, consulta OpenID Connect, in particolare la Convalida di un token ID.
Intestazioni: una richiesta target HTTP ha intestazioni impostate dalla coda, che contengono informazioni specifiche sulle attività che il gestore può utilizzare. Queste intestazioni sono simili, ma non identiche, alle intestazioni impostate nelle richieste di attività di App Engine. Queste intestazioni forniscono solo informazioni. Non devono essere utilizzate come fonti di identità.
Se queste intestazioni erano presenti in una richiesta di un utente esterno alla tua app, vengono sostituite da quelle interne. L'unica eccezione riguarda le richieste degli amministratori dell'applicazione che hanno eseguito l'accesso, autorizzati a impostare le intestazioni a scopo di test.
Le richieste di destinazione HTTP contengono sempre le seguenti intestazioni:
Titolo Descrizione X-CloudTasks-QueueName
Il nome della coda. X-CloudTasks-TaskName
Il nome "breve" dell'attività o, se non è stato specificato alcun nome al momento della creazione, un ID univoco generato dal sistema. Questo è il valore my-task-id
nel nome completo dell'attività, ovvero task_name =projects/my-project-id/locations/my-location/queues/my-queue-id/tasks/my-task-id
.X-CloudTasks-TaskRetryCount
Il numero di nuovi tentativi di questa attività. Per il primo tentativo, questo valore è 0
. Questo numero include i tentativi in cui l'attività non è riuscita a causa di codici di errore 5XX e non ha mai raggiunto la fase di esecuzione.X-CloudTasks-TaskExecutionCount
Il numero totale di volte in cui l'attività ha ricevuto una risposta dal gestore. Poiché Cloud Tasks elimina l'attività una volta ricevuta una risposta positiva, tutte le precedenti risposte del gestore non sono riuscite. Questo numero non include gli errori dovuti ai codici di errore 5XX. X-CloudTasks-TaskETA
L'ora pianificata dell'attività, specificata in secondi dal 1° gennaio 1970. Inoltre, le richieste da Cloud Tasks potrebbero contenere le seguenti intestazioni:
Titolo Descrizione X-CloudTasks-TaskPreviousResponse
Il codice di risposta HTTP del tentativo precedente. X-CloudTasks-TaskRetryReason
Il motivo per il nuovo tentativo dell'attività.
Aggiunta manuale del ruolo Agente di servizio Cloud Tasks al tuo account di servizio Cloud Tasks
Questa operazione è necessaria solo se hai abilitato l'API Cloud Tasks prima del 19 marzo 2019.
Utilizzo della console
- Trova il numero del progetto nella pagina delle impostazioni del progetto Google Cloud.
- Copia il numero.
- Apri la pagina della Console di amministrazione IAM.
- Fai clic su Concedi accesso. Si apre la schermata Concedi l'accesso.
Nella sezione Aggiungi entità, aggiungi un indirizzo email nel formato:
service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com
Sostituisci PROJECT_NUMBER con il numero del progetto sopra indicato.
Nella sezione Assegna ruoli, cerca e seleziona Agente di servizio Cloud Tasks.
Fai clic su Salva.
Utilizzo di gcloud
Trova il numero del tuo progetto:
gcloud projects describe PROJECT_ID --format='table(projectNumber)'
Sostituisci PROJECT_ID con l'ID progetto.
Copia il numero.
Concedi all'account di servizio Cloud Tasks il ruolo
Cloud Tasks Service Agent
utilizzando il numero di progetto che hai copiato in basso:gcloud projects add-iam-policy-binding PROJECT_ID --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com --role roles/cloudtasks.serviceAgent
Sostituisci PROJECT_ID con il tuo ID progetto e PROJECT_NUMBER con il numero del progetto sopra indicato.
Passaggi successivi
- Scopri di più sulle attività HTTP Target nel riferimento sull'API RPC.
- Scopri di più sulle attività con target HTTP nel riferimento sull'API REST.