Questo tutorial mostra come utilizzare Eventarc per leggere gli eventi da un' origine in un Google Cloud progetto e instradarli a una destinazione di destinazione in un altro Google Cloud progetto. È possibile farlo utilizzando Pub/Sub come livello di trasporto tra progetti.
Obiettivi
In questo tutorial, imparerai a:
Crea un argomento in un progetto, quindi 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 eventi di Cloud Storage da un progetto a un altro. Instrada gli eventi a un servizio Cloud Run non autenticato utilizzando un trigger Eventarc.
Utilizza i sink di Cloud Logging per pubblicare Cloud Audit Logs da un progetto a un altro. Instrada gli eventi a un servizio Cloud Run non autenticato utilizzando un trigger Eventarc.
Costi
In questo documento vengono utilizzati 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 ambiente vincolato Google Cloud .
Tieni presente che per questo tutorial avrai bisogno di due progetti. I passaggi seguenti si applicano a entrambi i progetti.
- Accedi al tuo Google Cloud account. 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 - Aggiorna i componenti di gcloud:
gcloud components update
- Accedi utilizzando il tuo account:
gcloud auth login
Instradare 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 poi attivare Eventarc, che instrada il messaggio a un servizio Cloud Run:
Imposta l'ID progetto sul secondo progetto: Google Cloud
gcloud config set project PROJECT_TWO_ID
Sostituisci
PROJECT_TWO_IDcon l'ID del secondo Google Cloud progetto.Nel secondo progetto, procedi nel seguente modo:
Abilita le API Cloud Run ed Eventarc:
gcloud services enable run.googleapis.com eventarc.googleapis.com
Imposta la località predefinita:
REGION=REGION
Sostituisci
REGIONcon 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 vedi l'URL del servizio, significa che il deployment è stato completato.
Collega l'argomento al servizio con un trigger 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 primo progetto:
gcloud config set project PROJECT_ONE_ID
Sostituisci
PROJECT_ONE_IDcon l'ID del 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'ID progetto sul secondo progetto: Google Cloud
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"
Instradare gli eventi di Cloud Storage tra i progetti
Utilizza le notifiche Pub/Sub per Cloud Storage per pubblicare eventi da un progetto a un altro, quindi instrada gli eventi a un servizio Cloud Run tramite un trigger Eventarc:
Imposta l' Google Cloud ID progetto sul 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 del 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'ID progetto sul secondo progetto: Google Cloud
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", [...] }
Instradare gli eventi degli audit log di Cloud tra i progetti
Le richieste al tuo servizio possono essere attivate quando viene creata una voce di audit log che corrisponde ai criteri di filtro del trigger. (Per ulteriori informazioni, vedi Determinare i filtri eventi per gli audit log di Cloud.) In questo caso, quando viene creata un'istanza VM di Compute Engine nel primo progetto, una voce di audit log che corrisponde ai criteri di filtro del trigger ti consente di acquisire e instradare un evento a un servizio Cloud Run nel secondo progetto:
Imposta l' Google Cloud ID progetto sul 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 devi disporre del
roles/ownerruolo Identity and Access Management (IAM) per configurare gli audit log di accesso ai dati per le tue Google Cloud risorse.Leggi il criterio IAM del progetto e archivialo 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.comScrivi 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, a partire dalla lettura del criterio IAM del progetto.
Nel primo progetto, crea un sink di Cloud Logging per instradare Cloud Audit Logs all'argomento del 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'ID progetto sul secondo progetto: Google Cloud
gcloud config set project PROJECT_TWO_ID
Nel secondo progetto, concedi il ruolo al account di servizio:
gcloud pubsub topics add-iam-policy-binding my-topic \ --member=SERVICE_ACCOUNT \ --role=roles/pubsub.publisher
Sostituisci
SERVICE_ACCOUNTcon l'indirizzo email del account di servizio restituito nel passaggio precedente.Imposta l' Google Cloud ID progetto sul primo progetto:
gcloud config set project PROJECT_ONE_ID
Nel primo progetto, crea un'istanza VM di Compute Engine.
Se utilizzi la Google Cloud console per creare l'istanza VM, puoi accettare i valori predefiniti per questo tutorial.
Imposta l'ID progetto sul secondo progetto: Google Cloud
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", } [...] }
Libera spazio
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 creato per il tutorial.
Per eliminare il progetto:
- Nella Google Cloud console, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID progetto e fai clic su Chiudi per eliminare il progetto.
Elimina le risorse del 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 eliminare i servizi Cloud Run anche dalla Google Cloud console.
Rimuovi le configurazioni predefinite di gcloud CLI che hai aggiunto durante la configurazione del tutorial.
Ad esempio:
gcloud config unset run/regiono
gcloud config unset projectElimina le altre Google Cloud risorse create in questo tutorial:
Elimina il trigger Eventarc:
Sostituiscigcloud eventarc triggers delete TRIGGER_NAME
TRIGGER_NAMEcon il nome del trigger.Elimina l'argomento Pub/Sub:
Sostituiscigcloud pubsub topics delete TOPIC TOPIC_ID
TOPIC_IDcon l'ID dell'argomento.Elimina il sink di Cloud Logging:
Sostituiscigcloud logging sinks delete SINK_NAME
SINK_NAMEcon il nome del sink.