O Batch é um serviço totalmente gerido que lhe permite agendar, colocar em fila e executar cargas de trabalho de processamento em lote em instâncias de máquinas virtuais (VMs) do Compute Engine. Aprovisiona recursos em lote e gere a capacidade em seu nome, o que permite que as cargas de trabalho em lote sejam executadas em grande escala.
Os fluxos de trabalho permitem-lhe executar os serviços de que precisa numa ordem que define, descrita através da sintaxe dos fluxos de trabalho.
Neste tutorial, vai usar o conetor Workflows para o Batch para agendar e executar uma tarefa do Batch que executa seis tarefas em paralelo em duas VMs do Compute Engine. A utilização de processos em lote e fluxos de trabalho permite-lhe combinar as vantagens que oferecem e aprovisionar e orquestrar de forma eficiente todo o processo.
Objetivos
Neste tutorial, vai:- Crie um repositório do Artifact Registry para uma imagem de contentor Docker.
- Obtenha o código para a carga de trabalho de processamento em lote do GitHub: um programa de exemplo que gera números primos em lotes de 10 000.
- Crie a imagem do Docker para a carga de trabalho.
- Implemente e execute um fluxo de trabalho que faça o seguinte:
- Cria um contentor do Cloud Storage para armazenar os resultados do gerador de números primos.
- Agenda e executa uma tarefa do Batch que executa o contentor Docker como seis tarefas em paralelo em duas VMs do Compute Engine.
- Elimina opcionalmente a tarefa em lote após a conclusão.
- Confirme que os resultados são os esperados e que os lotes de números primos gerados são armazenados no Cloud Storage.
Pode executar a maioria dos seguintes comandos na Google Cloud consola ou executar todos os comandos através da CLI Google Cloud no terminal ou no Cloud Shell.
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custos com base na sua utilização projetada,
use a calculadora de preços.
Antes de começar
As restrições de segurança definidas pela sua organização podem impedir a conclusão dos seguintes passos. Para informações de resolução de problemas, consulte o artigo Desenvolva aplicações num ambiente Google Cloud restrito.
Consola
Na Google Cloud consola, na página do seletor de projetos, selecione ou crie um Google Cloud projeto.
Certifique-se de que a faturação está ativada para o seu Google Cloud projeto. Saiba como verificar se a faturação está ativada num projeto.
Ative as APIs Artifact Registry, Batch, Cloud Build, Compute Engine, Workflow Executions e Workflows.
Crie uma conta de serviço para o seu fluxo de trabalho usar para autenticação com outros Google Cloud serviços e conceda-lhe as funções adequadas:
Na Google Cloud consola, aceda à página Criar conta de serviço.
Selecione o seu projeto.
No campo Nome da conta de serviço, introduza um nome. A Google Cloud consola preenche o campo ID da conta de serviço com base neste nome.
No campo Descrição da conta de serviço, introduza uma descrição. Por exemplo,
Service account for tutorial
.Clique em Criar e continuar.
Na lista Selecionar uma função, filtre as seguintes funções para conceder à conta de serviço gerida pelo utilizador que criou no passo anterior:
- Editor de tarefas em lote: para editar tarefas em lote.
- Escritor de registos: para escrever registos.
- Administrador de armazenamento: para controlar os recursos do Cloud Storage.
Para funções adicionais, clique em
Adicionar outra função e adicione cada função adicional.Clique em Continuar.
Para concluir a criação da conta, clique em Concluído.
Conceda a função de utilizador da conta de serviço do IAM à conta de serviço gerida pelo utilizador criada no passo anterior. Depois de ativar a API Compute Engine, a conta de serviço predefinida é a conta de serviço predefinida do Compute Engine (
PROJECT_NUMBER-compute@developer.gserviceaccount.com
) e a autorização é normalmente atribuída através da funçãoroles/iam.serviceAccountUser
.Na página Contas de serviço, clique no endereço de email da conta de serviço predefinida (
PROJECT_NUMBER-compute@developer.gserviceaccount.com
).Clique no separador Autorizações.
Clique no botão
Conceder acesso.Para adicionar um novo principal, introduza o endereço de email da sua conta de serviço (
SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
).Na lista Selecionar uma função, selecione a função Contas de serviço > Utilizador da conta de serviço.
Clique em Guardar.
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.
Certifique-se de que a faturação está ativada para o seu Google Cloud projeto. Saiba como verificar se a faturação está ativada num projeto.
Ative as APIs 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
Crie uma conta de serviço para o seu fluxo de trabalho usar para autenticação com outros Google Cloud serviços e conceda-lhe as funções adequadas.
Crie a conta de serviço:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Substitua
SERVICE_ACCOUNT_NAME
por um nome para a conta de serviço.Conceda funções à conta de serviço gerida pelo utilizador que criou no passo anterior. Execute o seguinte comando uma vez para cada uma das seguintes funções do IAM:
roles/batch.jobsEditor
: para editar tarefas em lote.roles/logging.logWriter
: para escrever registos.roles/storage.admin
: para controlar os recursos do Cloud Storage.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=ROLE
Substitua o seguinte:
PROJECT_ID
: o ID do projeto onde criou a conta de serviçoROLE
: a função a conceder
Conceda a função de utilizador da conta de serviço do IAM à conta de serviço gerida pelo utilizador que criou no passo anterior. Depois de ativar a API Compute Engine, a conta de serviço predefinida é a conta de serviço predefinida do Compute Engine (
PROJECT_NUMBER-compute@developer.gserviceaccount.com
) e a autorização é normalmente atribuída através da funçãoroles/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
Crie um repositório do Artifact Registry
Crie um repositório para armazenar a sua imagem de contentor Docker.
Consola
Na Google Cloud consola, aceda à página Repositórios.
Clique em
Criar repositório.Introduza containers como o nome do repositório.
Em Formato, escolha Docker.
Para Tipo de localização, escolha Região.
Na lista Região, selecione us-central1.
Clique em Criar.
gcloud
Execute o seguinte comando:
gcloud artifacts repositories create containers \
--repository-format=docker \
--location=us-central1
Criou um repositório do Artifact Registry denominado containers
na região us-central1
. Para mais informações sobre as regiões suportadas, consulte o artigo
Localizações do Artifact Registry.
Obtenha os exemplos de código
Google Cloud armazena o código fonte da aplicação para este tutorial no GitHub. Pode clonar esse repositório ou transferir os exemplos.
Clone o repositório da app de exemplo para a sua máquina local:
git clone https://github.com/GoogleCloudPlatform/batch-samples.git
Em alternativa, pode transferir os exemplos no ficheiro
main.zip
e extraí-los.Altere para o diretório que contém o código de exemplo:
cd batch-samples/primegen
Agora, tem o código-fonte da aplicação no seu ambiente de desenvolvimento.
Crie a imagem Docker com o Cloud Build
O Dockerfile
contém as informações necessárias para criar uma imagem do Docker
com o Cloud Build. Execute o seguinte comando para o criar:
gcloud builds submit \
-t us-central1-docker.pkg.dev/PROJECT_ID/containers/primegen-service:v1 PrimeGenService/
Substitua PROJECT_ID
pelo seu Google Cloud
ID do projeto.
Quando a compilação estiver concluída, deverá ver um resultado semelhante ao seguinte:
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
Usando um Dockerfile, criou uma imagem Docker denominada primegen-service
e carregou a imagem para um repositório do Artifact Registry denominado containers
.
Implemente um fluxo de trabalho que agende e execute uma tarefa em lote
O fluxo de trabalho seguinte agenda e executa uma tarefa em lote que executa um contentor Docker como seis tarefas em paralelo em duas VMs do Compute Engine. O resultado é a geração de seis lotes de números primos, armazenados num contentor do Cloud Storage.
Consola
Na Google Cloud consola, aceda à página Fluxos de trabalho.
Clique em
Criar.Introduza um nome para o novo fluxo de trabalho, como
batch-workflow
.Na lista Região, selecione us-central1.
Selecione a conta de serviço que criou anteriormente.
Clicar em Seguinte.
No editor de fluxos de trabalho, introduza a seguinte definição para o seu fluxo de trabalho:
YAML
JSON
Clique em Implementar.
gcloud
Crie um ficheiro de código-fonte para o seu fluxo de trabalho:
touch batch-workflow.JSON_OR_YAML
Substitua
JSON_OR_YAML
poryaml
oujson
, consoante o formato do seu fluxo de trabalho.Num editor de texto, copie o seguinte fluxo de trabalho para o ficheiro de código-fonte:
YAML
JSON
Implemente o fluxo de trabalho introduzindo o seguinte comando:
gcloud workflows deploy batch-workflow \ --source=batch-workflow.yaml \ --location=us-central1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Substitua
SERVICE_ACCOUNT_NAME
pelo nome da conta de serviço que criou anteriormente.
Execute o fluxo de trabalho
A execução de um fluxo de trabalho executa a definição do fluxo de trabalho atual associada ao fluxo de trabalho.
Consola
Na Google Cloud consola, aceda à página Fluxos de trabalho.
Na página Fluxos de trabalho, clique no fluxo de trabalho batch-workflow para aceder à respetiva página de detalhes.
Na página Detalhes do fluxo de trabalho, clique em play_arrow Executar.
Clique novamente em Executar.
A execução do fluxo de trabalho deve demorar alguns minutos.
Veja os resultados do fluxo de trabalho no painel Saída.
Os resultados devem ter um aspeto semelhante ao seguinte:
{ "bucket": "project-name-job-primegen-TIMESTAMP", "jobId": "job-primegen-TIMESTAMP" }
gcloud
Execute o fluxo de trabalho:
gcloud workflows run batch-workflow \ --location=us-central1
A execução do fluxo de trabalho deve demorar alguns minutos.
Para obter o estado da última execução concluída, execute o seguinte comando:
gcloud workflows executions describe-last
Os resultados devem ser semelhantes aos seguintes:
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
Indique os objetos no contentor de saída
Pode confirmar que os resultados são os esperados listando os objetos no seu contentor de saída do Cloud Storage.
Consola
- Na Google Cloud consola, aceda à página Recipientes do Cloud Storage.
Na lista de contentores, clique no nome do contentor cujo conteúdo quer ver.
Os resultados devem ser semelhantes aos seguintes, com seis ficheiros no total e cada ficha a representar um lote de 10 000 números primos:
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
Obtenha o nome do contentor de saída:
gcloud storage ls
O resultado é semelhante ao seguinte:
gs://PROJECT_ID-job-primegen-TIMESTAMP/
Liste os objetos no seu contentor de saída:
gcloud storage ls gs://PROJECT_ID-job-primegen-TIMESTAMP/** --recursive
Substitua
TIMESTAMP
pela data/hora devolvida pelo comando anterior.A saída deve ser semelhante à seguinte, com seis ficheiros no total e cada um a listar um lote de 10 000 números primos:
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
Limpar
Se criou um novo projeto para este tutorial, elimine o projeto. Se usou um projeto existente e quer mantê-lo sem as alterações adicionadas neste tutorial, elimine os recursos criados para o tutorial.
Elimine o projeto
A forma mais fácil de eliminar a faturação é eliminar o projeto que criou para o tutorial.
Para eliminar o projeto:
- 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.
Elimine os recursos criados neste tutorial
Elimine a tarefa em lote:
Primeiro, obtenha o nome da tarefa:
gcloud batch jobs list --location=us-central1
O resultado deve ser semelhante ao seguinte:
NAME: projects/project-name/locations/us-central1/jobs/job-primegen-TIMESTAMP STATE: SUCCEEDED
Onde
job-primegen-TIMESTAMP
é o nome da tarefa em lote.Elimine a tarefa:
gcloud batch jobs delete BATCH_JOB_NAME --location us-central1
Elimine o fluxo de trabalho:
gcloud workflows delete WORKFLOW_NAME
Elimine o repositório de contentores:
gcloud artifacts repositories delete REPOSITORY_NAME --location=us-central1
O Cloud Build usa o Cloud Storage para armazenar recursos de compilação. Para eliminar um contentor do Cloud Storage, consulte o artigo Eliminar contentores.