Pubblica e ricevi eventi creando un bus e una registrazione (gcloud CLI)
Questa guida rapida mostra come pubblicare e ricevere messaggi di eventi creando un bus Eventarc Advanced e una registrazione nel tuo progetto Google Cloud.
Un bus funge da router centrale, ricevendo messaggi dalle origini eventi o pubblicati dai provider.
Una registrazione indirizza i messaggi ricevuti dal bus a una o più destinazioni tramite una pipeline di elaborazione.
In questa guida rapida:
Crea un repository standard di Artifact Registry.
Eseguire il deployment di un servizio di ricezione di eventi in Cloud Run.
Crea un bus Eventarc Advanced.
Crea una registrazione Eventarc Advanced.
Pubblica un messaggio di evento nel bus.
Visualizza i dati sugli eventi nei log di Cloud Run.
Puoi completare questa guida rapida utilizzando gcloud CLI. Per completare i passaggi utilizzando la console Google Cloud , consulta Pubblica e ricevi eventi creando un bus e una registrazione (console).
Prima di iniziare
I vincoli di sicurezza definiti dalla tua organizzazione potrebbero impedirti di completare i passaggi seguenti. Per informazioni sulla risoluzione dei problemi, vedi Sviluppare applicazioni in un ambiente Google Cloud vincolato.
- 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 senza costi per l'esecuzione, il test e il deployment dei workload.
-
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
Crea o seleziona un Google Cloud progetto.
Ruoli richiesti per selezionare o creare un progetto
- Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto per il quale ti è stato concesso un ruolo.
-
Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto
(
roles/resourcemanager.projectCreator), che contiene l'autorizzazioneresourcemanager.projects.create. Scopri come concedere i ruoli.
-
Creare un progetto Google Cloud :
gcloud projects create PROJECT_ID
Sostituisci
PROJECT_IDcon un nome per il progetto Google Cloud che stai creando. -
Seleziona il progetto Google Cloud che hai creato:
gcloud config set project PROJECT_ID
Sostituisci
PROJECT_IDcon il nome del progetto Google Cloud .
-
Verifica che la fatturazione sia abilitata per il tuo progetto Google Cloud .
Abilita le API Artifact Registry, Cloud Build, Cloud Run, Compute Engine ed Eventarc:
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo dei servizi (
roles/serviceusage.serviceUsageAdmin), che include l'autorizzazioneserviceusage.services.enable. Scopri come concedere i ruoli.gcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com compute.googleapis.com eventarc.googleapis.com eventarcpublishing.googleapis.com run.googleapis.com -
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
Crea o seleziona un Google Cloud progetto.
Ruoli richiesti per selezionare o creare un progetto
- Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto per il quale ti è stato concesso un ruolo.
-
Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto
(
roles/resourcemanager.projectCreator), che contiene l'autorizzazioneresourcemanager.projects.create. Scopri come concedere i ruoli.
-
Creare un progetto Google Cloud :
gcloud projects create PROJECT_ID
Sostituisci
PROJECT_IDcon un nome per il progetto Google Cloud che stai creando. -
Seleziona il progetto Google Cloud che hai creato:
gcloud config set project PROJECT_ID
Sostituisci
PROJECT_IDcon il nome del progetto Google Cloud .
-
Verifica che la fatturazione sia abilitata per il tuo progetto Google Cloud .
Abilita le API Artifact Registry, Cloud Build, Cloud Run, Compute Engine ed Eventarc:
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo dei servizi (
roles/serviceusage.serviceUsageAdmin), che include l'autorizzazioneserviceusage.services.enable. Scopri come concedere i ruoli.gcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com compute.googleapis.com eventarc.googleapis.com eventarcpublishing.googleapis.com run.googleapis.com - Aggiorna i componenti di
gcloud:gcloud components update
- Accedi utilizzando il tuo account:
gcloud auth login
- Imposta la variabile di configurazione utilizzata in questa guida rapida:
REGION=REGION
Sostituisci
REGIONcon una località supportata per l'autobus. -
Se hai creato il progetto, ti viene assegnato il ruolo di base Proprietario (
roles/owner). Per impostazione predefinita, questo ruolo Identity and Access Management (IAM) include le autorizzazioni necessarie per l'accesso completo alla maggior parte delle risorse Google Cloud e puoi saltare questo passaggio.Se non sei il creatore del progetto, le autorizzazioni richieste devono essere concesse al principal appropriato. Ad esempio, un'entità può essere un Account Google (per gli utenti finali) o un account di servizio (per applicazioni e carichi di lavoro di calcolo).
Tieni presente che, per impostazione predefinita, le autorizzazioni di Cloud Build includono le autorizzazioni per caricare e scaricare gli artefatti di Artifact Registry.
Autorizzazioni obbligatorie
Per ottenere le autorizzazioni necessarie per completare questa guida rapida, chiedi all'amministratore di concederti i seguenti ruoli IAM nel tuo progetto:
- Editor Cloud Build (
roles/cloudbuild.builds.editor) - Cloud Run Admin (
roles/run.admin) - Eventarc Developer (
roles/eventarc.developer) - Eventarc Message Bus Admin (
roles/eventarc.messageBusAdmin) - Logs View Accessor (
roles/logging.viewAccessor) - Project IAM Admin (
roles/resourcemanager.projectIamAdmin) - Amministratore service account (
roles/iam.serviceAccountAdmin) - Service Account User (
roles/iam.serviceAccountUser) - Amministratore Service Usage (
roles/serviceusage.serviceUsageAdmin)
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
- Editor Cloud Build (
- A scopo di test, crea un account di servizio e concedigli i ruoli
necessari per completare questa guida rapida.
- Crea un service account:
Sostituiscigcloud iam service-accounts create SERVICE_ACCOUNT_NAME
SERVICE_ACCOUNT_NAMEcon un nome per il tuo account di servizio. - Concedi i ruoli necessari per creare ed eseguire il deployment di un'immagine container e per
rappresentare l'identità di una pipeline Eventarc Advanced:
- Artifact Registry Writer: per caricare gli artefatti di Artifact Registry
- Writer log: per scrivere log in Cloud Logging
- Amministratore Storage: per accedere agli oggetti Cloud Storage
- Invoker di Cloud Run: per chiamare Cloud Run
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \ --role=roles/artifactregistry.writer gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \ --role=roles/logging.logWriter gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \ --role=roles/storage.admin gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \ --role=roles/run.invoker
Tieni presente che puoi configurare chi può accedere al tuo servizio Cloud Run in uno dei seguenti modi:
- Concedi l'autorizzazione per selezionare service account o gruppi per consentire l'accesso al servizio. Tutte le richieste devono avere un'intestazione di autorizzazione HTTP contenente un token OpenID Connect firmato da Google per uno degli account di servizio autorizzati. Questo è il modo in cui viene configurato l'accesso in questa guida rapida.
- Concedi l'autorizzazione a
allUsersper consentire l'accesso non autenticato.
Per saperne di più, consulta Controllo dell'accesso per Cloud Run.
- Crea un service account:
Crea un repository Artifact Registry standard
Crea un repository standard di Artifact Registry per archiviare l'immagine container.
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=$REGION
Sostituisci REPOSITORY con un nome univoco per il
repository Artifact Registry, ad esempio my-repo.
Esegui il deployment di un servizio di ricezione di eventi in Cloud Run
Esegui il deployment di un servizio Cloud Run che registra i contenuti di un evento. Sono supportate altre destinazioni di eventi, ad esempio un argomento Pub/Sub, Workflows o un endpoint HTTP. Per saperne di più, consulta Fornitori e destinazioni di eventi.
Clona il repository GitHub:
git clone https://github.com/GoogleCloudPlatform/eventarc-samples.git
Passa alla directory che contiene il codice campione di Cloud Run:
cd eventarc-samples/eventarc-advanced-quickstart/
Crea un'immagine container Docker ed eseguine il push nel repository:
gcloud builds submit \ --tag $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/log-events:v1 \ --service-account=projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --default-buckets-behavior=regional-user-owned-bucket
Esegui il deployment dell'immagine container in Cloud Run:
gcloud run deploy SERVICE_NAME \ --image $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/log-events:v1 \ --platform managed \ --ingress all \ --no-allow-unauthenticated \ --region=$REGION
Sostituisci
SERVICE_NAMEcon il nome del tuo servizio, ad esempiomy-service.L'impostazione di ingresso di
allconsente tutte le richieste, incluse quelle direttamente da internet all'URLrun.app. Per maggiori informazioni, consulta la pagina Limitare l'accesso alla rete per Cloud Run.Il flag
--no-allow-unauthenticatedconfigura il servizio in modo che consenta solo chiamate autenticate.
Quando vedi l'URL del servizio Cloud Run, il deployment è completo. Prendi nota di questo URL per poterlo utilizzare in un passaggio successivo.
Crea un bus Eventarc Advanced
Un bus riceve messaggi di eventi da un'origine di messaggi o pubblicati da un provider e funge da router di messaggi.
Per saperne di più, consulta Creare un bus per instradare i messaggi.
Crea un bus Eventarc Advanced nel tuo progetto utilizzando il
comando gcloud eventarc message-buses create:
gcloud eventarc message-buses create BUS_NAME \ --location=$REGION
Sostituisci BUS_NAME con l'ID o l'identificatore completo
del bus, ad esempio my-bus.
Crea una registrazione Eventarc Advanced
Una registrazione determina quali messaggi vengono instradati a una destinazione e specifica anche la pipeline utilizzata per configurare una destinazione per i messaggi di evento.
Per saperne di più, vedi Creare una registrazione per ricevere eventi.
Quando utilizzi gcloud CLI, prima crei una pipeline e poi crei una registrazione:
Crea una pipeline utilizzando il comando
gcloud eventarc pipelines create:gcloud eventarc pipelines create PIPELINE_NAME \ --destinations=http_endpoint_uri='CLOUD_RUN_SERVICE_URL',google_oidc_authentication_service_account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --location=$REGION
Sostituisci quanto segue:
PIPELINE_NAME: l'ID della pipeline o un nome completo.CLOUD_RUN_SERVICE_URL: l'URL completo del tuo servizio Cloud Run, ad esempiohttps://SERVICE_NAME-abcdef-uc.a.run.app. Questa è la destinazione dei messaggi dell'evento.
Tieni presente che la chiave
google_oidc_authentication_service_accountspecifica un'email di account di servizio che viene utilizzata per generare un token OIDC.Crea una registrazione utilizzando il comando
gcloud eventarc enrollments create:gcloud eventarc enrollments create ENROLLMENT_NAME \ --cel-match=MATCH_EXPRESSION \ --destination-pipeline=PIPELINE_NAME \ --message-bus=BUS_NAME \ --message-bus-project=PROJECT_ID \ --location=$REGION
Sostituisci quanto segue:
ENROLLMENT_NAME: l'ID della registrazione o un nome completo.MATCH_EXPRESSION: l'espressione di corrispondenza per questa registrazione utilizzando CEL, ad esempio:"message.type == 'hello-world-type'"
Pubblica un messaggio di evento nel bus
Per pubblicare direttamente un messaggio nel bus, puoi utilizzare il comando
gcloud eventarc message-buses publish
o inviare una richiesta all'API REST di pubblicazione di Eventarc.
Per ulteriori informazioni, vedi
Pubblicare eventi direttamente.
Il messaggio deve essere in formato CloudEvents, una specifica per
descrivere i dati sugli eventi in modo comune. L'elemento data è il payload del tuo
evento. In questo campo può essere inserito qualsiasi JSON ben formato. Per saperne di più sugli attributi di contesto di CloudEvents, consulta Formato evento.
Di seguito sono riportati esempi di pubblicazione diretta di un evento in un bus Eventarc Advanced:
Esempio 1
Puoi pubblicare un evento in un bus utilizzando gcloud CLI e un
--event-data e altri flag di attributo evento:
gcloud eventarc message-buses publish BUS_NAME \
--event-data='{"key": "hello-world-data"}' \
--event-id=hello-world-id-1234 \
--event-source=hello-world-source \
--event-type=hello-world-type \
--event-attributes="datacontenttype=application/json" \
--location=$REGION
Esempio 2
Puoi pubblicare un evento in un bus come messaggio JSON utilizzando gcloud CLI
e un flag --json-message:
gcloud eventarc message-buses publish BUS_NAME \
--location=$REGION \
--json-message='{"id": "hello-world-id-1234", "type":
"hello-world-type", "source":
"hello-world-source", "specversion": "1.0", "data":
{"key": "hello-world-data"}}'
Dopo aver pubblicato un evento, dovresti ricevere un messaggio "Evento pubblicato correttamente".
Visualizzare i dati sugli eventi nei log di Cloud Run
Dopo aver pubblicato un evento nel bus Eventarc Advanced, puoi controllare i log del servizio Cloud Run per verificare che l'evento sia stato ricevuto come previsto.
Filtra le voci di log e restituisci l'output utilizzando il comando
gcloud logging read:gcloud logging read 'textPayload: "hello-world-data"'
Cerca una voce di log simile alla seguente:
insertId: 670808e70002b5c6477709ae labels: instanceId: 007989f2a10a4a33c21024f2c8e06a9de65d9b4fdc2ee27697a50379b3fab2f975b9233dc357d50b06270829b9b479d5a1ee54a10fa2cb2d98c5f77a0895e2be0f9e6e4b20 logName: projects/PROJECT_ID/logs/run.googleapis.com%2Fstderr receiveTimestamp: '2024-10-10T17:03:35.424659450Z' resource: labels: ... type: cloud_run_revision textPayload: "[2024-10-21 15:33:19,581] INFO in server: Body: b'{\"value\":\"hello-world-data\"\ }'" timestamp: '2024-10-10T17:03:35.177606Z'
Hai creato correttamente un bus e una registrazione Eventarc Advanced, hai pubblicato un messaggio di evento nel bus e hai verificato il risultato previsto nei log del servizio di ricezione eventi.
Esegui la pulizia
Al termine delle attività descritte in questa guida rapida, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato:
Elimina le risorse Eventarc Advanced:
In alternativa, puoi eliminare il tuo progetto Google Cloud per evitare addebiti. L'eliminazione del tuo progetto Google Cloud interrompe la fatturazione per tutte le risorse utilizzate al suo interno.
Elimina un progetto Google Cloud :
gcloud projects delete PROJECT_ID