Ricevi eventi Pub/Sub utilizzando un servizio Cloud Run autenticato

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Questo tutorial mostra come eseguire il deployment di un'applicazione containerizzata utilizzando un servizio Cloud Run autenticato che riceve eventi utilizzando Pub/Sub. Pub/Sub è un servizio di messaggistica in tempo reale completamente gestito che consente di inviare e ricevere messaggi tra applicazioni indipendenti.

Obiettivi

In questo tutorial, imparerai a:

  1. Eseguire il deployment di un servizio di ricezione di eventi in Cloud Run che richiede chiamate autenticate.

  2. Creare un trigger Eventarc che collega un argomento Pub/Sub al servizio Cloud Run.

  3. Pubblica un messaggio nell'argomento Pub/Sub per generare un evento.

  4. Visualizza l'evento nei log di Cloud Run.

Costi

Questo tutorial utilizza i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud possono beneficiare di una prova gratuita.

Prima di iniziare

    Alcuni passaggi di questo documento potrebbero non funzionare correttamente se la tua organizzazione applica vincoli al tuo ambiente Google Cloud. In tal caso, potresti non essere in grado di completare attività come la creazione di indirizzi IP pubblici o le chiavi degli account di servizio. Se effettui una richiesta che restituisce un errore relativo ai vincoli, scopri come sviluppare applicazioni in un ambiente Google Cloud vincolato.

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Installa e inizializza Google Cloud CLI.
  3. Crea o seleziona un progetto Google Cloud.

    • Creare un progetto Cloud:

      gcloud projects create PROJECT_ID
    • Seleziona il progetto Cloud che hai creato:

      gcloud config set project PROJECT_ID
  4. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

  5. Installa e inizializza Google Cloud CLI.
  6. Crea o seleziona un progetto Google Cloud.

    • Creare un progetto Cloud:

      gcloud projects create PROJECT_ID
    • Seleziona il progetto Cloud che hai creato:

      gcloud config set project PROJECT_ID
  7. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

  8. Aggiorna i componenti gcloud:
    gcloud components update
  9. Accedi con il tuo account:
    gcloud auth login
  10. Abilita le API:
    gcloud services enable run.googleapis.com \
      eventarc.googleapis.com \
      pubsub.googleapis.com \
      cloudbuild.googleapis.com
  11. Imposta le variabili di configurazione utilizzate in questo tutorial:
    export REGION=us-central1
    gcloud config set run/region ${REGION}
    gcloud config set run/platform managed
    gcloud config set eventarc/location ${REGION}
    
  12. Crea un account di servizio per il progetto. Ad esempio:
    gcloud iam service-accounts create sample-service-account \
      --description="A sample service account" \
      --display-name="Sample service account"
    Dopo aver creato un account di servizio, l'utilizzo di questo account può richiedere fino a 7 minuti. Se provi a utilizzare un account di servizio subito dopo averlo creato e ricevi un messaggio di errore, attendi almeno 60 secondi e riprova.
  13. Conferma che sample-service-account è stato creato, esegui:
    gcloud iam service-accounts list
    L'output dovrebbe essere simile al seguente:
    DISPLAY NAME                     EMAIL                                                               DISABLED
    Default compute service account  PROJECT_NUMBER-compute@developer.gserviceaccount.com                False
    Sample service account           sample-service-account@PROJECT_ID.iam.gserviceaccount.com           False
  14. Concedi il ruolo run.invoker all'account di servizio:
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \
      --role="roles/run.invoker"

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID progetto
    • SERVICE_ACCOUNT_EMAIL: l'indirizzo email dell'account di servizio restituito nel passaggio precedente
  15. Concedi il ruolo eventarc.admin all'entità:
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="PRINCIPAL" \
      --role="roles/eventarc.admin"

    Sostituisci i seguenti valori:

    • PROJECT_ID: l'ID progetto Google Cloud
    • PRINCIPAL: un'identità valida a cui vuoi concedere il ruolo.

        Ad esempio:

      • Email dell'Account Google: user:test-user@gmail.com
      • Gruppo Google: group:admins@example.com
      • Account di servizio: serviceAccount:test123@example.domain.com
      • Dominio Google Workspace o Cloud Identity: domain:example.domain.com
  16. Concedi il ruolo iam.serviceAccountUser all'entità:
    gcloud iam service-accounts add-iam-policy-binding \
      SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com \
      --member="PRINCIPAL" \
      --role="roles/iam.serviceAccountUser"

    Sostituisci i seguenti valori:

    • PROJECT_ID: l'ID del progetto Google Cloud
    • SERVICE_ACCOUNT_ID: l'ID dell'account di servizio, ad esempio sample-service-account.
    • PRINCIPAL: un'identità valida a cui vuoi concedere il ruolo.

        Ad esempio:

      • Email dell'Account Google: user:test-user@gmail.com
      • Gruppo Google: group:admins@example.com
      • Account di servizio: serviceAccount:test123@example.domain.com
      • Dominio Google Workspace o Cloud Identity: domain:example.domain.com

Esegui il deployment di un destinatario di eventi in Cloud Run

Eseguire il deployment di un servizio Cloud Run che registra i contenuti di un evento.

  1. Clona il repository:

    Node.js

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git

    In alternativa, puoi scaricare l'esempio come file ZIP ed estrarlo.

    Python

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git

    In alternativa, puoi scaricare l'esempio come file ZIP ed estrarlo.

    Go

    git clone https://github.com/GoogleCloudPlatform/golang-samples.git

    In alternativa, puoi scaricare l'esempio come file ZIP ed estrarlo.

    Java

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git

    In alternativa, puoi scaricare l'esempio come file ZIP ed estrarlo.

    Ruby

    git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git

    In alternativa, puoi scaricare l'esempio come file ZIP ed estrarlo.

    C#

    git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git

    In alternativa, puoi scaricare l'esempio come file ZIP ed estrarlo.

  2. Passa alla directory che contiene il codice campione di Cloud Run:

    Node.js

    cd nodejs-docs-samples/eventarc/pubsub/

    Python

    cd python-docs-samples/eventarc/pubsub/

    Go

    cd golang-samples/eventarc/pubsub/

    Java

    cd java-docs-samples/eventarc/pubsub/

    Ruby

    cd ruby-docs-samples/eventarc/pubsub/

    C#

    cd dotnet-docs-samples/eventarc/pubsub/
  3. Crea il container per il servizio Cloud Run:

    export PROJECT_ID=$(gcloud config get-value project)
    export SERVICE_NAME=trigger-pubsub
    gcloud builds submit --tag gcr.io/${PROJECT_ID}/${SERVICE_NAME}
    
  4. Esegui il deployment dell'immagine container su Cloud Run:

    gcloud run deploy ${SERVICE_NAME} \
      --image gcr.io/${PROJECT_ID}/${SERVICE_NAME} \
      --region=${REGION}
    
  5. Nel messaggio Consenti chiamate non autenticate a trigger-pubsub (y/N)?, rispondi n per "No".

Quando vedi l'URL del servizio Cloud Run, il deployment è completato.

Crea un trigger Eventarc

Quando un messaggio viene pubblicato nell'argomento Pub/Sub, l'evento attiva il servizio Cloud Run. Il servizio richiede l'autenticazione e l'evento deve essere attivato da un chiamante che dispone di un account di servizio con i ruoli e le autorizzazioni IAM richiesti per utilizzare la risorsa.

  1. Crea un trigger per ascoltare i messaggi Pub/Sub:

    Nuovo argomento Pub/Sub

      gcloud eventarc triggers create ${SERVICE_NAME} \
        --destination-run-service=${SERVICE_NAME} \
        --destination-run-region=${REGION} \
        --location=${REGION} \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
        --service-account=SERVICE_ACCOUNT_EMAIL
    

    Sostituisci SERVICE_ACCOUNT_EMAIL con l'indirizzo email dell'account di servizio.
    Viene creato un nuovo argomento Pub/Sub e viene attivato un attivatore chiamato trigger-pubsub.

    Argomento Pub/Sub esistente

      gcloud eventarc triggers create ${SERVICE_NAME} \
        --destination-run-service=${SERVICE_NAME} \
        --destination-run-region=${REGION} \
        --location=${REGION} \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
        --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID \
        --service-account=SERVICE_ACCOUNT_EMAIL
    

    Sostituisci quanto segue:

    • PROJECT_ID: il tuo ID progetto Google Cloud
    • TOPIC_ID: l'ID dell'argomento Pub/Sub esistente
    • SERVICE_ACCOUNT_EMAIL: l'indirizzo email dell'account di servizio

      Viene creato un trigger denominato trigger-pubsub per l'argomento Pub/Sub esistente.

  2. Verifica che l'attivatore sia stato creato correttamente. Tieni presente che, anche se il trigger viene creato immediatamente, possono essere necessari fino a due minuti perché un trigger sia completamente funzionante.

      gcloud eventarc triggers list --location=us-central1
    

    Lo stato dell'attivatore restituito deve essere ACTIVE: Yes.

Generare e visualizzare un evento

Pubblica un messaggio in un argomento Pub/Sub per generare un evento e attivare il servizio Cloud Run. Il servizio Cloud Run registra i messaggi nei log del servizio.

  1. Trova e imposta l'argomento Pub/Sub come variabile di ambiente:

    export TOPIC_ID=$(basename $(gcloud eventarc triggers describe ${SERVICE_NAME} \
      --format='value(transport.pubsub.topic)'))
    
  2. Invia un messaggio all'argomento Pub/Sub per generare un evento:

    gcloud pubsub topics publish $TOPIC_ID --message "Hello there"
    

    L'evento viene inviato al servizio Cloud Run, che registra il messaggio dell'evento.

  3. Visualizzare le voci di log relative agli eventi create dal servizio:

    gcloud logging read 'textPayload: "Hello there!"'

    La voce di log deve essere simile alla seguente:

    textPayload: 'Hello, Hello there!'

La visualizzazione dei log potrebbe richiedere alcuni istanti. Se non li vedi subito, ricontrolla dopo un minuto.

Esegui la pulizia

Se hai creato un nuovo progetto per questo tutorial, elimina il progetto. Se hai utilizzato un progetto esistente e vuoi mantenerlo senza le modifiche aggiunte in questo tutorial, elimina le risorse create per il tutorial.

Elimina il progetto

Il modo più semplice per eliminare la fatturazione è eliminare il progetto che hai creato per il tutorial.

Per eliminare il progetto:

  1. In Google Cloud Console, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

Elimina risorse tutorial

  1. Elimina il servizio Cloud Run di cui hai eseguito il deployment in questo tutorial:

    gcloud run services delete SERVICE_NAME

    Dove SERVICE_NAME è il nome del servizio che hai scelto.

    Puoi anche eliminare i servizi Cloud Run dalla Google Cloud Console.

  2. Rimuovi le configurazioni predefinite dell'interfaccia a riga di comando gcloud aggiunte durante la configurazione del tutorial.

    Ad esempio:

    gcloud config unset run/region

    o

    gcloud config unset project

  3. Elimina le altre risorse Google Cloud create in questo tutorial:

    • Elimina il trigger Eventarc:
      gcloud eventarc triggers delete TRIGGER_NAME
      
      Sostituisci TRIGGER_NAME con il nome del tuo trigger.

Passaggi successivi