Questo tutorial ti insegna a risolvere gli errori di runtime riscontrati quando utilizzi Eventarc per instradare 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 su 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 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 Google Cloud 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.
-
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
-
Create or select 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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
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.
-
Verify 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:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.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.
-
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
-
Create or select 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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
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.
-
Verify 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:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.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 hai creato il progetto, ti viene assegnato il ruolo di base Proprietario (
roles/owner
). Per impostazione predefinita, questo ruolo IAM include le autorizzazioni necessarie per l'accesso completo alla maggior parte delle risorse Google Cloud e puoi saltare questo passaggio.Se non sei il creatore del progetto, le autorizzazioni richieste devono essere concesse al principal appropriato. Ad esempio, un'entità può essere un Account Google (per gli utenti finali) o un account di servizio (per applicazioni e carichi di lavoro di calcolo). Per saperne di più, consulta la pagina Ruoli e autorizzazioni per la destinazione eventi.
Tieni presente che per impostazione predefinita, le autorizzazioni di Cloud Build includono le autorizzazioni per caricare e scaricare gli artefatti 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
) -
Cloud Run Admin (
roles/run.admin
) -
Amministratore Eventarc (
roles/eventarc.admin
) -
Logs View Accessor (
roles/logging.viewAccessor
) -
Project IAM Admin (
roles/resourcemanager.projectIamAdmin
) -
Amministratore account di servizio (
roles/iam.serviceAccountAdmin
) -
Utente service account (
roles/iam.serviceAccountUser
) -
Service Usage Admin (
roles/serviceusage.serviceUsageAdmin
) -
Amministratore spazio di archiviazione (
roles/storage.admin
)
Per ulteriori informazioni sulla concessione dei ruoli, consulta Gestisci 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 l'audit logging per i tipi di accesso ai dati
ADMIN_READ
,DATA_WRITE
eDATA_READ
.- Leggi il criterio Identity and Access Management (IAM) associato al tuo
Google Cloud progetto, cartella o organizzazione e archivialo 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, allora ripeti questi passaggi, a partire dalla lettura del criterio IAM. Per ulteriori informazioni, consulta Configurare gli audit log di accesso ai dati con l'API.
- Leggi il criterio Identity and Access Management (IAM) associato al tuo
Google Cloud progetto, cartella o organizzazione e archivialo in un file temporaneo:
- Concedi il ruolo
eventarc.eventReceiver
al 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 l'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}
Crea un bucket in
us-east1
:export BUCKET1="troubleshoot-bucket1-PROJECT_ID" gcloud storage buckets create gs://${BUCKET1} --location=us-east1
Crea un bucket in
us-west1
:export BUCKET2="troubleshoot-bucket2-PROJECT_ID" gcloud storage buckets create gs://${BUCKET2} --location=us-west1
Recupera il 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 consiste in quanto segue:
Un gestore di eventi che riceve l'evento in entrata 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 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 in 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 su Cloud Run:
gcloud run deploy ${SERVICE_NAME} \ --image $REGION-docker.pkg.dev/${PROJECT_ID}/REPOSITORY/${SERVICE_NAME}:v1 \ --allow-unauthenticated
Se il deployment ha esito positivo, la riga di comando visualizza l'URL del servizio.
Crea un trigger Eventarc per rimanere in ascolto degli eventi di Cloud Storage 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 la creazione di
troubleshoot-trigger
, 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
Crea e carica un file nel bucket di archiviazione
BUCKET1
:echo "Hello World" > random.txt gcloud storage 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, completa i seguenti passaggi:
Filtra le voci di log e restituisci 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: ..."
Nella console Google Cloud , vai alla pagina Log di controllo.
- Seleziona la casella di controllo Google Cloud Storage.
- Assicurati che siano selezionati i tipi di log Lettura amministratore, Lettura dati e Scrittura dati.
Conferma la posizione del trigger 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 ed eseguendo il deployment dell'immagine container in Cloud Run.
Crea un nuovo trigger che si trova 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 il trigger 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 il trigger sia ora implementato correttamente, genera e visualizza un evento.
Verifica che l'origine stia generando eventi. Controlla Cloud Audit Logs e assicurati che il servizio monitorato emetta log. Se i log vengono registrati, ma gli eventi non vengono distribuiti, contatta l'assistenza.
Verifica che esista un argomento Pub/Sub con lo stesso nome del trigger. Eventarc utilizza Pub/Sub come livello di trasporto e utilizzerà un argomento Pub/Sub esistente o creerà e gestirà automaticamente un argomento per te.
- Per elencare i trigger, vedi
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 del trigger 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 il trigger per un provider, un tipo di evento e una destinazione Cloud Run specifici.
- Per elencare i trigger, vedi
Verifica che il trigger 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.
Il trigger 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 recapitabili utilizzando la metrica
subscription/dead_letter_message_count
. Questa metrica mostra il numero di messaggi non recapitabili che Pub/Sub inoltra da una sottoscrizione.Se i messaggi non vengono pubblicati nell'argomento, controlla Cloud Audit Logs e assicurati che il servizio monitorato emetta log. Se i log vengono registrati, ma gli eventi non vengono recapitati, contatta l'assistenza.
Puoi monitorare gli abbonamenti push utilizzando la metrica
subscription/push_request_count
e raggruppandola perresponse_code
esubcription_id
.Se vengono segnalati errori push, controlla i log del servizio Cloud Run. Se l'endpoint di ricezione restituisce un codice di stato diverso da OK, significa che il codice Cloud Run non funziona come previsto e devi contattare l'assistenza.
Per saperne di più, vedi Creare criteri di avviso basati su soglie delle metriche.
- 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 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 Google Cloud console.
Rimuovi tutte le configurazioni predefinite di 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 risorse Google Cloud create in questo tutorial:
- Elimina il trigger Eventarc:
Sostituiscigcloud eventarc triggers delete TRIGGER_NAME
TRIGGER_NAME
con il nome del trigger.
- Elimina il trigger Eventarc:
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 in ciascuna delle due regioni come origine evento per il servizio Cloud Run:
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.
Crea un trigger
Dopo aver eseguito il deployment di un servizio Cloud Run, configura un trigger per rilevare gli eventi di Cloud Storage tramite gli audit log.
Generare e visualizzare un evento
Verifica di aver eseguito correttamente il deployment del servizio e di poter ricevere eventi da Cloud Storage.
Tieni presente che inizialmente non viene restituita alcuna voce di log. Ciò indica che si è verificato un problema nella configurazione che devi esaminare.
Esaminare il problema
Segui la procedura per capire perché il servizio non riceve eventi.
Tempo di inizializzazione
Anche se il trigger viene creato immediatamente, la propagazione e il filtraggio degli eventi possono richiedere fino a due minuti. Esegui questo comando per verificare che un trigger sia attivo:
gcloud eventarc triggers list
L'output indica lo stato del trigger. Nel seguente esempio,
troubleshoot-trigger
sarà attivo entro le ore 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 il trigger, 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 instradati utilizzando Cloud Audit Logs e inviati a Cloud Run. Verifica che gli audit log siano abilitati per Cloud Storage.
Dopo aver abilitato 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 località del trigger.
Posizione del trigger
Potrebbero esserci più risorse in località diverse e devi filtrare gli eventi provenienti da origini che si trovano nella stessa regione della destinazione Cloud Run. Per saperne di più, consulta le località supportate da Eventarc e Informazioni sulle località Eventarc.
In questo tutorial hai eseguito il deployment del servizio Cloud Run su
us-central1
. Poiché hai impostato eventarc/location
su us-central1
, hai anche
creato un trigger 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 che si trova in us-east1
:
Altri problemi che potresti riscontrare
Potresti riscontrare altri problemi durante l'utilizzo di Eventarc.
Dimensione dell'evento
Gli eventi che invii non devono superare i limiti di dimensione degli eventi.
Un trigger che in precedenza forniva eventi ha smesso di funzionare
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 creato per il tutorial.
Per eliminare il progetto: