Batch è un servizio completamente gestito che consente di pianificare, inserire in coda ed eseguire carichi di lavoro di elaborazione batch su istanze di macchine virtuali (VM) Compute Engine. Batch esegue il provisioning delle risorse e gestisce la capacità per tuo conto, consentendo l'esecuzione dei carichi di lavoro batch su larga scala.
Workflows ti consente di eseguire i servizi di cui hai bisogno in un ordine definito da te e descritto utilizzando la sintassi di Workflows.
In questo tutorial utilizzerai il connettore Workflows per Batch per pianificare ed eseguire un job Batch che esegue sei attività in parallelo su due VM Compute Engine. L'utilizzo di Batch e Workflows consente di combinare i vantaggi che offrono ed eseguire il provisioning e l'orchestrazione dell'intero processo in modo efficiente.
Obiettivi
In questo tutorial, imparerai a:- Crea un repository Artifact Registry per un'immagine container Docker.
- Recupera il codice per il carico di lavoro di elaborazione batch da GitHub: un programma di esempio che genera numeri primi in batch di 10.000.
- Crea l'immagine Docker per il workload.
- Esegui il deployment ed esegui un workflow che:
- Crea un bucket Cloud Storage per archiviare i risultati del generatore di numeri primi.
- Pianifica ed esegue un job batch che esegue il container Docker come sei attività in parallelo su due VM Compute Engine.
- Facoltativamente, elimina il job batch dopo il completamento.
- Verifica che i risultati siano quelli previsti e che i batch di numeri primi generati siano archiviati in Cloud Storage.
Puoi eseguire la maggior parte dei comandi seguenti nella console Google Cloud oppure eseguire tutti i comandi utilizzando Google Cloud CLI nel terminale o in Cloud Shell.
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.
Console
Nella console Google Cloud , nella pagina di selezione del progetto, seleziona o crea un progetto Google Cloud .
Verifica che la fatturazione sia attivata per il tuo progetto Google Cloud . Scopri come verificare se la fatturazione è abilitata per un progetto.
Abilita le API Artifact Registry, Batch, Cloud Build, Compute Engine, Workflow Executions e Workflows.
Crea un account di servizio che il workflow possa utilizzare per l'autenticazione con altri servizi Google Cloud e concedigli i ruoli appropriati:
Nella console Google Cloud , vai alla pagina Crea service account.
Seleziona il progetto.
Nel campo Nome service account, inserisci un nome. La console Google Cloud compila il campo ID service account in base a questo nome.
Nel campo Descrizione service account, inserisci una descrizione. Ad esempio,
Service account for tutorial.Fai clic su Crea e continua.
Nell'elenco Seleziona un ruolo, filtra i seguenti ruoli da concedere al account di servizio gestito dall'utente che hai creato nel passaggio precedente:
- Editor di job batch: per modificare i job batch.
- Logs Writer: per scrivere i log.
- Amministratore spazio di archiviazione: per controllare le risorse Cloud Storage.
Per i ruoli aggiuntivi, fai clic su Aggiungi un altro ruolo e aggiungi ogni ruolo successivo.
Fai clic su Continua.
Per completare la creazione dell'account, fai clic su Fine.
Concedi il ruolo Utente service account IAM al account di servizio predefinito al account di servizio gestito dall'utente creato nel passaggio precedente. Dopo aver abilitato l'API Compute Engine, il account di servizio predefinito è il account di servizio Compute Engine predefinito (
PROJECT_NUMBER-compute@), e l'autorizzazione viene in genere assegnata tramite il ruoloroles/iam.serviceAccountUser.Nella pagina Service account, fai clic sull'indirizzo email del account di servizio predefinito (
PROJECT_NUMBER-compute@).Fai clic sulla scheda Autorizzazioni.
Fai clic sul pulsante Concedi l'accesso.
Per aggiungere una nuova entità, inserisci l'indirizzo email del tuo account di servizio (
SERVICE_ACCOUNT_NAME@PROJECT_ID.).Nell'elenco Seleziona un ruolo, seleziona il ruolo Service Accounts > Service Account User.
Fai clic su Salva.
gcloud
Nella console Google Cloud , attiva Cloud Shell.
Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell e viene visualizzato un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installata e con valori già impostati per il progetto corrente. L'inizializzazione della sessione può richiedere alcuni secondi.
Verifica che la fatturazione sia attivata per il tuo progetto Google Cloud . Scopri come verificare se la fatturazione è abilitata per un progetto.
Abilita le API Artifact Registry, Batch, Cloud Build, Compute Engine Workflow Executions e Workflows.
gcloud services enable artifactregistry.googleapis.com \ batch.googleapis.com \ cloudbuild.googleapis.com \ compute.googleapis.com \ workflowexecutions.googleapis.com \ workflows.googleapis.com
Crea un account di servizio che il tuo workflow possa utilizzare per l'autenticazione con altri servizi Google Cloud e concedigli i ruoli appropriati.
Crea l'account di servizio:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Sostituisci
SERVICE_ACCOUNT_NAMEcon un nome per il account di servizio.Concedi ruoli al account di servizio gestito dall'utente che hai creato nel passaggio precedente. Esegui il seguente comando una volta per ciascuno dei seguenti ruoli IAM:
roles/batch.jobsEditor: per modificare i job batch.roles/logging.logWriter: per scrivere i log.roles/storage.admin: per controllare le risorse Cloud Storage.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID. \ --role=ROLE
Sostituisci quanto segue:
PROJECT_ID: l'ID progetto in cui hai creato il account di servizioROLE: il ruolo da concedere
Concedi il ruolo Utente account di servizio IAM nell'account di servizio predefinito all'account di servizio gestito dall'utente che hai creato nel passaggio precedente. Dopo aver abilitato l'API Compute Engine, il service account predefinito è il account di servizio predefinito di Compute Engine (
PROJECT_NUMBER-compute@) e l'autorizzazione viene in genere assegnata tramite il ruoloroles/iam.serviceAccountUser.PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format='value(projectNumber)') gcloud iam service-accounts add-iam-policy-binding \ $PROJECT_NUMBER-compute@ \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID. \ --role=roles/iam.serviceAccountUser
Crea un repository Artifact Registry
Crea un repository per archiviare l'immagine container Docker.
Console
Nella console Google Cloud , vai alla pagina Repository.
Fai clic su Crea repository.
Inserisci containers come nome del repository.
In Formato, scegli Docker.
Per Tipo di località, scegli Regione.
Nell'elenco Regione, seleziona us-central1.
Fai clic su Crea.
gcloud
Esegui questo comando:
gcloud artifacts repositories create containers \
--repository-format=docker \
--location=us-central1
Hai creato un repository Artifact Registry denominato containers nella regione us-central1. Per saperne di più sulle regioni supportate, consulta
Località di Artifact Registry.
Scarica gli esempi di codice
Google Cloud memorizza il codice sorgente dell'applicazione per questo tutorial in GitHub. Puoi clonare il repository o scaricare gli esempi.
Clona il repository dell'app di esempio sulla tua macchina locale:
git clone https://github.com/GoogleCloudPlatform/batch-samples.gitIn alternativa, puoi scaricare gli esempi nel file
main.ziped estrarli.Passa alla directory che contiene il codice campione:
cd batch-samples/primegen
Ora hai il codice sorgente dell'applicazione nel tuo ambiente di sviluppo.
Crea l'immagine Docker utilizzando Cloud Build
Il Dockerfile contiene le informazioni necessarie per creare un'immagine Docker
utilizzando Cloud Build. Esegui questo comando per crearlo:
gcloud builds submit \
-t us-central1-docker.pkg.dev/PROJECT_ID/containers/primegen-service:v1 PrimeGenService/
Sostituisci PROJECT_ID con il tuo ID progetto Google Cloud.
Al termine della build, dovresti vedere un output simile al seguente:
DONE
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ID: a54818cc-5d14-467b-bfda-5fc9590af68c
CREATE_TIME: 2022-07-29T01:48:50+00:00
DURATION: 48S
SOURCE: gs://project-name_cloudbuild/source/1659059329.705219-17aee3a424a94679937a7200fab15bcf.tgz
IMAGES: us-central1-docker.pkg.dev/project-name/containers/primegen-service:v1
STATUS: SUCCESS
Utilizzando un Dockerfile, hai creato un'immagine Docker denominata primegen-service e ne hai eseguito il push in un repository Artifact Registry denominato containers.
Esegui il deployment di un flusso di lavoro che pianifica ed esegue un job batch
Il seguente flusso di lavoro pianifica ed esegue un job Batch che esegue un container Docker come sei attività in parallelo su due VM Compute Engine. Il risultato è la generazione di sei batch di numeri primi, archiviati in un bucket Cloud Storage.
Console
Nella Google Cloud console, vai alla pagina Workflows.
Fai clic su Crea.
Inserisci un nome per il nuovo flusso di lavoro, ad esempio
batch-workflow.Nell'elenco Regione, seleziona us-central1.
Seleziona il service account che hai creato in precedenza.
Fai clic su Avanti.
Nell'editor del flusso di lavoro, inserisci la seguente definizione per il tuo flusso di lavoro:
YAML
JSON
Fai clic su Esegui il deployment.
gcloud
Crea un file di codice sorgente per il tuo workflow:
touch batch-workflow.JSON_OR_YAMLSostituisci
JSON_OR_YAMLconyamlojsona seconda del formato del workflow.In un editor di testo, copia il seguente workflow nel file del codice sorgente:
YAML
JSON
Esegui il deployment del flusso di lavoro inserendo questo comando:
gcloud workflows deploy batch-workflow \ --source=batch-workflow.yaml \ --location=us-central1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.
Sostituisci
SERVICE_ACCOUNT_NAMEcon il nome del account di servizio che hai creato in precedenza.
Esegui il flusso di lavoro
L'esecuzione di un workflow esegue la definizione attuale del workflow associata al workflow.
Console
Nella Google Cloud console, vai alla pagina Workflows.
Nella pagina Flussi di lavoro, fai clic sul workflow batch-workflow per accedere alla pagina dei dettagli.
Nella pagina Dettagli workflow, fai clic su play_arrow Esegui.
Fai di nuovo clic su Esegui.
L'esecuzione del flusso di lavoro dovrebbe richiedere alcuni minuti.
Visualizza i risultati del flusso di lavoro nel riquadro Output.
I risultati dovrebbero essere simili ai seguenti:
{ "bucket": "project-name-job-primegen-TIMESTAMP", "jobId": "job-primegen-TIMESTAMP" }
gcloud
Esegui il workflow:
gcloud workflows run batch-workflow \ --location=us-central1
L'esecuzione del flusso di lavoro dovrebbe richiedere alcuni minuti.
Puoi <x0A>controllare lo stato di un'esecuzione di lunga durata.
Per ottenere lo stato dell'ultima esecuzione completata, esegui questo comando:
gcloud workflows executions describe-last
I risultati dovrebbero essere simili ai seguenti:
name: projects/PROJECT_NUMBER/locations/us-central1/workflows/batch-workflow/executions/EXECUTION_ID result: '{"bucket":"project-name-job-primegen-TIMESTAMP","jobId":"job-primegen-TIMESTAMP"}' startTime: '2022-07-29T16:08:39.725306421Z' state: SUCCEEDED status: currentSteps: - routine: main step: returnResult workflowRevisionId: 000001-9ba
Elenca gli oggetti nel bucket di output
Puoi verificare che i risultati siano quelli previsti elencando gli oggetti nel bucket di output di Cloud Storage.
Console
- Nella console Google Cloud , vai alla pagina Bucket in Cloud Storage.
Nell'elenco dei bucket, fai clic sul nome del bucket di cui vuoi visualizzare i contenuti.
I risultati dovrebbero essere simili ai seguenti, con sei file in totale, ciascuno contenente un gruppo di 10.000 numeri primi:
primes-1-10000.txt primes-10001-20000.txt primes-20001-30000.txt primes-30001-40000.txt primes-40001-50000.txt primes-50001-60000.txt
gcloud
Recupera il nome del bucket di output:
gcloud storage ls
L'output è simile al seguente:
gs://PROJECT_ID-job-primegen-TIMESTAMP/
Elenca gli oggetti nel bucket di output:
gcloud storage ls gs://PROJECT_ID-job-primegen-TIMESTAMP/** --recursive
Sostituisci
TIMESTAMPcon il timestamp restituito dal comando precedente.L'output dovrebbe essere simile al seguente, con sei file in totale, ognuno dei quali elenca un gruppo di 10.000 numeri primi:
gs://project-name-job-primegen-TIMESTAMP/primes-1-10000.txt gs://project-name-job-primegen-TIMESTAMP/primes-10001-20000.txt gs://project-name-job-primegen-TIMESTAMP/primes-20001-30000.txt gs://project-name-job-primegen-TIMESTAMP/primes-30001-40000.txt gs://project-name-job-primegen-TIMESTAMP/primes-40001-50000.txt gs://project-name-job-primegen-TIMESTAMP/primes-50001-60000.txt
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 creato per il tutorial.
Per eliminare il progetto:
- Nella console Google Cloud , vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.
Elimina le risorse create in questo tutorial
Elimina il job Batch:
Innanzitutto, recupera il nome del job:
gcloud batch jobs list --location=us-central1
L'output dovrebbe essere simile al seguente:
NAME: projects/project-name/locations/us-central1/jobs/job-primegen-TIMESTAMP STATE: SUCCEEDED
Dove
job-primegen-TIMESTAMPè il nome del job Batch.Elimina il job:
gcloud batch jobs delete BATCH_JOB_NAME --location us-central1
Elimina il workflow:
gcloud workflows delete WORKFLOW_NAME
Elimina il repository del container:
gcloud artifacts repositories delete REPOSITORY_NAME --location=us-central1
Cloud Build utilizza Cloud Storage per archiviare le risorse di build. Per eliminare un bucket Cloud Storage, consulta Eliminare i bucket.