Questo tutorial ti insegna come risolvere gli errori di runtime riscontrati durante il deployment degli eventi da Cloud Storage utilizzando Cloud Audit Logs in un servizio Cloud Run non autenticato.
Obiettivi
- Creare un bucket Cloud Storage da utilizzare come origine dell'evento.
- Crea, carica ed esegui il deployment di un'immagine container in Cloud Run.
- Crea trigger Eventarc.
- Caricare un file nel bucket Cloud Storage.
- Correggere e correggere gli errori di runtime.
Costi
In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi basata sull'utilizzo previsto,
utilizza il Calcolatore prezzi.
Una volta completate le attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la pagina Pulizia.
Prima di iniziare
Segui i prerequisiti riportati in Ricevere un evento Cloud Audit Logs.
Crea un bucket Cloud Storage
Crea due bucket di archiviazione in due regioni come origine evento per il servizio Cloud Run:
us-east1
export BUCKET1="troubleshoot-bucket1-PROJECT_ID" gsutil mb -l us-east1 gs://${BUCKET1}
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.
Recupera l'esempio di codice
Clona il repository:
Go
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
Rivedi il codice
Il codice di questo tutorial è costituito da:
Un gestore di eventi che riceve l'evento in entrata come CloudEvent all'interno della richiesta HTTP
POST
:Go
Java
.NET
Node.js
Python
Un server che utilizza il gestore riportato sopra:
Go
Java
.NET
Node.js
Python
Un Dockerfile che definisce l'ambiente operativo del servizio. I contenuti del Dockerfile variano in base alla lingua:
Go
Java
.NET
Node.js
Python
Spedisci il codice
Per spedire il codice:
Crea la tua immagine container con Cloud Build e caricala in Container Registry:
Go
gcloud builds submit --tag gcr.io/PROJECT_ID/audit-storage
Sostituisci PROJECT_ID con l'ID del tuo progetto Google Cloud.
In caso di esito positivo, viene visualizzato un messaggio di SUCCESSO con l'ID, l'ora di creazione e il nome dell'immagine. L'immagine è archiviata in Container Registry e può essere riutilizzata, se vuoi.
Java
- Utilizza l'helper delle credenziali gcloud per autorizzare Docker a eseguire il push del container in Container Registry.
gcloud auth configure-docker
Utilizza il plug-in Jib Maven per creare il container ed eseguirne il push in Container Registry.
mvn compile jib:build -Dimage=gcr.io/PROJECT_ID/audit-storage
Sostituisci PROJECT_ID con l'ID del tuo progetto Google Cloud.
audit-storage
è il nome del contenitore. In caso di esito positivo, viene visualizzato un messaggio di SUCCESSO. L'immagine è archiviata in Container Registry e, se vuoi, può essere riutilizzata.
.NET
gcloud builds submit --tag gcr.io/PROJECT_ID/audit-storage
Sostituisci PROJECT_ID con l'ID del tuo progetto Google Cloud.
In caso di esito positivo, viene visualizzato un messaggio di SUCCESSO con l'ID, l'ora di creazione e il nome dell'immagine. L'immagine è archiviata in Container Registry e può essere riutilizzata, se vuoi.
Node.js
gcloud builds submit --tag gcr.io/PROJECT_ID/audit-storage
Sostituisci PROJECT_ID con l'ID del tuo progetto Google Cloud.
In caso di esito positivo, viene visualizzato un messaggio di SUCCESSO con l'ID, l'ora di creazione e il nome dell'immagine. L'immagine è archiviata in Container Registry e può essere riutilizzata, se vuoi.
Python
gcloud builds submit --tag gcr.io/PROJECT_ID/audit-storage
Sostituisci PROJECT_ID con l'ID del tuo progetto Google Cloud.
In caso di esito positivo, viene visualizzato un messaggio di SUCCESSO con l'ID, l'ora di creazione e il nome dell'immagine. L'immagine è archiviata in Container Registry e può essere riutilizzata, se vuoi.
- Utilizza l'helper delle credenziali gcloud per autorizzare Docker a eseguire il push del container in Container Registry.
Esegui il deployment dell'immagine container in Cloud Run:
gcloud run deploy troubleshoot-service --image gcr.io/PROJECT_ID/audit-storage \ --allow-unauthenticated
Sostituisci PROJECT_ID con l'ID progetto.
audit-storage
è il nome del container etroubleshoot-service
è il nome del servizio Cloud Run.Tieni presente che è stato eseguito il deployment dell'immagine container nel servizio e nella regione che hai configurato in precedenza durante la configurazione di gcloud.
Quando esegui il deployment in Cloud Run, rispondi
y
, "Yes", alla richiesta di consentire gli utenti non autenticati. Per ulteriori dettagli sull'autenticazione basata su IAM, consulta Ruoli e autorizzazioni Eventarc.Una volta eseguito il deployment, la riga di comando mostra l'URL del servizio.
Crea un trigger
Ora che hai eseguito il deployment di un servizio Cloud Run, configura un trigger per ascoltare gli eventi da Cloud Storage tramite audit log.
Crea un trigger di audit log per rimanere in ascolto degli eventi di Cloud Storage:
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 la creazione di
troubleshoot-trigger
, esegui questo comando:gcloud eventarc triggers list
Il valore
troubleshoot-trigger
viene visualizzato nell'elenco con un targettroubleshoot-service
.
Generare e visualizzare un evento
Per verificare di aver eseguito correttamente il deployment del servizio e di poter ricevere eventi da Cloud Storage:
Crea e carica un file nel primo bucket di archiviazione:
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. I log del servizio mostrano che il servizio è in ascolto di eventi, indicando un problema di configurazione:
Now listening on: http://0.0.0.0:8080
Esaminare il problema
Ora puoi esaminare il motivo per cui il servizio non riceve eventi.
Audit log
In questo tutorial, gli eventi di Cloud Storage vengono emessi tramite audit log e inviati a Cloud Run. Verificare se gli audit log sono abilitati per Cloud Storage.
Nella console Google Cloud, vai alla pagina Audit log e seleziona la casella di controllo Google Cloud Storage.
- Assicurati che i tipi di log Lettura amministratore, Lettura dati e Scrittura dati di Cloud Audit Logs siano selezionati.
Dopo aver abilitato Cloud Audit Logs, carica di nuovo il file e controlla i log. Il servizio continua a non ricevere eventi e questo potrebbe essere correlato alla località dell'attivatore.
Località attivatore
Potrebbero esserci più risorse in località diverse ed è necessario filtrare gli eventi da origini che si trovano nella stessa regione del target di Cloud Run. Per saperne di più, consulta le località supportate da Eventarc.
In questo tutorial hai eseguito il deployment del servizio Cloud Run in us-central1
.
Hai anche creato un trigger nella stessa località perché il criterio eventarc/location
era impostato su us-central1
.
Per elencare la posizione dell'attivatore, descrivilo:
gcloud eventarc triggers describe troubleshoot-trigger
Tuttavia, hai creato due bucket nelle località us-east1
e us-west1
. Per ricevere
eventi da queste località, devi creare attivatori in quelle località.
Creiamo un attivatore in us-east1
.
Elimina l'attivatore esistente nella posizione
us-central1
:gcloud eventarc triggers delete 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
Crea un nuovo attivatore nella località
us-east1
: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
Verifica che l'attivatore sia stato creato:
gcloud eventarc triggers list
L'inizializzazione di un trigger può richiedere fino a due minuti prima di iniziare a pubblicare eventi.
Tempo di inizializzazione
Una volta creati i trigger, sono necessari fino a due minuti di tempo di inizializzazione prima che gli eventi inizino a scorrere. Esegui questo comando per confermare che i trigger sono attivi:
gcloud eventarc triggers list
Viene visualizzato un output simile che indica lo stato dell'attivatore:
NAME TYPE DESTINATION_RUN_SERVICE DESTINATION_RUN_PATH ACTIVE
troubleshoot-trigger3 google.cloud.audit.log.v1.written troubleshoot-service2 By 14:16:56
troubleshoot-trigger google.cloud.audit.log.v1.written troubleshoot-service Yes
Dopo 10 minuti, carica di nuovo un file in ciascun bucket. Gli eventi per ogni file vengono scritti nei log del servizio Cloud Run. Se il servizio non riceve eventi, il problema potrebbe essere legato alle dimensioni degli eventi.
Dimensione dell'evento
Gli eventi inviati non devono superare i limiti di dimensione degli eventi (512 kB).
Un trigger che gli eventi pubblicati in precedenza hanno smesso di funzionare
Verifica che l'origine stia generando eventi. Controlla gli audit log di Cloud e assicurati che il servizio monitorato stia emettendo log. Se i log vengono registrati, ma gli eventi non vengono recapitati, contatta l'assistenza.
Verifica che esista un argomento Pub/Sub con lo stesso nome del trigger.
- Per elencare i trigger, vedi gcloud eventarc trigger list.
Per elencare gli argomenti Pub/Sub, esegui:
gcloud pubsub topics list
Verifica che il nome dell'argomento Pub/Sub includa il nome del trigger creato. Se l'argomento Pub/Sub non è presente, crea un argomento quando crei il trigger per un provider, un tipo di evento e una destinazione Cloud Run specifici.
Verifica l'integrità dell'argomento Pub/Sub:
Assicurati che sia presente un segno di spunta check_circle nella scheda Trigger: nella console Cloud, vai a Cloud Run, seleziona il servizio che hai creato e vai alla scheda Trigger.
Nella console Google Cloud, vai alla pagina Argomenti e fai clic sull'argomento Pub/Sub.
Monitora se i messaggi vengono pubblicati nell'argomento con la metrica:
topic/send_message_operation_count
. Se i messaggi non vengono pubblicati nell'argomento, controlla gli audit log di Cloud e assicurati che il servizio monitorato stia emettendo log. Se i log vengono registrati, ma gli eventi non vengono recapitati, contatta l'assistenza.Monitora se il push dei messaggi a Cloud Run viene eseguito correttamente con la metrica
subscription/push_request_count
daresponse_code
.Nella console Google Cloud, vai alla pagina Panoramica di Cloud Monitoring.
Aggiungi il progetto a una nuova area di lavoro.
Fai clic su Dashboard e seleziona la dashboard Cloud Pub/Sub.
Nella dashboard Cloud Pub/Sub, fai clic sull'argomento Pub/Sub che hai creato.
Nella sezione Incidenti, fai clic su Crea criterio.
Nella pagina Crea criterio di avviso, fai clic su Aggiungi condizione.
Nella scheda Metrica, specifica le seguenti condizioni:
- Sottoscrizione Cloud Pub/Sub come Tipo di risorsa.
- Richieste push come Metrica.
- response_code come Raggruppa per.
- 0 come Soglia di configurazione. Per ulteriori informazioni sulle metriche di utilizzo per Pub/Sub, consulta il monitoraggio delle sottoscrizioni push.
Fai clic su Aggiungi per andare alla pagina Crea criterio di avviso.
Nella sezione Quali sono i passaggi per risolvere il problema?, fornisci un nome per l'avviso, ad esempio
samplealert
, e fai clic su Salva.Per visualizzare l'avviso, vai a Monitoring > Dashboard > Cloud Pub/Sub. Fai clic sull'argomento Pub/Sub e poi sulla scheda Subscription (Sottoscrizione).
Se vengono segnalati errori di push, controlla i log del servizio Cloud Run. Se l'endpoint ricevente restituisce un codice di stato non OK, significa che il codice Cloud Run non funziona come previsto e che devi contattare l'assistenza.
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:
- 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.
Elimina risorse 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 che hai scelto.Puoi anche eliminare i servizi Cloud Run dalla console Google Cloud.
Rimuovi tutte le configurazioni predefinite dell'interfaccia a riga di comando gcloud aggiunte durante la configurazione del tutorial.
Ad esempio:
gcloud config unset run/region
o
gcloud config unset project
Elimina le altre risorse Google Cloud create in questo tutorial:
- Elimina il trigger Eventarc:
Sostituiscigcloud eventarc triggers delete TRIGGER_NAME
TRIGGER_NAME
con il nome del tuo attivatore.
- Elimina l'immagine container
denominata
gcr.io/PROJECT_ID/audit-storage
da Container Registry. Sostituisci PROJECT_ID con l'ID del tuo progetto Google Cloud.
- Elimina il trigger Eventarc:
Passaggi successivi
- Per risolvere altri problemi che potresti riscontrare quando utilizzi Eventarc, vedi Risolvere i problemi.