Questo tutorial mostra come utilizzare Eventarc per leggere gli eventi da un Google Cloud originatore in un progetto Google Cloud e inoltrarli a una destinazione di destinazione Google Cloud in un altro progetto. Questo è possibile utilizzando Pub/Sub come livello di trasporto tra progetti.
Obiettivi
In questo tutorial, imparerai a:
Crea un argomento in un progetto e poi pubblica in quell'argomento da un altro progetto. In questo modo, gli eventi vengono instradati a un servizio Cloud Run non autenticato utilizzando un trigger Eventarc.
Utilizza le notifiche Pub/Sub per Cloud Storage per pubblicare gli eventi di Cloud Storage da un progetto all'altro. Instrada gli eventi a un servizio Cloud Run non autenticato utilizzando un trigger Eventarc.
Utilizza i destinazioni Cloud Logging per pubblicare gli audit log di Cloud da un progetto all'altro. Inoltra gli eventi a un servizio Cloud Run non autenticato utilizzando un trigger Eventarc.
Costi
In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il Calcolatore prezzi.
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 Google Cloud ambiente vincolato.
Tieni presente che per questo tutorial sono necessari due progetti. I passaggi seguenti si applicano a entrambi i progetti.
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Aggiorna i componenti gcloud:
gcloud components update
- Accedi utilizzando il tuo account:
gcloud auth login
Inoltra gli eventi Pub/Sub tra i progetti
Poiché Pub/Sub è un servizio distribuito a livello globale, puoi creare un argomento in un progetto, pubblicare in quell'argomento da un altro progetto e attivare Eventarc, che inoltra il messaggio a un servizio Cloud Run:
Imposta l' Google Cloud ID progetto sul secondo progetto:
gcloud config set project PROJECT_TWO_ID
Sostituisci
PROJECT_TWO_ID
con l'ID del secondo progettoGoogle Cloud .Nel secondo progetto:
Abilita le API Cloud Run ed Eventarc:
gcloud services enable run.googleapis.com eventarc.googleapis.com
Imposta la posizione predefinita:
REGION=REGION
Sostituisci
REGION
con la località Eventarc supportata che preferisci. Ad esempio,us-central1
.Crea un argomento Pub/Sub:
TOPIC=my-topic gcloud pubsub topics create $TOPIC
Esegui il deployment di un servizio Cloud Run non autenticato utilizzando un'immagine predefinita,
us-docker.pkg.dev/cloudrun/container/hello
:gcloud run deploy hello \ --image=us-docker.pkg.dev/cloudrun/container/hello \ --allow-unauthenticated \ --region=$REGION
Quando viene visualizzato l'URL del servizio, il deployment è completato.
Collega l'argomento al servizio con un attivatore Eventarc:
gcloud eventarc triggers create cross-project-trigger \ --destination-run-service=hello \ --destination-run-region=${REGION} \ --location=${REGION} \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --transport-topic=projects/PROJECT_TWO_ID/topics/$TOPIC
Viene creato un trigger denominato
cross-project-trigger
.
Imposta l' Google Cloud ID progetto sul tuo primo progetto:
gcloud config set project PROJECT_ONE_ID
Sostituisci
PROJECT_ONE_ID
con l'ID del tuo primo Google Cloud progetto.Nel primo progetto, pubblica un messaggio nell'argomento del secondo progetto:
gcloud pubsub topics publish projects/PROJECT_TWO_ID/topics/$TOPIC --message="hello"
Imposta l' Google Cloud ID progetto sul secondo progetto:
gcloud config set project PROJECT_TWO_ID
Nel secondo progetto, verifica che l'evento generato sia stato registrato:
gcloud logging read "resource.labels.service_name=hello AND jsonPayload.message:hello" --format=json
Viene restituita una voce di log simile alla seguente:
"message": "Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: hello"
Inoltra gli eventi di Cloud Storage tra i progetti
Utilizza le notifiche Pub/Sub per Cloud Storage per pubblicare eventi da un progetto all'altro e poi inoltrarli a un servizio Cloud Run tramite un trigger Eventarc:
Imposta l' Google Cloud ID progetto sul tuo primo progetto:
gcloud config set project PROJECT_ONE_ID
Crea un bucket Cloud Storage:
PROJECT1=$(gcloud config get-value project) BUCKET=$PROJECT1-cross-project gcloud storage buckets create gs://$BUCKET --location=${REGION}
Crea una notifica Pub/Sub per il bucket nell'argomento nel secondo progetto:
gcloud storage buckets notifications create gs://$BUCKET --topic=projects/PROJECT_TWO_ID/topics/$TOPIC --payload-format=json
Carica un file nel bucket:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://$BUCKET/random.txt
Imposta l' Google Cloud ID progetto sul secondo progetto:
gcloud config set project PROJECT_TWO_ID
Nel secondo progetto, verifica che l'evento generato sia stato registrato:
gcloud logging read "resource.labels.service_name=hello AND jsonPayload.message:random.txt" --format=json
Viene restituita una voce di log simile alla seguente:
Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: { "kind": "storage#object", "id": "project1-cross-project/random.txt/1635327604259719", "selfLink": "https://www.googleapis.com/storage/v1/b/project1-cross-project/o/random.txt", "name": "random.txt", "bucket": "project1-cross-project", "generation": "1635327604259719", [...] }
Inoltra gli eventi di Cloud Audit Logs tra i progetti
Le richieste al tuo servizio possono essere attivate quando viene creata una voce del log di controllo corrispondente ai criteri di filtro dell'attivatore. Per ulteriori informazioni, consulta Determinare i filtri eventi per gli audit log di Cloud. In questo caso, quando viene creata un'istanza VM Compute Engine nel primo progetto, una voce del log di controllo che corrisponde ai criteri di filtro dell'attivatore consente di acquisire e instradare un evento a un servizio Cloud Run nel secondo progetto:
Imposta l' Google Cloud ID progetto sul tuo primo progetto:
gcloud config set project PROJECT_ONE_ID
Nel primo progetto, abilita i tipi di log Lettura amministratore, Lettura dati e Scrittura dati per Compute Engine:
Tieni presente che a livello di progetto, per configurare gli audit log dell'accesso ai dati per le tue risorse, è necessario il ruolo
roles/owner
Identity and Access Management (IAM). Google CloudLeggi il criterio IAM del progetto e salvalo in un file:
gcloud projects get-iam-policy PROJECT_ONE_ID > /tmp/policy.yaml
Modifica
/tmp/policy.yaml
, aggiungendo o modificando solo la configurazione degli audit log di accesso ai dati.auditConfigs: - auditLogConfigs: - logType: ADMIN_READ - logType: DATA_READ - logType: DATA_WRITE service: compute.googleapis.com
Scrivi il nuovo criterio IAM:
gcloud projects set-iam-policy PROJECT_ONE_ID /tmp/policy.yaml
Se il comando precedente segnala un conflitto con un'altra modifica, ripeti questi passaggi, iniziando con la lettura del criterio IAM del progetto.
Nel primo progetto, crea un destinatario Cloud Logging per inoltrare i log di controllo di Cloud all'argomento nel secondo progetto:
gcloud logging sinks create cross-project-sink \ pubsub.googleapis.com/projects/PROJECT_TWO_ID/topics/my-topic \ --log-filter='protoPayload.methodName="beta.compute.instances.insert"'
Dovrebbe essere restituito un promemoria simile al seguente:
Please remember to grant `serviceAccount:p1011272509317-375795@gcp-sa-logging.iam.gserviceaccount.com` the Pub/Sub Publisher role on the topic.
Imposta l' Google Cloud ID progetto sul secondo progetto:
gcloud config set project PROJECT_TWO_ID
Nel secondo progetto, concedi il ruolo all'account di servizio:
gcloud pubsub topics add-iam-policy-binding my-topic \ --member=SERVICE_ACCOUNT \ --role=roles/pubsub.publisher
Sostituisci
SERVICE_ACCOUNT
con l'indirizzo email dell'account di servizio visualizzato nel passaggio precedente.Imposta l' Google Cloud ID progetto sul tuo primo progetto:
gcloud config set project PROJECT_ONE_ID
Nel primo progetto, crea un'istanza VM di Compute Engine.
Se utilizzi la console Google Cloud per creare l'istanza VM, puoi accettare i valori predefiniti ai fini di questo tutorial.
Imposta l' Google Cloud ID progetto sul secondo progetto:
gcloud config set project PROJECT_TWO_ID
Nel secondo progetto, verifica che l'evento generato sia stato registrato:
gcloud logging read "resource.labels.service_name=hello AND jsonPayload.message:beta.compute.instances.insert" --format=json
Viene restituita una voce di log simile alla seguente:
Received event of type google.cloud.pubsub.topic.v1.messagePublished. Eventdata: { "logName": "projects/workflows-atamel/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1635330842489-5cf5321f4f454-ecc363cd-3883c08d", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "methodName": "beta.compute.instances.insert", } [...] }
Esegui la pulizia
Se hai creato un nuovo progetto per questo tutorial, eliminalo. Se hai utilizzato un progetto esistente e vuoi conservarlo 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:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Eliminare le risorse dei tutorial
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 scelto.Puoi anche eliminare i servizi Cloud Run dalla console Google Cloud.
Rimuovi le configurazioni predefinite gcloud CLI che hai aggiunto durante la configurazione del tutorial.
Ad esempio:
gcloud config unset run/region
o
gcloud config unset project
Elimina le altre Google Cloud risorse create in questo tutorial:
Elimina l'trigger Eventarc:
Sostituiscigcloud eventarc triggers delete TRIGGER_NAME
TRIGGER_NAME
con il nome dell'attivatore.Elimina l'argomento Pub/Sub:
Sostituiscigcloud pubsub topics delete TOPIC TOPIC_ID
TOPIC_ID
con l'ID dell'argomento.Elimina il sink Cloud Logging:
Sostituiscigcloud logging sinks delete SINK_NAME
SINK_NAME
con il nome della destinazione.