Esegui il routing degli eventi tra i progetti Google Cloud


Questo tutorial mostra come utilizzare Eventarc per leggere gli eventi da un'origine in un progetto Google Cloud e instradarli a una destinazione di destinazione in un altro progetto Google Cloud. Ciò è possibile utilizzando Pub/Sub come livello di trasporto tra progetti.

Obiettivi

In questo tutorial, imparerai a:

  1. Creare un argomento in un progetto, quindi pubblicarlo in quell'argomento da un altro progetto. Questo instrada gli eventi a un servizio Cloud Run non autenticato utilizzando un trigger Eventarc.

  2. Utilizza le notifiche Pub/Sub per Cloud Storage per pubblicare eventi Cloud Storage da un progetto all'altro. Instrada gli eventi a un servizio Cloud Run non autenticato utilizzando un trigger Eventarc.

  3. Utilizza i sink di Cloud Logging per pubblicare Cloud Audit Logs da un progetto all'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. I nuovi utenti di Google Cloud possono essere idonei a una prova senza costi aggiuntivi.

Prima di iniziare

I vincoli di sicurezza definiti dalla tua organizzazione potrebbero impedirti di completare i passaggi seguenti. Per informazioni sulla risoluzione dei problemi, consulta la pagina Sviluppare applicazioni in un ambiente Google Cloud limitato.

Tieni presente che per questo tutorial avrai bisogno di due progetti. I passaggi seguenti si applicano a entrambi i progetti.

  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. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Installa Google Cloud CLI.
  5. Per initialize gcloud CLI, esegui questo comando:

    gcloud init
  6. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  7. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  8. Installa Google Cloud CLI.
  9. Per initialize gcloud CLI, esegui questo comando:

    gcloud init
  10. Aggiorna i componenti gcloud:
    gcloud components update
  11. Accedi utilizzando il tuo account:
    gcloud auth login

Instrada gli eventi Pub/Sub tra progetti

Poiché Pub/Sub è un servizio distribuito a livello globale, puoi creare un argomento in un progetto, pubblicare su quell'argomento da un altro progetto e quindi attivare Eventarc che instrada il messaggio a un servizio Cloud Run:

Eventi tra progetti: Cloud Pub/Sub ed Eventarc

  1. Imposta l'ID progetto Google Cloud sul secondo progetto:

    gcloud config set project PROJECT_TWO_ID
    

    Sostituisci PROJECT_TWO_ID con l'ID del tuo secondo progetto Google Cloud.

  2. Nel secondo progetto, segui questi passaggi:

    1. Abilita le API Cloud Run ed Eventarc:

      gcloud services enable run.googleapis.com eventarc.googleapis.com
      
    2. Imposta la località predefinita:

      REGION=REGION
      

      Sostituisci REGION con la località Eventarc supportata di tua scelta. Ad esempio, us-central1.

    3. Crea un argomento Pub/Sub:

      TOPIC=my-topic
      gcloud pubsub topics create $TOPIC
      
    4. Esegui il deployment di un servizio Cloud Run non autenticato:

      gcloud run deploy hello \
          --image=gcr.io/cloudrun/hello \
          --allow-unauthenticated \
          --region=$REGION
      

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

    5. Connetti 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.

  3. Imposta l'ID progetto Google Cloud sul tuo primo progetto:

    gcloud config set project PROJECT_ONE_ID
    

    Sostituisci PROJECT_ONE_ID con l'ID del tuo primo progetto Google Cloud.

  4. Nel tuo primo progetto, pubblica un messaggio nell'argomento nel secondo progetto:

    gcloud pubsub topics publish projects/PROJECT_TWO_ID/topics/$TOPIC --message="hello"
    
  5. Imposta l'ID progetto Google Cloud sul secondo progetto:

    gcloud config set project PROJECT_TWO_ID
    
  6. 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 logging simile alla seguente:

    "message": "Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: hello"
    

Instrada gli eventi Cloud Storage tra progetti

Utilizza le notifiche Pub/Sub per Cloud Storage per pubblicare eventi da un progetto all'altro, quindi instrada gli eventi a un servizio Cloud Run tramite un trigger Eventarc:

Eventi tra progetti: Cloud Storage ed Eventarc

  1. Imposta l'ID progetto Google Cloud sul tuo primo progetto:

    gcloud config set project PROJECT_ONE_ID
    
  2. Crea un bucket Cloud Storage:

    PROJECT1=$(gcloud config get-value project)
    BUCKET=$PROJECT1-cross-project
    gsutil mb -l $REGION gs://$BUCKET
    
  3. Crea una notifica Pub/Sub per il bucket nell'argomento nel secondo progetto:

    gsutil notification create -t projects/PROJECT_TWO_ID/topics/$TOPIC -f json gs://$BUCKET
    
  4. Carica un file nel bucket:

    echo "Hello World" > random.txt
    gsutil cp random.txt gs://$BUCKET/random.txt
    
  5. Imposta l'ID progetto Google Cloud sul secondo progetto:

    gcloud config set project PROJECT_TWO_ID
    
  6. 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 logging 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",
    [...]
    }
    

Instrada gli eventi di Cloud Audit Logs tra progetti

Le richieste al servizio possono essere attivate quando viene creata una voce di audit log che corrisponde ai criteri di filtro dell'attivatore. Per ulteriori informazioni, consulta Determinare i filtri eventi per Cloud Audit Logs. 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:

Eventi tra progetti: Cloud Audit Logs ed Eventarc

  1. Imposta l'ID progetto Google Cloud sul tuo primo progetto:

    gcloud config set project PROJECT_ONE_ID
    
  2. 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 avere il ruolo roles/owner Identity and Access Management (IAM) per configurare gli audit log di accesso ai dati per le tue risorse Google Cloud.

    1. Leggi il criterio IAM del progetto e archivialo in un file:

      gcloud projects get-iam-policy PROJECT_ONE_ID > /tmp/policy.yaml
      
    2. 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
      
    3. 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 dalla lettura del criterio IAM del progetto.

  3. Nel primo progetto, crea un sink di Cloud Logging per instradare Cloud Audit Logs all'argomento nel tuo 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.
    
  4. Imposta l'ID progetto Google Cloud sul secondo progetto:

    gcloud config set project PROJECT_TWO_ID
    
  5. 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 restituito nel passaggio precedente.

  6. Imposta l'ID progetto Google Cloud sul tuo primo progetto:

    gcloud config set project PROJECT_ONE_ID
    
  7. 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.

  8. Imposta l'ID progetto Google Cloud sul secondo progetto:

    gcloud config set project PROJECT_TWO_ID
    
  9. 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 logging 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, elimina il progetto. 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:

  1. Nella console Google Cloud, 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 console Google Cloud.

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

    Ecco alcuni esempi:

    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 attivatore.

    • Elimina l'argomento Pub/Sub:

      gcloud pubsub topics delete TOPIC TOPIC_ID
      
      Sostituisci TOPIC_ID con l'ID del tuo argomento.

    • Elimina il sink di Cloud Logging:

      gcloud logging sinks delete SINK_NAME
      
      Sostituisci SINK_NAME con il nome del tuo sink.

Passaggi successivi