Utilizzare Eventarc per ricevere eventi da Cloud Storage

Questo tutorial mostra come eseguire il deployment di un'applicazione containerizzata utilizzando un servizio Cloud Run autenticato che riceve eventi tramite Eventarc.

Specificando i filtri per un trigger Eventarc, puoi configurare il routing degli eventi, inclusi l'origine e la destinazione dell'evento. In questo caso, un aggiornamento a un bucket Cloud Storage attiva l'evento e una richiesta viene inviata al tuo servizio Cloud Run sotto forma di richiesta HTTP.

Crea un repository standard Artifact Registry

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.

Crea un bucket Cloud Storage

Crea un bucket Cloud Storage da utilizzare come origine evento:

gcloud storage buckets create gs://PROJECT_ID-bucket/ --location=us-central1

Dopo aver creato l'origine evento, puoi eseguire il deployment del servizio di ricezione di eventi su Cloud Run.

Esegui il deployment di un ricevitore di eventi in Cloud Run

Esegui il deployment di un servizio Cloud Run che riceve e registra gli eventi.

  1. Clona il repository GitHub:

    Node.js

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

    In alternativa, puoi scaricare il campione come file ZIP ed estrarlo.

    Python

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

    In alternativa, puoi scaricare il campione come file ZIP ed estrarlo.

    Vai

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

    In alternativa, puoi scaricare il campione come file ZIP ed estrarlo.

    Java

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

    In alternativa, puoi scaricare il campione come file ZIP ed estrarlo.

    C#

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

    In alternativa, puoi scaricare il campione come file ZIP ed estrarlo.

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

    Node.js

    cd nodejs-docs-samples/eventarc/audit-storage/

    Python

    cd python-docs-samples/eventarc/audit-storage/

    Vai

    cd golang-samples/eventarc/audit_storage/

    Java

    cd java-docs-samples/eventarc/audit-storage/

    C#

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

    export PROJECT_ID=$(gcloud config get-value project)
    export SERVICE_NAME=helloworld-events
    gcloud builds submit --tag $REGION-docker.pkg.dev/${PROJECT_ID}/REPOSITORY/${SERVICE_NAME}:v1
  4. Esegui il deployment dell'immagine container su Cloud Run:

    gcloud run deploy ${SERVICE_NAME} \
        --image $REGION-docker.pkg.dev/${PROJECT_ID}/REPOSITORY/${SERVICE_NAME}:v1
  5. Al prompt Allow public access to helloworld-events (y/N)?, rispondi n per "No".

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

Crea un trigger Eventarc

Il trigger Eventarc invia eventi dal bucket Cloud Storage al servizio Cloud Run helloworld-events. 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 che filtra gli eventi Cloud Storage:

    gcloud eventarc triggers create ${SERVICE_NAME} \
        --destination-run-service=${SERVICE_NAME} \
        --destination-run-region=${REGION} \
        --location=${REGION} \
        --event-filters="type=google.cloud.storage.object.v1.finalized" \
        --event-filters="bucket=PROJECT_ID-bucket" \
        --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Viene creato un trigger denominato helloworld-events.

    Tieni presente che quando crei un trigger Eventarc per la prima volta in un progetto Google Cloud , potrebbe verificarsi un ritardo nel provisioning dell'agente di servizio Eventarc. Questo problema può essere risolto di solito provando a creare di nuovo il trigger. Per saperne di più, vedi Errori di autorizzazione negata.

  2. Verifica che il trigger sia stato creato correttamente. Tieni presente che, anche se il trigger viene creato immediatamente, potrebbero essere necessari fino a due minuti prima che sia completamente funzionale.

    gcloud eventarc triggers list --location=${REGION}

    L'output dovrebbe essere simile al seguente:

    NAME: helloworld-events
    TYPE: google.cloud.storage.object.v1.finalized
    DESTINATION: Cloud Run service: helloworld-events
    ACTIVE: Yes
    

Generare e visualizzare un evento

Carica un file di testo nel bucket Cloud Storage per generare un evento che viene indirizzato al servizio Cloud Run. Il servizio Cloud Run registra l'evento nei log del servizio.

  1. Per generare un evento:

    Carica un file di testo su Cloud Storage:

     echo "Hello World" > random.txt
     gcloud storage cp random.txt gs://PROJECT_ID-bucket/random.txt
    

    Il caricamento genera un evento e il servizio Cloud Run registra il messaggio dell'evento.

  2. Per visualizzare la voce di log:

    1. Filtra le voci di log e restituisci l'output in formato JSON:

      gcloud logging read "resource.labels.service_name=helloworld-events AND textPayload:random.txt" --format=json
      
    2. Cerca una voce di log simile alla seguente:

      "textPayload": "Detected change in Cloud Storage bucket: objects/random.txt"
      

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