In questa pagina viene descritto l'utilizzo di Pub/Sub per il push dei messaggi all'endpoint del tuo servizio Cloud Run, dove i messaggi vengono successivamente consegnati ai container come richieste HTTP. Questa pagina mostra come consentire al servizio di elaborare in modo sicuro i messaggi inviati da una sottoscrizione Pub/Sub nello stesso progetto Google Cloud.
Grazie agli account di servizio e alle autorizzazioni IAM, puoi utilizzare Pub/Sub in modo sicuro e privato con Cloud Run, senza dover esporre pubblicamente il servizio Cloud Run. Solo la sottoscrizione Pub/Sub che hai configurato è in grado di richiamare il tuo servizio.
Scadenza accettazione per Cloud Run
Assicurati di impostare la scadenza di conferma della sottoscrizione per Pub/Sub (ackDeadlineSeconds
) sul valore massimo consentito di 600 secondi.
Il tuo servizio Cloud Run deve confermare il messaggio Pub/Sub
restituendo una risposta entro 600
secondi, altrimenti Pub/Sub recapita nuovamente il messaggio, causando
un duplicato dell'attivazione del servizio Cloud Run.
Casi d'uso
I possibili casi d'uso includono:
- Trasformazione dei dati dopo la ricezione di un evento in seguito al caricamento di un file in un bucket Cloud Storage.
- Elaborazione dei log della suite operativa di Google Cloud con Cloud Run esportandoli in Pub/Sub
- Pubblicazione ed elaborazione dei tuoi eventi personalizzati dai tuoi servizi Cloud Run.
Panoramica sull'integrazione
Per integrare il tuo servizio con Pub/Sub,
- Crea un argomento Pub/Sub.
- Aggiungi codice nel tuo servizio Cloud Run per rispondere ai messaggi Pub/Sub inviati all'argomento che hai creato.
- Crea un account di servizio con le autorizzazioni richieste.
- Crea una sottoscrizione Pub/Sub e associala all'account di servizio. Questa sottoscrizione invierà al tuo servizio qualsiasi messaggio pubblicato nell'argomento.
Prima di iniziare
- Se non lo hai già fatto, configura il tuo ambiente come descritto nella pagina di configurazione di Cloud Run.
- Questa guida presuppone che tu abbia già un servizio Cloud Run e voglia aggiungere codice che lo integra con Pub/Sub. Se non disponi di questo servizio, potresti usare il tutorial di Cloud Run per Pub/Sub anziché seguire questa pagina.
Aggiungi codice per gestire i messaggi da Pub/Sub
Modifica il codice di servizio esistente per aggiungere il codice necessario per supportare Pub/Sub. Il servizio deve estrarre il messaggio dalla richiesta e restituire un codice di operazione prevista. I seguenti snippet per le lingue selezionate (puoi utilizzare qualsiasi lingua) mostrano come eseguire questa operazione per un semplice messaggio Hello World:
Node.js
Python
Vai
Java
Devi programmare il servizio in modo che restituisca un codice di risposta HTTP preciso. I codici di operazione riuscita, come 200
o 204
, confermano l'elaborazione completa del messaggio Pub/Sub I codici di errore, come HTTP 400
o 500
, indicano
che il messaggio verrà ripetuto, come descritto in
Ricezione di messaggi tramite Push.
Crea e poi esegui il deployment del tuo servizio Cloud Run dopo averlo aggiornato con il codice Pub/Sub riportato sopra.
Crea un account di servizio per l'abbonamento
Devi creare un account di servizio da associare al tuo abbonamento Pub/Sub e autorizzarlo a richiamare il tuo servizio Cloud Run. I messaggi Pub/Sub di cui è stato eseguito il push al servizio Cloud Run avranno l'identità di questo account di servizio.
Puoi utilizzare un account di servizio esistente per rappresentare l'identità dell'abbonamento Pub/Sub oppure crearne uno nuovo.
Per creare un nuovo account di servizio e concedergli l'autorizzazione per richiamare il servizio Cloud Run:
console
In Google Cloud Console, vai alla pagina Account di servizio.
Seleziona un progetto.
Inserisci il nome di un account di servizio da visualizzare in Google Cloud Console.
Google Cloud Console genera un ID account di servizio basato su questo nome. Se necessario, modifica l'ID. Non potrai modificare l'ID in un secondo momento.
(Facoltativo) Inserisci una descrizione dell'account di servizio.
Fai clic su Crea.
Fai clic sul campo Seleziona un ruolo.
In Tutti i ruoli, seleziona Cloud Run > Invoker di Cloud Run.
Fai clic su Fine.
Riga di comando
Crea l'account di servizio:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \ --display-name "DISPLAYED_SERVICE_ACCOUNT_NAME"
Sostituisci
- SERVICE_ACCOUNT_NAME con un nome in lettere minuscole univoco all'interno del tuo progetto Google Cloud, ad esempio
my-invoker-service-account-name
. - DISPLAYED_SERVICE_ACCOUNT_NAME con il nome da visualizzare per questo account di servizio, ad esempio nella console, ad esempio
My Invoker Service Account
.
- SERVICE_ACCOUNT_NAME con un nome in lettere minuscole univoco all'interno del tuo progetto Google Cloud, ad esempio
Per Cloud Run, autorizza l'account di servizio a richiamare il tuo servizio:
gcloud run services add-iam-policy-binding SERVICE \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/run.invoker
Sostituisci
- SERVICE con il nome del servizio in cui vuoi richiamare.
- SERVICE_ACCOUNT_NAME con il nome dell'account di servizio.
- PROJECT_ID con il tuo ID progetto Google Cloud.
Terraform
Questa sezione mostra come utilizzare Terraform per definire il servizio in una configurazione Terraform utilizzando le seguenti risorse del provider di Google Cloud Platform:
Aggiungi quanto segue al tuo file main.tf
esistente per creare l'account di servizio:
Concedi all'account di servizio l'autorizzazione per richiamare il servizio Cloud Run:
Crea un argomento Pub/Sub
Le richieste al tuo servizio vengono attivate dai messaggi pubblicati in un argomento Pub/Sub, quindi dovrai creare un argomento:
console
Visita la pagina Argomenti Pub/Sub in Google Cloud Console.
Fai clic su Crea un argomento.
Inserisci un Nome univoco per l'argomento, ad esempio MyTopic.
Riga di comando
gcloud pubsub topics create TOPIC-NAME
Sostituisci TOPIC-NAME con un nome di argomento unico nel progetto Google Cloud.
Terraform
Questa sezione mostra come utilizzare Terraform per definire il servizio in una configurazione Terraform utilizzando la risorsa google_pubsub_topic
del provider di Google Cloud Platform.
Aggiungi i seguenti contenuti al file main.tf
esistente:
Creare un abbonamento push e associarlo all'account di servizio
Dopo aver creato l'argomento Pub/Sub, devi sottoscrivere il servizio per ricevere i messaggi inviati a un argomento e associare la sottoscrizione all'account di servizio che hai creato per il servizio. Puoi utilizzare Google Cloud Console o la riga di comando gcloud:
console
Vai alla pagina degli argomenti Pub/Sub.
Fai clic sull'argomento a cui vuoi iscriverti.
Fai clic su Crea abbonamento per visualizzare il modulo di abbonamento:
Nel modulo
- Specifica il tipo di pubblicazione push.
- Per l'URL endpoint, specifica l'URL del servizio, che viene visualizzato nella pagina dei dettagli del servizio.
- Nel menu a discesa Account di servizio, seleziona l'account di servizio che hai creato con le autorizzazioni richieste.
- Imposta una scadenza dell'abbonamento e una scadenza per la conferma di 600 secondi.
- Fai clic su Crea.
L'abbonamento è completo. I messaggi pubblicati sull'argomento verranno inseriti automaticamente nel tuo servizio.
Riga di comando
Consenti a Pub/Sub di creare token di autenticazione nel tuo progetto:
gcloud projects add-iam-policy-binding PROJECT-ID \ --member=serviceAccount:service-PROJECT-NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Sostituisci
- PROJECT-ID con il tuo ID progetto Google Cloud.
PROJECT-NUMBER con il numero di progetto Google Cloud.
L'ID e il numero del progetto sono elencati nel riquadro Informazioni sul progetto in Google Cloud Console relativo al tuo progetto.
Crea una sottoscrizione Pub/Sub con l'account di servizio che hai creato con le autorizzazioni richieste:
gcloud pubsub subscriptions create SUBSCRIPTION-ID --topic TOPIC-NAME \ --ack-deadline=600 \ --push-endpoint=SERVICE-URL/ \ --push-auth-service-account=SERVICE-ACCOUNT-NAME@PROJECT-ID.iam.gserviceaccount.com
Sostituisci
- TOPIC-NAME con l'argomento creato in precedenza.
- SERVICE-URL con l'URL HTTPS fornito al momento del deployment del servizio. Puoi trovarlo utilizzando il comando
gcloud run services describe
, specificando il nome del tuo servizio: cerca la riga di ritorno che inizia condomain
. - PROJECT-ID con il tuo ID progetto Google Cloud.
Il flag
--push-auth-service-account
attiva la funzionalità push di Pub/Sub per Autenticazione e autorizzazioneTieni presente che la scadenza per la conferma è impostata su un massimo di 600 secondi.
L'abbonamento è completo. I messaggi pubblicati sull'argomento verranno inseriti automaticamente nel tuo servizio. Puoi eseguire il push di un messaggio di prova all'argomento utilizzando il comando:
gcloud pubsub topics publish TOPIC --message "hello"
Sostituisci TOPIC con il nome dell'argomento che hai creato.
Terraform
Utilizza le seguenti risorse del provider di Google Cloud Platform:
Consenti a Pub/Sub di creare token di autenticazione nel tuo progetto. Aggiungi quanto segue al tuo file main.tf
:
Crea una sottoscrizione Pub/Sub con l'account di servizio che hai creato con le autorizzazioni richieste. Aggiungi quanto segue al tuo file main.tf
:
Per applicare queste risorse al tuo progetto, procedi nel seguente modo:
Inizializza Terraform:
terraform init
Visualizza la configurazione Terraform che verrà applicata al tuo progetto:
terraform plan
Applicare la configurazione Terraform:
terraform apply
Conferma di voler applicare le azioni descritte inserendo
yes
. Apri il tuo progetto Google Cloud per vedere se le risorse indicate sopra sono state applicate.Per rimuovere le risorse applicate con Terraform:
terraform destroy
Anche in questo caso, conferma di voler applicare le azioni descritte inserendo
yes
.
Passaggi successivi
- Per informazioni su come aumentare la sicurezza della produzione, utilizza i controlli in entrata interni per trovare informazioni più dettagliate sulla limitazione dei dati in entrata.
- Per un'applicazione di esempio completa, consulta il tutorial di Cloud Run per Pub/Sub.
- Consulta il tutorial di Cloud Run per Cloud Storage per un esempio di utilizzo di Pub/Sub per promuovere l'elaborazione asincrona delle immagini.
- Per ulteriori dettagli su Pub/Sub, consulta la documentazione di Pub/Sub.