Workflows ti consente di eseguire job Cloud Run nell'ambito di un flusso di lavoro per eseguire elaborazioni di dati più complesse o orchestrare un sistema di job esistenti.
Questo tutorial mostra come utilizzare Workflows per eseguire un job Cloud Run che elabora i dati passati come variabili di ambiente al job, in risposta a un evento da Cloud Storage.
Tieni presente che puoi anche archiviare i dati sugli eventi in un bucket Cloud Storage, il che ti consente di criptarli utilizzando le chiavi di crittografia gestite dal cliente. Per saperne di più, consulta Eseguire un job Cloud Run che elabora i dati degli eventi salvati in Cloud Storage.
Crea un job Cloud Run
Questo tutorial utilizza un job Cloud Run di esempio di GitHub. Il job legge i dati da un file di input in Cloud Storage ed esegue un'elaborazione arbitraria per ogni riga del file.
Recupera il codice campione clonando il repository dell'app di esempio sulla tua macchina locale:
git clone https://github.com/GoogleCloudPlatform/jobs-demos.git
In alternativa, puoi scaricare il campione come file ZIP ed estrarlo.
Passa alla directory che contiene il codice di esempio:
cd jobs-demos/parallel-processing
Crea un bucket Cloud Storage per archiviare un file di input che può essere scritto e attivare un evento:
Console
- Nella console Google Cloud , vai alla pagina Bucket in Cloud Storage.
- Fai clic su Aggiungi Crea.
- Nella pagina Crea un bucket, inserisci un nome per il bucket:
Sostituisciinput-PROJECT_ID
PROJECT_ID
con l'ID del tuo Google Cloud progetto. - Mantieni gli altri valori predefiniti.
- Fai clic su Crea.
gcloud
Esegui il comando
gcloud storage buckets create
:gcloud storage buckets create gs://input-PROJECT_ID
Se la richiesta riesce, il comando restituisce il seguente messaggio:
Creating gs://input-PROJECT_ID/...
Terraform
Per creare un bucket Cloud Storage, utilizza la risorsa
google_storage_bucket
e modifica il filemain.tf
come mostrato nell'esempio seguente.Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.
Tieni presente che in un tipico flusso di lavoro Terraform, applichi l'intero piano contemporaneamente. Tuttavia, ai fini di questo tutorial, puoi scegliere come target una risorsa specifica. Ad esempio:
terraform apply -target="random_id.bucket_name_suffix"
e
terraform apply -target="google_storage_bucket.default"
- Nella console Google Cloud , vai alla pagina Bucket in Cloud Storage.
Crea un repository standard di Artifact Registry in cui archiviare l'immagine container:
Console
Nella console Google Cloud , vai alla pagina Repository di Artifact Registry:
Fai clic su
Crea repository.Inserisci un nome per il repository, ad esempio
my-repo
. Per ogni posizione del repository in un progetto, i nomi dei repository devono essere univoci.Mantieni il formato predefinito, che deve essere Docker.
Mantieni la modalità predefinita, che dovrebbe essere Standard.
Per la regione, seleziona us-central1 (Iowa).
Mantieni tutti gli altri valori predefiniti.
Fai clic su Crea.
gcloud
Esegui il comando:
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=us-central1
Sostituisci
REPOSITORY
con un nome univoco per il repository, ad esempiomy-repo
. Per ogni posizione del repository in un progetto, i nomi dei repository devono essere univoci.Terraform
Per creare un repository Artifact Registry, utilizza la risorsa
google_artifact_registry_repository
e modifica il filemain.tf
come mostrato nell'esempio seguente.Tieni presente che in un tipico flusso di lavoro Terraform, applichi l'intero piano contemporaneamente. Tuttavia, ai fini di questo tutorial, puoi scegliere come target una risorsa specifica. Ad esempio:
terraform apply -target="google_artifact_registry_repository.default"
Crea l'immagine container utilizzando un buildpack Google Cloud predefinito:
export SERVICE_NAME=parallel-job gcloud builds submit \ --pack image=us-central1-docker.pkg.dev/PROJECT_ID/REPOSITORY/${SERVICE_NAME}
Sostituisci
REPOSITORY
con il nome del tuo repository Artifact Registry.Il completamento della build può richiedere un paio di minuti.
Crea un job Cloud Run che esegue il deployment dell'immagine container:
Console
Nella console Google Cloud , vai alla pagina Cloud Run:
Fai clic su Crea job per visualizzare il modulo Crea job.
- Nel modulo, seleziona
us-central1-docker.pkg.dev/PROJECT_ID/REPOSITORY/parallel-job:latest
come URL dell'immagine container di Artifact Registry. - (Facoltativo) Per il nome del job, inserisci
parallel-job
. - (Facoltativo) Per la regione, seleziona us-central1 (Iowa).
- Per il numero di attività che vuoi eseguire nel job, inserisci
10
. Tutte le attività devono avere esito positivo affinché il job riesca. Per impostazione predefinita, le attività vengono eseguite in parallelo.
- Nel modulo, seleziona
Espandi la sezione Container, variabili e secret, connessioni, sicurezza e mantieni tutti i valori predefiniti, ad eccezione delle seguenti impostazioni:
Fai clic sulla scheda Generale.
- Per il comando del container, inserisci
python
. - Per l'argomento container, inserisci
process.py
.
- Per il comando del container, inserisci
Fai clic sulla scheda Variabili e secret.
- Fai clic su Aggiungi variabile e inserisci
INPUT_BUCKET
per il nome einput-PROJECT_ID
per il valore. - Fai clic su Aggiungi variabile e inserisci
INPUT_FILE
per il nome einput_file.txt
per il valore.
- Fai clic su Aggiungi variabile e inserisci
Per creare il job, fai clic su Crea.
gcloud
Imposta la regione Cloud Run predefinita:
gcloud config set run/region us-central1
Crea il job Cloud Run:
gcloud run jobs create parallel-job \ --image us-central1-docker.pkg.dev/PROJECT_ID/REPOSITORY/parallel-job:latest \ --command python \ --args process.py \ --tasks 10 \ --set-env-vars=INPUT_BUCKET=input-PROJECT_ID,INPUT_FILE=input_file.txt
Tieni presente che se non specifichi un tag immagine, Artifact Registry cerca l'immagine con il tag
latest
predefinito.Per un elenco completo delle opzioni disponibili durante la creazione di un job, consulta la documentazione della riga di comando gcloud run jobs create.
Una volta creato il job, dovresti visualizzare un messaggio che indica la riuscita dell'operazione.
Terraform
Per creare un job Cloud Run, utilizza la risorsa
google_cloud_run_v2_job
e modifica il filemain.tf
come mostrato nell'esempio seguente.Tieni presente che in un tipico flusso di lavoro Terraform, applichi l'intero piano contemporaneamente. Tuttavia, ai fini di questo tutorial, puoi scegliere come target una risorsa specifica. Ad esempio:
terraform apply -target="google_cloud_run_v2_job.default"
Esegui il deployment di un flusso di lavoro che esegue il job Cloud Run
Definisci ed esegui il deployment di un flusso di lavoro che esegue il job Cloud Run che hai appena creato. Una definizione di workflow è costituita da una serie di passaggi descritti utilizzando la sintassi dei workflow.
Console
Nella console Google Cloud , vai alla pagina Workflows:
Fai clic su
Crea.Inserisci un nome per il nuovo flusso di lavoro, ad esempio
cloud-run-job-workflow
.Per la regione, seleziona us-central1 (Iowa).
Nel campo Service account, seleziona il account di servizio che hai creato in precedenza.
L'account di servizio funge da identità del flusso di lavoro. Dovresti aver già concesso il ruolo Amministratore di Cloud Run al account di servizio in modo che il workflow possa eseguire il job Cloud Run.
Fai clic su Avanti.
Nell'editor del workflow, inserisci la seguente definizione per il workflow:
Fai clic su Esegui il deployment.
gcloud
Crea un file di codice sorgente per il workflow:
touch cloud-run-job-workflow.yaml
Copia la seguente definizione del workflow nel file del codice sorgente:
Esegui il deployment del flusso di lavoro inserendo questo comando:
gcloud workflows deploy cloud-run-job-workflow \ --location=us-central1 \ --source=cloud-run-job-workflow.yaml \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Sostituisci quanto segue:
SERVICE_ACCOUNT_NAME
: il nome del account di servizio che hai creato in precedenzaPROJECT_ID
: l'ID del tuo Google Cloud progetto
L'account di servizio funge da identità del flusso di lavoro. Dovresti aver già concesso il ruolo
roles/run.admin
al account di servizio in modo che il workflow possa eseguire il job Cloud Run.
Terraform
Per creare un flusso di lavoro, utilizza la
risorsa google_workflows_workflow
e modifica il file main.tf
come mostrato nell'esempio seguente.
Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.
Tieni presente che in un tipico flusso di lavoro Terraform, applichi l'intero piano contemporaneamente. Tuttavia, ai fini di questo tutorial, puoi scegliere come target una risorsa specifica. Ad esempio:
terraform apply -target="google_workflows_workflow.default"
Il flusso di lavoro esegue le seguenti operazioni:
Passaggio
init
: accetta un evento Cloud Storage come argomento e poi imposta le variabili necessarie.Passaggio
check_input_file
: verifica se il bucket Cloud Storage specificato nell'evento è il bucket utilizzato dal job Cloud Run.- In caso affermativo, il flusso di lavoro passa al passaggio
run_job
. - In caso contrario, il flusso di lavoro termina, interrompendo qualsiasi ulteriore elaborazione.
- In caso affermativo, il flusso di lavoro passa al passaggio
Il passaggio
run_job
utilizza il metodogoogleapis.run.v1.namespaces.jobs.run
del connettore dell'API Cloud Run Admin per eseguire il job. I nomi del bucket Cloud Storage e dei file di dati vengono trasferiti come variabili di override dal flusso di lavoro al job.Passaggio
finish
: restituisce informazioni sull'esecuzione del job come risultato del workflow.
Crea un trigger Eventarc per il flusso di lavoro
Per eseguire automaticamente il flusso di lavoro e, di conseguenza, il job Cloud Run ogni volta che il file di dati di input viene aggiornato, crea un trigger Eventarc che risponde agli eventi Cloud Storage nel bucket contenente il file di dati di input.
Console
Nella console Google Cloud , vai alla pagina Workflows:
Fai clic sul nome del flusso di lavoro, ad esempio
cloud-run-job-workflow
.Nella pagina Dettagli del flusso di lavoro, fai clic su
Modifica.Nella pagina Modifica flusso di lavoro, nella sezione Trigger, fai clic su Aggiungi nuovo trigger > Eventarc.
Viene visualizzato il riquadro Trigger Eventarc.
Nel campo Nome trigger, inserisci un nome per il trigger, ad esempio
cloud-run-job-workflow-trigger
.Dall'elenco Provider di eventi, seleziona Cloud Storage.
Dall'elenco Evento, seleziona google.cloud.storage.object.v1.finalized.
Nel campo Bucket, seleziona il bucket contenente il file di dati di input. Il nome del bucket ha il formato
input-PROJECT_ID
.Nel campo Service account, seleziona il account di servizio che hai creato in precedenza.
L'account di servizio funge da identità del trigger. Dovresti aver già concesso i seguenti ruoli al account di servizio:
- Eventarc Event Receiver: per ricevere eventi
- Workflows Invoker: per eseguire i workflow
Fai clic su Salva trigger.
Il trigger Eventarc ora viene visualizzato nella sezione Trigger della pagina Modifica flusso di lavoro.
Fai clic su Avanti.
Fai clic su Esegui il deployment.
gcloud
Crea un trigger Eventarc eseguendo il seguente comando:
gcloud eventarc triggers create cloud-run-job-workflow-trigger \ --location=us \ --destination-workflow=cloud-run-job-workflow \ --destination-workflow-location=us-central1 \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=input-PROJECT_ID" \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Sostituisci quanto segue:
PROJECT_ID
: l'ID del tuo progetto Google CloudSERVICE_ACCOUNT_NAME
: il nome del service account creato in precedenza.
L'account di servizio funge da identità del trigger. Dovresti aver già concesso i seguenti ruoli al account di servizio:
roles/eventarc.eventReceiver
: per ricevere eventiroles/workflows.invoker
: per eseguire i workflow
Terraform
Per creare un trigger, utilizza la
risorsa google_eventarc_trigger
e modifica il file main.tf
come mostrato nell'esempio seguente.
Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.
Tieni presente che in un tipico flusso di lavoro Terraform, applichi l'intero piano contemporaneamente. Tuttavia, ai fini di questo tutorial, puoi scegliere come target una risorsa specifica. Ad esempio:
terraform apply -target="google_eventarc_trigger.default"
Ogni volta che un file viene caricato o sovrascritto nel bucket Cloud Storage contenente il file di dati di input, il flusso di lavoro viene eseguito con l'evento Cloud Storage corrispondente come argomento.
Attivare il workflow
Testa il sistema end-to-end aggiornando il file di dati di input in Cloud Storage.
Genera nuovi dati per il file di input e caricali in Cloud Storage nella posizione prevista dal job Cloud Run:
base64 /dev/urandom | head -c 100000 >input_file.txt gcloud storage cp input_file.txt gs://input-PROJECT_ID/input_file.txt
Se hai creato un bucket Cloud Storage utilizzando Terraform, puoi recuperare il nome del bucket eseguendo il seguente comando:
gcloud storage buckets list gs://input*
L'esecuzione del job Cloud Run può richiedere alcuni minuti.
Verifica che il job Cloud Run sia stato eseguito come previsto visualizzando le esecuzioni del job:
gcloud config set run/region us-central1 gcloud run jobs executions list --job=parallel-job
Nell'output dovresti visualizzare l'esecuzione corretta del job, che indica che
10/10
attività sono state completate.
Scopri di più sull'attivazione di un flusso di lavoro con eventi o messaggi Pub/Sub.