Attivare i flussi di lavoro utilizzando Cloud Audit Logs (gcloud CLI)
Questa guida rapida mostra come eseguire un flusso di lavoro utilizzando un trigger Eventarc che riceve eventi da BigQuery utilizzando Cloud Audit Logs. BigQuery ospita set di dati pubblici per gli accessi e l'integrazione nelle tue applicazioni. Il trigger esegue il flusso di lavoro ascoltando i job BigQuery completati e trasmette l'evento come argomenti di runtime a un flusso di lavoro di destinazione.
Puoi completare questa guida rapida utilizzando Google Cloud CLI.
- Utilizzare Workflows per creare ed eseguire il deployment di un flusso di lavoro che estrae e restituisce l'email dell'utente che ha eseguito la query e la query.
- Crea un trigger Eventarc che collega un job BigQuery a un destinatario di eventi Workflows.
- Genera un evento eseguendo un job BigQuery utilizzando lo strumento a riga di comando
bq
. Questo evento viene passato come argomento di runtime al flusso di lavoro di destinazione. - Visualizza l'email dell'utente che ha eseguito la query e la query eseguita.
Prima di iniziare
Alcuni passaggi di questo documento potrebbero non funzionare correttamente se la tua organizzazione applica vincoli al tuo ambiente Google Cloud. In questo caso, potresti non riuscire a completare attività come la creazione di indirizzi IP pubblici o delle chiavi degli account di servizio. Se effettui una richiesta che restituisce un errore sui vincoli, scopri come sviluppare applicazioni in un ambiente Google Cloud con restrizioni.
- 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.
- Installa Google Cloud CLI.
-
Per inizializzare l'interfaccia a riga di comando gcloud, esegui il comando seguente:
gcloud init
-
Crea o seleziona un progetto Google Cloud.
-
Creare un progetto Cloud:
gcloud projects create PROJECT_ID
-
Seleziona il progetto Cloud che hai creato:
gcloud config set project PROJECT_ID
-
-
Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.
- Installa Google Cloud CLI.
-
Per inizializzare l'interfaccia a riga di comando gcloud, esegui il comando seguente:
gcloud init
-
Crea o seleziona un progetto Google Cloud.
-
Creare un progetto Cloud:
gcloud projects create PROJECT_ID
-
Seleziona il progetto Cloud che hai creato:
gcloud config set project PROJECT_ID
-
-
Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.
- Aggiorna i componenti
gcloud
:gcloud components update
- Accedi utilizzando il tuo account:
gcloud auth login
Abilita le API Eventarc, Pub/Sub ed Eventarc.
gcloud services enable eventarc.googleapis.com pubsub.googleapis.com workflows.googleapis.com workflowexecutions.googleapis.com
- Imposta le variabili di configurazione utilizzate in questa guida rapida:
export WORKFLOW_LOCATION=us-central1 export TRIGGER_LOCATION=us-central1 export PROJECT_ID=PROJECT_ID gcloud config set project ${PROJECT_ID} gcloud config set workflows/location ${WORKFLOW_LOCATION} gcloud config set eventarc/location ${TRIGGER_LOCATION}
- Crea un account di servizio e assegnagli un nome, ad esempio
my-service-account
.export MY_SERVICE_ACCOUNT=my-service-account gcloud iam service-accounts create ${MY_SERVICE_ACCOUNT}
- Concedi il ruolo
roles/workflows.invoker
all'account di servizio:gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member="serviceAccount:${MY_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \ --role='roles/workflows.invoker'
- Concedi il ruolo
eventarc.eventReceiver
all'account di servizio:gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member=serviceAccount:${MY_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com \ --role='roles/eventarc.eventReceiver'
- Se hai abilitato 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 ${PROJECT_ID} \ --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com"\ --role='roles/iam.serviceAccountTokenCreator'
Sostituisci
PROJECT_NUMBER
con il numero del tuo progetto Google Cloud.
Crea ed esegui il deployment di un flusso di lavoro
Creare ed eseguire il deployment di un flusso di lavoro eseguito quando un completamento job BigQuery attiva un flusso di lavoro con una richiesta HTTP.
Apri un terminale o Cloud Shell.
Nella tua directory home, crea un nuovo file denominato
myFirstWorkflow.yaml
omyFirstWorkflow.json
.Copia e incolla quanto segue nel nuovo file e salvalo:
YAML
main: params: [event] steps: - log_event: call: sys.log args: text: ${event} severity: INFO - extract_data: assign: - user: ${event.data.protoPayload.authenticationInfo.principalEmail} - query: ${event.data.protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.query.query} - return_data: return: user: ${user} query: ${query}
JSON
{ "main": { "params": [ "event" ], "steps": [ { "log_event": { "call": "sys.log", "args": { "text": "${event}", "severity": "INFO" } } }, { "extract_data": { "assign": [ { "user": "${event.data.protoPayload.authenticationInfo.principalEmail}" }, { "query": "${event.data.protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.query.query}" } ] } }, { "return_data": { "return": { "user": "${user}", "query": "${query}" } } } ] } }
Esegui il deployment del flusso di lavoro:
export MY_WORKFLOW=myFirstWorkflow gcloud workflows deploy ${MY_WORKFLOW} --source=myFirstWorkflow.yaml
Sostituisci.yaml
con.json
se hai copiato la versione JSON del flusso di lavoro di esempio.
Crea un trigger Eventarc
Il trigger Eventarc invia gli eventi da BigQuery alla destinazione Workflows.
Crea un trigger che filtra gli eventi BigQuery:
gcloud eventarc triggers create events-cal-trigger \ --destination-workflow=${MY_WORKFLOW} \ --destination-workflow-location=${WORKFLOW_LOCATION} \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=bigquery.googleapis.com" \ --event-filters="methodName=jobservice.jobcompleted" \ --service-account="${MY_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com"
Viene creato un trigger denominato
events-cal-trigger
.Per confermare che
events-cal-trigger
è stato creato correttamente, esegui:gcloud eventarc triggers describe events-cal-trigger --location=${TRIGGER_LOCATION}
L'output dovrebbe essere simile al seguente, al momento della creazione e della posizione del trigger:
createTime: '2021-10-14T15:15:43.872360951Z' [...] name: projects/PROJECT_ID/locations/us-central1/triggers/events-cal-trigger updateTime: '2021-10-14T15:15:52.543525284Z'
Generare e visualizzare un evento
Esegui un job di BigQuery utilizzando lo strumento a riga di comando bq
per generare un evento e attivare il flusso di lavoro. L'evento generato viene trasmesso come argomento runtime del flusso di lavoro che restituisce l'email e la query dell'utente come risultato dell'esecuzione del flusso di lavoro.
Per attivare un flusso di lavoro, esegui un job BigQuery che accede a un set di dati pubblico e da cui recupera informazioni:
bq query \ --nouse_legacy_sql \ --nouse_cache \ 'SELECT * FROM `bigquery-samples`.reddit.full LIMIT 10'
Il completamento del job genera un evento che viene passato come argomento di runtime al flusso di lavoro che restituisce l'email dell'utente che ha eseguito la query e la query stessa.
Per verificare che sia stata attivata un'esecuzione del flusso di lavoro, elenca le ultime cinque esecuzioni:
gcloud workflows executions list ${MY_WORKFLOW} --limit=5
L'output dovrebbe essere simile al seguente ed elencare valori NAME e STATE pari a
SUCCEEDED
per ogni esecuzione del flusso di lavoro.NAME: projects/218898424763/locations/us-central1/workflows/myFirstWorkflow/executions/a073ad6a-c76b-4437-8d39-2ab3ade289d2 STATE: SUCCEEDED START_TIME: 2021-11-08T21:59:33.870561996Z END_TIME: 2021-11-08T21:59:34.150034659Z NAME: projects/218898424763/locations/us-central1/workflows/myFirstWorkflow/executions/35d7c730-7ba5-4055-afee-c04ed706b179 STATE: SUCCEEDED START_TIME: 2021-10-14T19:32:39.908739298Z END_TIME: 2021-10-14T19:32:40.147484015Z
Tieni presente che nell'output,a073ad6a-c76b-4437-8d39-2ab3ade289d2
del campoNAME
è l'ID dell'esecuzione del flusso di lavoro. Copia il tuo ID esecuzione da utilizzare nel passaggio successivo.Per visualizzare il messaggio dell'evento:
Visualizza lo stato dell'esecuzione:
gcloud workflows executions describe WORKFLOW_EXECUTION_ID --workflow=${MY_WORKFLOW}
SostituisciWORKFLOW_EXECUTION_ID
con l'ID dell'esecuzione del flusso di lavoro corrispondente all'ora in cui è stato completato il job in BigQuery. L'output è simile al seguente:argument: '{"data":{"insertId":"eg1840e6vdpr","logName":"projects/eventarc-min/logs/cloudaudit.googleapis.com%2Fdata_access","protoPayload":{"authenticationInfo":{"principalEmail":"USER_EMAIL"},"methodName":"jobservice.jobcompleted","[...],"serviceData":{"@type":"type.googleapis.com/google.cloud.bigquery.logging.v1.AuditData","jobCompletedEvent":{"eventName":"query_job_completed","[...]","query":"SELECT* FROM
Verifica che l'ora in cui viene completato il job BigQuery, denominatabigquery-samples
.reddit.full LIMIT 10","[...],"createTime":"2021-11-08T21:59:30.861Z","endTime":"2021-11-08T21:59:31.609Z","[...]","jobStatus":{"error":{},"state":"DONE"}}}},"[...]","serviceName":"bigquery.googleapis.com","source":"//cloudaudit.googleapis.com/projects/eventarc-min/logs/data_access","specversion":"1.0","subject":"bigquery.googleapis.com/projects/eventarc-min/jobs/bqjob_r2ff9ebe121883ce1_0000017d01904084_1","time":"2021-11-08T21:59:32.436340881Z","type":"google.cloud.audit.log.v1.written"}' endTime: '2021-11-08T21:59:34.150034659Z' name: projects/218898424763/locations/us-central1/workflows/myFirstWorkflow/executions/a073ad6a-c76b-4437-8d39-2ab3ade289d2 result: '{"query":"SELECT * FROMbigquery-samples
.reddit.full LIMIT 10","user":"USER_EMAIL"}' startTime: '2021-11-08T21:59:33.870561996Z' state: SUCCEEDED workflowRevisionId: 000008-5d7startTime: '2021-11-08T21:59:33
eSTART_TIME
dell'esecuzione del flusso di lavoro, corrisponda.Cerca il messaggio dell'evento
result:'{"query":"SELECT * FROM
.bigquery-samples
.reddit.full LIMIT 10","user":"USER_EMAIL"}'
Complimenti, hai generato correttamente un evento BigQuery che ha attivato un destinatario di eventi Workflows utilizzando Eventarc.
Esegui la pulizia
- Elimina il flusso di lavoro creato:
gcloud workflows delete ${MY_WORKFLOW}
Quando ti viene chiesto se vuoi continuare, digitay
. - Elimina il trigger creato in questo tutorial:
gcloud eventarc triggers delete events-cal-trigger
- In alternativa, puoi eliminare il progetto Google Cloud per evitare l'interruzione della fatturazione per tutte le risorse utilizzate all'interno di quel progetto.
Per eliminare il progetto:gcloud projects delete PROJECT_ID_OR_NUMBER
SostituisciPROJECT_ID_OR_NUMBER
con l'ID o il numero del tuo progetto Google Cloud.