I gestori Cloud Tasks possono essere eseguiti su qualsiasi endpoint HTTP con un indirizzo IP esterno, ad esempio GKE, Compute Engine o anche un server web on-premise. 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 di base e inserirle nelle code Cloud Tasks.
Per le attività con target HTTP (anziché target App Engine espliciti, meno comuni), esistono due modi per creare attività:
Metodo
CreateTask
:devi creare esplicitamente un oggetto attività. Utilizza questo metodo se le attività nella coda hanno configurazioni di routing diverse. In questo caso, specifichi il routing a livello di attività e non puoi utilizzare il routing a livello di coda. Questo approccio utilizza il metodoCreateTask
.Metodo
BufferTask
:utilizza questo metodo se la coda è configurata per memorizzare nel buffer le attività davanti a un servizio. La coda deve avere un routing a livello di coda. Questo approccio utilizza il metodoBufferTask
.
Crea un'attività utilizzando il metodo CreateTask
Questa sezione descrive la creazione di un'attività mediante la costruzione dell'oggetto attività. Utilizzi
il metodo CreateTask
.
Quando crei un'attività utilizzando il metodo CreateTask
, crei e definisci esplicitamente l'oggetto attività. Devi specificare il servizio e il gestore che elaborano
l'attività.
Se vuoi, puoi trasmettere al gestore dati specifici dell'attività. Puoi anche ottimizzare la configurazione per l'attività, ad esempio pianificare un orario futuro in cui deve essere eseguita o limitare il numero di tentativi di esecuzione dell'attività in caso di errore (vedi Configurazione avanzata).
Gli esempi riportati di seguito chiamano il metodo CreateTask
per creare un'attività utilizzando le librerie client Cloud Tasks.
C#
Go
Java
Prendi nota del file pom.xml
:
Node.js
Prendi nota del file package.json
:
PHP
Prendi nota del file composer.json
:
Python
Prendi nota del file requirements.txt
:
Ruby
Crea un'attività utilizzando il metodo BufferTask
Questa sezione descrive la creazione di un'attività inviando una richiesta HTTP. Il metodo
che utilizzi si chiama BufferTask
.
Limitazioni
Il metodo BufferTask
è soggetto alle seguenti 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 attività:questo metodo non supporta il routing a livello di attività. Poiché non è possibile aggiungere informazioni di routing quando si crea un'attività in questo modo, devi utilizzare il routing a livello di coda (altrimenti l'attività non ha informazioni di routing). Se la tua coda non utilizza già il routing a livello di coda, consulta Configurare il routing a livello di coda per le attività HTTP.
Chiama il metodo BufferTask
Gli esempi seguenti mostrano come creare un'attività inviando una richiesta POST
HTTP all'endpoint buffer
dell'API Cloud Tasks.
curl
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 tua richiesta, ad esempioGET
oPOST
.PROJECT_ID
: l'ID del tuo Google Cloud progetto. Puoi ottenerlo eseguendo questo comando nel terminale:gcloud config get-value project
LOCATION
: la posizione della coda.QUEUE_ID
: l'ID della coda.
Python
Configurare un account di servizio per l'autenticazione del gestore di destinazione HTTP
Cloud Tasks può chiamare i gestori di destinazione HTTP che richiedono l'autenticazione se disponi di un service account con le credenziali appropriate per accedere al gestore.
Puoi utilizzare il tuo account di servizio attuale se gli concedi i ruoli appropriati. Queste istruzioni riguardano la creazione di un nuovo account di servizio specifico per questa funzione. Il account di servizio esistente o nuovo utilizzato per l'autenticazione di Cloud Tasks deve trovarsi nello stesso progetto delle code Cloud Tasks.
Nella console Google Cloud , vai alla pagina Service Accounts.
Se necessario, seleziona il progetto appropriato.
Fai clic su Crea account di servizio.
Nella sezione Dettagli service account, assegna un nome all'account. La console crea un nome di account email correlato per l'account. Ecco come 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 Cloud Tasks Enqueuer. Questo ruolo concede al 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 Service Account User. Questo ruolo consente al account di servizio di autorizzare la coda a creare token per suo conto utilizzando le credenziali del account di servizio.
Se il tuo gestore fa parte di Google Cloud, concedi al account di servizio il ruolo associato all'accesso al servizio in cui viene eseguito il gestore. Ogni servizio all'interno di Google Cloud richiede un ruolo diverso. Ad esempio, per accedere a un gestore su Cloud Run, concedi il ruolo Invoker di Cloud Run. Puoi utilizzare l'account di servizio che hai appena creato o qualsiasi altro account di servizio nel tuo progetto.
Fai clic su Fine per completare la creazione del service account.
Cloud Tasks deve avere un proprio account di servizio a cui è stato concesso il ruolo
Cloud Tasks Service Agent
. In questo modo può generare token di intestazione in base alle credenziali associate al account di servizio Cloud Tasks per l'autenticazione con la destinazione del gestore. L'account di servizio Cloud Tasks con questo ruolo concesso viene creato automaticamente quando abiliti l'API Cloud Tasks, a meno che tu non l'abbia abilitata prima del 19 marzo 2019, nel qual caso devi aggiungere il ruolo manualmente.
Utilizza attività target HTTP con token di autenticazione
Per l'autenticazione tra Cloud Tasks e un gestore di target HTTP che richiede tale autenticazione, Cloud Tasks crea un token di intestazione. Questo token si basa sulle credenziali del account di servizio Cloud Tasks Enqueuer
, identificato dal suo indirizzo email. Il account di servizio utilizzato per l'autenticazione deve far parte dello stesso progetto in cui si trova la coda Cloud Tasks. La richiesta, con il token di intestazione, viene inviata dalla coda al gestore tramite HTTPS. Puoi utilizzare un token ID o un token di accesso.
I token ID devono essere generalmente utilizzati per qualsiasi gestore in esecuzione su Google Cloud,
ad esempio su Cloud Run Functions o Cloud Run. L'eccezione principale riguarda le API di Google ospitate su *.googleapis.com
: queste API prevedono un token di accesso.
Puoi configurare l'autenticazione a livello di coda o di attività. Per configurare l'autenticazione a livello di coda, consulta Crea code di Cloud Tasks. Se l'autenticazione è configurata a livello di coda, questa configurazione esegue l'override della configurazione a livello di attività. Per configurare l'autenticazione a livello di attività, specifica un token ID (OIDC) o un token di accesso (OAuth) nell'attività stessa.
Metodo CreateTask
Gli esempi riportati di seguito utilizzano il metodo CreateTask
con le librerie client Cloud Tasks per creare un'attività che includa anche la creazione di un token di intestazione. Negli esempi vengono utilizzati token ID.
Per utilizzare un token di accesso, sostituisci il parametro OIDC con il parametro OAuth
appropriato per la lingua durante la creazione della richiesta.
Vai
Java
Prendi nota del file pom.xml
:
Node.js
Prendi nota del file package.json
:
Python
Prendi nota del file requirements.txt
:
Metodo BufferTask
Gli esempi seguenti utilizzano le credenziali predefinite dell'applicazione per l'autenticazione quando
utilizzano il metodo BufferTask
per creare un'attività.
curl
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 tua richiesta, ad esempioGET
oPOST
.PROJECT_ID
: l'ID del tuo Google Cloud progetto. Puoi ottenerlo eseguendo questo comando 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. Puoi ottenerlo eseguendo il seguente comando nel terminale:gcloud auth application-default login
gcloud auth application-default print-access-token
Python
Nel seguente esempio di codice, fornisci il valore del token di autenticazione.
Fornire i propri gestori delle attività target HTTP
I gestori delle attività di destinazione HTTP sono molto simili ai gestori delle attività 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 maggiori informazioni su cosa comporta, consulta OpenID Connect, in particolare Convalida di un token ID.
Intestazioni: una richiesta di destinazione HTTP ha intestazioni impostate dalla coda, che contengono informazioni specifiche dell'attività che il gestore può utilizzare. Queste intestazioni sono simili, ma non identiche, a quelle impostate nelle richieste di attività App Engine. Queste intestazioni forniscono informazioni solo. Non devono essere utilizzati 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 che hanno eseguito l'accesso all'applicazione, che sono autorizzati a impostare le intestazioni a scopo di test.
Le richieste di destinazione HTTP contengono sempre le seguenti intestazioni:
Intestazione 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 di 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 tentativi di ripetizione di questa attività. Per il primo tentativo, questo valore è 0
. Questo numero include i tentativi in cui l'attività non è riuscita a causa dei 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 riuscita, tutte le risposte precedenti del gestore non sono riuscite. Questo numero non include gli errori dovuti ai codici di errore 5XX. X-CloudTasks-TaskETA
L'ora di pianificazione dell'attività, specificata in secondi a partire dal 1° gennaio 1970. Inoltre, le richieste di Cloud Tasks potrebbero contenere le seguenti intestazioni:
Intestazione Descrizione X-CloudTasks-TaskPreviousResponse
Il codice di risposta HTTP del precedente tentativo. X-CloudTasks-TaskRetryReason
Il motivo per cui viene eseguito un nuovo tentativo di esecuzione dell'attività.
Aggiungere manualmente il ruolo Agente di servizio Cloud Tasks
Puoi aggiungere manualmente il ruolo
Agente di servizio Cloud Tasks
(roles/cloudtasks.serviceAgent
) all'account di servizio Cloud Tasks, che è l'agente di servizio principale per Cloud Tasks.
Questa operazione è necessaria solo se hai abilitato l'API Cloud Tasks prima del 19 marzo 2019.
Console
- Trova e copia il numero di progetto per il tuo progetto Google Cloud nella pagina Benvenuto della console Google Cloud .
Nella console Google Cloud vai alla pagina IAM.
Fai clic su Concedi accesso. Si apre il riquadro Concedi l'accesso.
Nella sezione Aggiungi entità, aggiungi un indirizzo email in questo formato:
service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com
Sostituisci
PROJECT_NUMBER
con il numero del tuo progetto Google Cloud .Nella sezione Assegna i ruoli, cerca e seleziona Agente di servizio Cloud Tasks.
Fai clic su Salva.
gcloud
Trova il numero del progetto:
gcloud projects describe PROJECT_ID --format='table(projectNumber)'
Sostituisci PROJECT_ID con l'ID progetto.
Copia il numero.
Concedi al account di servizio Cloud Tasks il ruolo
Cloud Tasks Service Agent
utilizzando il numero di progetto che hai copiato:gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com \ --role roles/cloudtasks.serviceAgent
Sostituisci quanto segue:
PROJECT_ID
: il tuo ID progetto Google Cloud .PROJECT_NUMBER
: il tuo numero di progetto Google Cloud.
Altre configurazioni
Puoi configurare diversi attributi delle attività. Per un elenco completo, consulta la definizione della risorsa attività. Ad esempio, puoi personalizzare i seguenti attributi:
- Denominazione:se scegli di specificare un nome per l'attività, Cloud Tasks può utilizzare questo nome per garantire la deduplicazione delle attività, anche se l'elaborazione necessaria a questo scopo può aumentare la latenza.
- Pianificazione:puoi programmare un'attività per un momento futuro. Questa funzionalità è supportata
solo per
CreateTask
e non perBufferTask
.
Puoi anche configurare gli attributi della coda, come gli override del routing, i limiti di frequenza e i parametri di ripetizione. Queste configurazioni vengono applicate a tutte le attività di una coda. Per saperne di più, vedi Configurare le code Cloud Tasks.
Passaggi successivi
- Scopri di più sulle attività di destinazione HTTP nel riferimento API RPC.
- Scopri di più sulle attività di destinazione HTTP nel riferimento API REST.