Questo tutorial ti insegna a risolvere i problemi relativi agli errori di runtime riscontrati quando utilizzi Eventarc per instradare gli eventi da Cloud Storage a un servizio Cloud Run non autenticato utilizzando Cloud Audit Logs.
Obiettivi
Questo tutorial mostra come completare le seguenti attività:
- Crea un repository standard Artifact Registry per archiviare l'immagine container.
- Crea un bucket Cloud Storage come origine evento.
- Crea, carica ed esegui il deployment di un'immagine container in Cloud Run.
- Crea trigger Eventarc.
- Carica un file nel bucket Cloud Storage.
- Risolvi i problemi e correggi gli errori di runtime.
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.
- 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.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Cloud Logging, Cloud Run, Cloud Storage, Eventarc, and Pub/Sub APIs:
gcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com eventarc.googleapis.com logging.googleapis.com pubsub.googleapis.com run.googleapis.com storage.googleapis.com - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Cloud Logging, Cloud Run, Cloud Storage, Eventarc, and Pub/Sub APIs:
gcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com eventarc.googleapis.com logging.googleapis.com pubsub.googleapis.com run.googleapis.com storage.googleapis.com -
Se sei il creator del progetto, ti viene assegnato il ruolo di proprietario di base (
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 e puoi saltare questo passaggio. Google CloudSe non sei il creator del progetto, le autorizzazioni richieste devono essere concesse al principale appropriato. Ad esempio, un'entità può essere un Account Google (per gli utenti finali) o un account di servizio (per le applicazioni e i carichi di lavoro di calcolo). Per ulteriori informazioni, consulta la pagina Ruoli e autorizzazioni relativa alla destinazione dell'evento.
Tieni presente che per impostazione predefinita, le autorizzazioni di Cloud Build includono le autorizzazioni per caricare e scaricare gli elementi di Artifact Registry.
Autorizzazioni obbligatorie
Per ottenere le autorizzazioni necessarie per completare questo tutorial, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:
-
Editor Cloud Build (
roles/cloudbuild.builds.editor
) -
Amministratore Cloud Run (
roles/run.admin
) -
Eventarc Admin (
roles/eventarc.admin
) -
Logs View Accessor (
roles/logging.viewAccessor
) -
Amministratore IAM del progetto (
roles/resourcemanager.projectIamAdmin
) -
Amministratore account di servizio (
roles/iam.serviceAccountAdmin
) -
Utente account di servizio (
roles/iam.serviceAccountUser
) -
Amministratore utilizzo servizio (
roles/serviceusage.serviceUsageAdmin
) -
Amministratore archiviazione (
roles/storage.admin
)
Per saperne di più sulla concessione dei ruoli, consulta Gestire 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 (
- Per Cloud Storage, abilita la registrazione degli audit log per i tipi di accesso ai dati
ADMIN_READ
,DATA_WRITE
eDATA_READ
.- Leggi il criterio Identity and Access Management (IAM) associato al tuo progetto, alla tua cartella o alla tua organizzazione Google Cloud e memorizzalo in un file temporaneo:
gcloud projects get-iam-policy PROJECT_ID > /tmp/policy.yaml
- In un editor di testo, apri
/tmp/policy.yaml
e aggiungi o modifica solo la configurazione del log di controllo nella sezioneauditConfigs
:auditConfigs: - auditLogConfigs: - logType: ADMIN_READ - logType: DATA_WRITE - logType: DATA_READ service: storage.googleapis.com bindings: - members: [...] etag: BwW_bHKTV5U= version: 1
- Scrivi il nuovo criterio IAM:
gcloud projects set-iam-policy PROJECT_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. Per maggiori informazioni, consulta Configurare gli audit log di accesso ai dati con l'API.
- Leggi il criterio Identity and Access Management (IAM) associato al tuo progetto, alla tua cartella o alla tua organizzazione Google Cloud e memorizzalo in un file temporaneo:
- Concedi il ruolo
eventarc.eventReceiver
all'account di servizio Compute Engine:export PROJECT_NUMBER="$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')" gcloud projects add-iam-policy-binding $(gcloud config get-value project) \ --member=serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com \ --role='roles/eventarc.eventReceiver'
- Se hai attivato l'account di servizio Pub/Sub il giorno 8 aprile 2021 o in una data precedente, concedi il ruolo
iam.serviceAccountTokenCreator
all'account di servizio Pub/Sub:gcloud projects add-iam-policy-binding $(gcloud config get-value project) \ --member="serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com"\ --role='roles/iam.serviceAccountTokenCreator'
- Imposta i valori predefiniti utilizzati in questo tutorial:
export REGION=us-central1 gcloud config set run/region ${REGION} gcloud config set run/platform managed gcloud config set eventarc/location ${REGION}
Creare un repository standard Artifact Registry
Crea un repository standard 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 in ciascuna delle due regioni come origine evento per il servizio Cloud Run:
Crea un bucket in
us-east1
:export BUCKET1="troubleshoot-bucket1-PROJECT_ID" gsutil mb -l us-east1 gs://${BUCKET1}
Crea un bucket in
us-west1
:export BUCKET2="troubleshoot-bucket2-PROJECT_ID" gsutil mb -l us-west1 gs://${BUCKET2}
Dopo aver creato l'origine evento, esegui il deployment del servizio di ricezione di eventi su Cloud Run.
Esegui il deployment del ricevitore di eventi
Esegui il deployment di un servizio Cloud Run che riceve e registra gli eventi.
Recupera l'esempio di codice clonando il repository GitHub:
Vai
git clone https://github.com/GoogleCloudPlatform/golang-samples.git cd golang-samples/eventarc/audit_storage
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git cd java-docs-samples/eventarc/audit-storage
.NET
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git cd dotnet-docs-samples/eventarc/audit-storage
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git cd nodejs-docs-samples/eventarc/audit-storage
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git cd python-docs-samples/eventarc/audit-storage
Esamina il codice di questo tutorial, che è costituito da quanto segue:
Un gestore eventi che riceve l'evento in arrivo come CloudEvent all'interno della richiesta HTTP
POST
:Vai
Java
.NET
Node.js
Python
Un server che utilizza il gestore di eventi:
Vai
Java
.NET
Node.js
Python
Un file Dockerfile che definisce l'ambiente operativo per il servizio. I contenuti del Dockerfile variano in base alla lingua:
Vai
Java
.NET
Node.js
Python
Crea l'immagine container con Cloud Build e caricala su Artifact Registry:
export PROJECT_ID=$(gcloud config get-value project) export SERVICE_NAME=troubleshoot-service gcloud builds submit --tag $REGION-docker.pkg.dev/${PROJECT_ID}/REPOSITORY/${SERVICE_NAME}:v1
Esegui il deployment dell'immagine container in Cloud Run:
gcloud run deploy ${SERVICE_NAME} \ --image $REGION-docker.pkg.dev/${PROJECT_ID}/REPOSITORY/${SERVICE_NAME}:v1 \ --allow-unauthenticated
Se il deployment riesce, la riga di comando visualizza l'URL del servizio.
Crea un trigger
Dopo aver disegnato un servizio Cloud Run, configura un attivatore per ascoltare gli eventi di Cloud Storage tramite gli audit log.
Crea un trigger Eventarc per ascoltare gli eventi Cloud Storage che vengono instradati utilizzando Cloud Audit Logs:
gcloud eventarc triggers create troubleshoot-trigger \ --destination-run-service=troubleshoot-service \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com
Viene creato un trigger denominato
troubleshoot-trigger
.Per confermare che
troubleshoot-trigger
è stato creato, esegui:gcloud eventarc triggers list
L'output dovrebbe essere simile al seguente:
NAME: troubleshoot-trigger TYPE: google.cloud.audit.log.v1.written DESTINATION: Cloud Run service: troubleshoot-service ACTIVE: By 20:03:37 LOCATION: us-central1
Generare e visualizzare un evento
Verifica di aver eseguito correttamente il deployment del servizio e di poter ricevere eventi da Cloud Storage.
Crea e carica un file nel bucket di archiviazione
BUCKET1
:echo "Hello World" > random.txt gsutil cp random.txt gs://${BUCKET1}/random.txt
Monitora i log per verificare se il servizio ha ricevuto un evento. Per visualizzare la voce di log:
Filtra le voci di log e restituisce l'output in formato JSON:
gcloud logging read "resource.labels.service_name=troubleshoot-service \ AND textPayload:random.txt" \ --format=json
Cerca una voce di log simile alla seguente:
"textPayload": "Detected change in Cloud Storage bucket: ..."
Tieni presente che, inizialmente, non viene restituita alcuna voce di log. Ciò indica che esiste un problema di configurazione che devi esaminare.
Esaminare il problema
Procedi con la procedura per scoprire perché il servizio non riceve eventi.
Tempo di inizializzazione
Sebbene l'attivatore venga creato immediatamente, possono essere necessari fino a due minuti per la sua propagazione e per filtrare gli eventi. Esegui il seguente comando per verificare che un trigger sia attivo:
gcloud eventarc triggers list
L'output indica lo stato dell'attivatore. Nell'esempio seguente,
troubleshoot-trigger
sarà attivo entro le 14:16:56:
NAME TYPE DESTINATION_RUN_SERVICE ACTIVE
troubleshoot-trigger google.cloud.audit.log.v1.written troubleshoot-service By 14:16:56
Una volta attivato l'attivatore, carica di nuovo un file nel bucket di archiviazione. Gli eventi vengono scritti nei log del servizio Cloud Run. Se il servizio non riceve eventi, il problema potrebbe essere correlato alle dimensioni degli eventi.
Audit log
In questo tutorial, gli eventi Cloud Storage vengono indirizzati utilizzando Cloud Audit Logs e inviati a Cloud Run. Conferma che gli audit log siano abilitati per Cloud Storage.
Nella console Google Cloud, vai alla pagina Log di controllo.
- Seleziona la casella di controllo Google Cloud Storage.
- Assicurati che i tipi di log Lettura amministratore, Lettura dati e Scrittura dati siano selezionati.
Dopo aver attivato Cloud Audit Logs, carica di nuovo il file nel bucket di archiviazione e controlla i log. Se il servizio continua a non ricevere eventi, il problema potrebbe essere correlato alla posizione dell'attivatore.
Posizione dell'attivatore
Potrebbero essere presenti più risorse in località diverse e devi filtrare per gli eventi provenienti da origini che si trovano nella stessa regione dell'obiettivo Cloud Run. Per ulteriori informazioni, consulta le località supportate da Eventarc e l'articolo Informazioni sulle località Eventarc.
In questo tutorial hai eseguito il deployment del servizio Cloud Run in
us-central1
. Poiché hai impostato eventarc/location
su us-central1
, hai anche creato un attivatore nella stessa posizione.
Tuttavia, hai creato due bucket Cloud Storage nelle località us-east1
e
us-west1
. Per ricevere eventi da queste località, devi creare trigger Eventarc in queste località.
Crea un trigger Eventarc in us-east1
:
Conferma la posizione dell'attivatore esistente:
gcloud eventarc triggers describe troubleshoot-trigger
Imposta la località e la regione su
us-east1
:gcloud config set eventarc/location us-east1 gcloud config set run/region us-east1
Esegui nuovamente il deployment del ricevitore di eventi creando e implementando l'immagine container in Cloud Run.
Crea un nuovo attivatore in
us-east1
:gcloud eventarc triggers create troubleshoot-trigger-new \ --destination-run-service=troubleshoot-service \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com
Verifica che l'attivatore sia stato creato:
gcloud eventarc triggers list
L'inizializzazione di un trigger può richiedere fino a due minuti prima che inizi a instradare gli eventi.
Per verificare che l'attivatore sia stato implementato correttamente, genera e visualizza un evento.
Altri problemi che potresti riscontrare
Potresti riscontrare altri problemi durante l'utilizzo di Eventarc.
Dimensione dell'evento
Gli eventi inviati non devono superare i limiti relativi alle dimensioni degli eventi.
Un attivatore che in precedenza generava eventi ha smesso di funzionare
Verifica che l'origine generi eventi. Controlla i log di controllo di Cloud e assicurati che il servizio monitorato stia emettendo log. Se i log vengono registrati, ma gli eventi non vengono pubblicati, contatta l'assistenza.
Verifica che esista un argomento Pub/Sub con lo stesso nome dell'attivatore. Eventarc utilizza Pub/Sub come livello di trasporto e utilizzerà un argomento Pub/Sub esistente o ne creerà uno automaticamente e lo gestirà per te.
- Per elencare gli trigger, consulta
gcloud eventarc triggers list
. Per elencare gli argomenti Pub/Sub, esegui:
gcloud pubsub topics list
Verifica che il nome dell'argomento Pub/Sub includa il nome dell'attivatore creato. Ad esempio:
name: projects/PROJECT_ID/topics/eventarc-us-east1-troubleshoot-trigger-new-123
Se l'argomento Pub/Sub non è presente, crea di nuovo l'attivatore per un provider, un tipo di evento e una destinazione Cloud Run specifici.
- Per elencare gli trigger, consulta
Verifica che l'attivatore sia stato configurato per il servizio.
Nella console Google Cloud, vai alla pagina Servizi.
Fai clic sul nome del servizio per aprire la pagina Dettagli servizio.
Fai clic sulla scheda Attivatori.
L'attivatore Eventarc associato al servizio deve essere elencato.
Verifica l'integrità dell'argomento e della sottoscrizione Pub/Sub utilizzando i tipi di metriche Pub/Sub.
Puoi monitorare i messaggi inoltrati non recapitati utilizzando la metrica
subscription/dead_letter_message_count
. Questa metrica mostra il numero di messaggi non recapitabili inoltrati da Pub/Sub da una sottoscrizione.Se i messaggi non vengono pubblicati nell'argomento, controlla i log di controllo di Cloud e assicurati che il servizio monitorato stia emettendo log. Se i log vengono registrati, ma gli eventi non vengono inviati, contatta l'assistenza.
Puoi monitorare le iscrizioni push utilizzando la metrica
subscription/push_request_count
e raggruppandola perresponse_code
esubcription_id
.Se vengono segnalati errori di push, controlla i log del servizio Cloud Run. Se l'endpoint di ricezione restituisce un codice di stato diverso da OK, indica che il codice Cloud Run non funziona come previsto e devi contattare l'assistenza.
Per ulteriori informazioni, consulta Creare criteri di avviso basati su soglie di metriche.
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'trigger Eventarc: