Batch è un servizio completamente gestito che ti consente pianificare, inserire in coda ed eseguire elaborazione batch carichi di lavoro specifici sulle istanze di macchine virtuali (VM) Compute Engine. Esegui il provisioning delle risorse in batch e gestisce la capacità consentendo l'esecuzione su larga scala dei carichi di lavoro batch.
Workflows ti consente di eseguire i servizi in un ordine da te definito, descritto utilizzando Sintassi di Workflows.
In questo tutorial utilizzi Connettore Workflows per Batch per pianificare ed eseguire un job batch che esegue sei attività in in parallelo su due VM di Compute Engine. Utilizzo di entrambe le modalità Batch e Workflows consente di combinare i vantaggi offerti ed efficiente il provisioning e l'orchestrazione dell'intero processo.
Obiettivi
In questo tutorial, imparerai a:- Creare 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 lotti di 10.000.
- Crea l'immagine Docker per il carico di lavoro.
- Esegui il deployment e l'esecuzione di un flusso di lavoro che:
- Crea un bucket Cloud Storage per archiviare i risultati del primo generatore di numeri.
- Pianifica ed esegue un job batch che esegue Docker un container come sei attività in parallelo su due VM di Compute Engine.
- Facoltativamente, elimina il job batch al termine.
- Verifica che i risultati siano quelli previsti e che i batch di dati generati i numeri primi vengono archiviati in Cloud Storage.
Nella console Google Cloud puoi eseguire la maggior parte dei seguenti comandi oppure 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 basata sull'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 pagina del selettore progetti della console Google Cloud, seleziona oppure creare un progetto Google Cloud.
Verifica che la fatturazione sia attivata per il tuo progetto Google Cloud. Scopri come verifica se la fatturazione è abilitata su un progetto.
Abilita Artifact Registry, Batch, Cloud Build API Compute Engine, Workflow Executions e Workflows.
Crea un account di servizio per il flusso di lavoro da utilizzare per l'autenticazione con altri servizi Google Cloud e assegnagli i ruoli appropriati:
Nella console Google Cloud, vai a Crea account di servizio .
Seleziona il progetto.
Inserisci un nome nel campo Nome account di servizio. Console Google Cloud compila il campo ID account di servizio in base a questo nome.
Nel campo Descrizione account di servizio, 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 all'account di servizio gestito dall'utente che hai creato nel passaggio precedente:
- Editor job batch: per modificare job batch.
- Writer log: per scrivere i log.
- Amministratore Storage: per controllare le risorse Cloud Storage.
Per altri ruoli, fai clic su
Aggiungi un altro ruolo e aggiungi ogni altro ruolo.Fai clic su Continua.
Per completare la creazione dell'account, fai clic su Fine.
Concedi il ruolo Utente account di servizio IAM nell'impostazione predefinita l'account di servizio all'account di servizio gestito dall'utente creato nella precedente passaggio. Dopo aver abilitato l'API Compute Engine, l'account di servizio predefinito è l'account di servizio predefinito di Compute Engine. (
PROJECT_NUMBER-compute@developer.gserviceaccount.com
), e l'autorizzazione viene generalmente assegnata tramite Ruoloroles/iam.serviceAccountUser
.Nella pagina Account di servizio, fai clic sull'indirizzo email account di servizio predefinito (
PROJECT_NUMBER-compute@developer.gserviceaccount.com
).Fai clic sulla scheda Autorizzazioni.
Fai clic su
Concedi di accesso rapido.Per aggiungere una nuova entità, inserisci l'indirizzo email del tuo account di servizio (
SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
).Nell'elenco Seleziona un ruolo, seleziona Account di servizio > Utente account di servizio.
Fai clic su Salva.
gcloud
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Verifica che la fatturazione sia attivata per il tuo progetto Google Cloud. Scopri come verifica se la fatturazione è abilitata su un progetto.
Abilita Artifact Registry, Batch, Cloud Build API Compute Engine Workflows ed eseguizioni di flussi di lavoro di Compute Engine.
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 per il flusso di lavoro da utilizzare per l'autenticazione con gli altri servizi Google Cloud e assegnargli i ruoli appropriati.
Crea l'account di servizio:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Sostituisci
SERVICE_ACCOUNT_NAME
con il nome di l'account di servizio.Concedi i ruoli all'account di servizio gestito dall'utente che hai creato in passaggio precedente. Esegui questo 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.iam.gserviceaccount.com \ --role=ROLE
Sostituisci quanto segue:
PROJECT_ID
: l'ID progetto in cui hai creato l'account di servizioROLE
: il ruolo da concedere
Concedi il ruolo Utente account di servizio IAM nell'impostazione predefinita l'account di servizio all'account di servizio gestito dall'utente che hai creato passaggio precedente. Dopo aver abilitato l'API Compute Engine, il servizio predefinito è l'account di servizio predefinito di Compute Engine. (
PROJECT_NUMBER-compute@developer.gserviceaccount.com
), e l'autorizzazione viene generalmente assegnata tramite Ruoloroles/iam.serviceAccountUser
.PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format='value(projectNumber)') gcloud iam service-accounts add-iam-policy-binding \ $PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountUser
Crea un repository Artifact Registry
Creare un repository per archiviare l'immagine container Docker.
Console
Nella console Google Cloud, vai alla pagina Repository.
Fai clic su
Crea repository:Inserisci container come nome del repository.
In Formato, scegli Docker.
In 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
nel
Regione us-central1
. Per ulteriori informazioni sulle regioni supportate, vedi
Località di Artifact Registry.
recupera gli esempi di codice
Google Cloud archivia il codice sorgente dell'applicazione per questo tutorial GitHub. Puoi clonare il repository o scaricare gli esempi.
Clona il repository dell'app di esempio nella tua macchina locale:
git clone https://github.com/GoogleCloudPlatform/batch-samples.git
In alternativa, puoi scarica gli esempi nel file
main.zip
ed estrarlo.Passa alla directory che contiene il codice di esempio:
cd batch-samples/primegen
Ora il codice sorgente per l'applicazione è disponibile nell'ambiente di sviluppo.
Crea l'immagine Docker utilizzando Cloud Build
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 Google Cloud
dell'ID progetto.
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
ha eseguito il push dell'immagine in un repository Artifact Registry denominato containers
.
Esegui il deployment di un flusso di lavoro che pianifica ed esegue un job batch
Il flusso di lavoro seguente pianifica ed esegue un job batch in esecuzione e un container Docker sotto forma di sei attività in parallelo su due VM di Compute Engine. La il risultato è la generazione di sei lotti di numeri primi, memorizzati in nel bucket Cloud Storage.
Console
Nella console Google Cloud, vai alla pagina Flussi di lavoro.
Fai clic su
Crea.Inserisci un nome per il nuovo flusso di lavoro, ad esempio
batch-workflow
.Nell'elenco Regione, seleziona us-central1.
Seleziona l'Account di servizio 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 flusso di lavoro:
touch batch-workflow.JSON_OR_YAML
Sostituisci
JSON_OR_YAML
conyaml
ojson
a seconda del formato del flusso di lavoro.In un editor di testo, copia il seguente flusso di lavoro nel file del codice sorgente:
YAML
JSON
Esegui il deployment del flusso di lavoro inserendo il comando seguente:
gcloud workflows deploy batch-workflow \ --source=batch-workflow.yaml \ --location=us-central1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Sostituisci
SERVICE_ACCOUNT_NAME
con il nome di l'account di servizio creato in precedenza.
Esegui il flusso di lavoro
L'esecuzione di un flusso di lavoro esegue la definizione attuale del flusso di lavoro associata nel tuo flusso di lavoro.
Console
Nella console Google Cloud, vai alla pagina Flussi di lavoro.
Nella pagina Flussi di lavoro, fai clic sul pulsante flusso di lavoro in batch per accedere alla relativa pagina dei dettagli.
Nella pagina Dettagli flusso di lavoro, 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 flusso di lavoro:
gcloud workflows run batch-workflow \ --location=us-central1
L'esecuzione del flusso di lavoro dovrebbe richiedere alcuni minuti.
Puoi controllare lo stato di un'esecuzione a lunga esecuzione.
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 confermare che i risultati siano quelli previsti elencando gli oggetti nel tuo Cloud Storage di output.
Console
- Nella console Google Cloud, vai alla pagina Bucket di Cloud Storage.
Nell'elenco dei bucket, fai clic sul nome del bucket di cui che vuoi visualizzare.
I risultati dovrebbero essere simili ai seguenti, con sei file in totale, e ognuno elenca 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
TIMESTAMP
con il timestamp restituito da il comando precedente.L'output dovrebbe essere simile al seguente, con sei file in totale, e ognuno 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, elimina il progetto. Se hai utilizzato un progetto esistente e vuoi mantenerlo senza l'aggiunta delle modifiche In questo tutorial, elimina le risorse create per il tutorial.
Elimina il progetto
Il modo più semplice per eliminare la fatturazione 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 del progetto e 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 batch un lavoro.Elimina il job:
gcloud batch jobs delete BATCH_JOB_NAME --location us-central1
Elimina il flusso di lavoro:
gcloud workflows delete WORKFLOW_NAME
Elimina il repository di 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 Elimina i bucket.