O Batch é um serviço totalmente gerenciado que permite programar, enfileirar e executar cargas de trabalho de processamento em lote em instâncias de máquina virtual (VM) do Compute Engine. O Batch provisiona recursos e gerencia a capacidade em seu nome, permitindo que suas cargas de trabalho em lote sejam executadas em escala.
O Workflows permite executar os serviços necessários em uma ordem definida usando a sintaxe do Workflows.
Neste tutorial, você vai usar o conector de fluxos de trabalho para o Batch para programar e executar um job do Batch que executa seis tarefas em paralelo em duas VMs do Compute Engine. Usar os fluxos de trabalho e o Batch permite combinar as vantagens que eles oferecem e provisionar e orquestrar todo o processo de maneira eficiente.
Objetivos
Neste tutorial, você aprenderá a:- Crie um repositório do Artifact Registry para uma imagem de contêiner do Docker.
- Acesse o código da carga de trabalho de processamento em lote no GitHub: um programa de exemplo que gera números primos em lotes de 10.000.
- Crie a imagem Docker para a carga de trabalho.
- Implante e execute um fluxo de trabalho que faça o seguinte:
- Cria um bucket do Cloud Storage para armazenar os resultados do gerador de números primos.
- Programa e executa um job em lote que executa o contêiner do Docker como seis tarefas em paralelo em duas VMs do Compute Engine.
- Exclua o job em lote após a conclusão, se quiser.
- Confirme se os resultados estão como esperado e se os lotes de números primos gerados são armazenados no Cloud Storage.
É possível executar a maioria dos comandos a seguir no console do Google Cloud ou executar todos os comandos usando a CLI do Google Cloud no terminal ou no Cloud Shell.
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Antes de começar
As restrições de segurança definidas pela sua organização podem impedir que você conclua as etapas a seguir. Para informações sobre solução de problemas, consulte Desenvolver aplicativos em um ambiente restrito de Google Cloud .
Console
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um Google Cloud projeto.
Verifique se o faturamento foi ativado para o projeto Google Cloud . Saiba como verificar se o faturamento está ativado em um projeto.
Ative as APIs Artifact Registry, Batch, Cloud Build, Compute Engine, Workflow Executions e Workflows.
Crie uma conta de serviço para que seu fluxo de trabalho use na autenticação com outros serviços do Google Cloud e conceda as funções adequadas:
No Console do Google Cloud, acesse a página Criar conta de serviço.
Selecione o projeto.
No campo Nome da conta de serviço, insira um nome. O Console do Google Cloud preenche o campo ID da conta de serviço com base nesse nome.
No campo Descrição da conta de serviço, insira uma descrição. Por exemplo,
Service account for tutorial
.Clique em Criar e continuar.
Na lista Selecionar papel, filtre os seguintes papéis para conceder à conta de serviço gerenciada pelo usuário que você criou na etapa anterior:
- Editor de jobs em lote: para editar jobs em lote.
- Gravador de registros: para gravar registros.
- Administrador do Storage: para controlar os recursos do Cloud Storage.
Para papéis adicionais, clique em
Adicionar outro papel e adicione cada papel adicional.Clique em Continuar.
Para concluir a criação da conta, clique em Concluído.
Conceda o papel de usuário da conta de serviço do IAM na conta de serviço padrão à conta de serviço gerenciada pelo usuário criada na etapa anterior. Depois que você ativar a API Compute Engine, a conta de serviço padrão será a conta de serviço padrão do Compute Engine (
PROJECT_NUMBER-compute@developer.gserviceaccount.com
), e a permissão normalmente é atribuída pelo papelroles/iam.serviceAccountUser
.Na página Contas de serviço, clique no endereço de e-mail da conta de serviço padrão (
PROJECT_NUMBER-compute@developer.gserviceaccount.com
).Clique na guia Permissões.
Clique no botão
Permitir acesso.Para adicionar um novo participante, insira o endereço de e-mail da sua conta de serviço (
SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
).Na lista Selecionar um papel, selecione o papel Contas de serviço > Usuário da conta de serviço.
Clique em Salvar.
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.
Verifique se o faturamento foi ativado para o projeto Google Cloud . Saiba como verificar se o faturamento está ativado em um 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 que seu fluxo de trabalho use na autenticação com outros serviços do Google Cloud e conceda 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 papéis à conta de serviço gerenciada pelo usuário que você criou na etapa anterior. Execute uma vez o seguinte comando para cada um dos seguintes papéis do IAM:
roles/batch.jobsEditor
: para editar jobs em lote.roles/logging.logWriter
: para gravar registros.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:
PROJECT_ID
: o ID do projeto em que você criou a conta de serviçoROLE
: o papel a ser concedido
Conceda o papel de usuário da conta de serviço do IAM na conta de serviço padrão à conta de serviço gerenciada pelo usuário que você criou na etapa anterior. Depois que você ativar a API Compute Engine, a conta de serviço padrão será a conta de serviço padrão do Compute Engine (
PROJECT_NUMBER-compute@developer.gserviceaccount.com
), e a permissão normalmente é atribuída pelo papelroles/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 imagem do contêiner do Docker.
Console
No console do Google Cloud, acesse a página Repositórios.
Clique em
Criar repositório.Insira containers como o nome do repositório.
Em Formato, escolha Docker.
Em Tipo de local, escolha Região.
Na lista Região, selecione us-central1.
Clique em Criar.
gcloud
Execute este comando:
gcloud artifacts repositories create containers \
--repository-format=docker \
--location=us-central1
Você criou um repositório do Artifact Registry chamado containers
na
região us-central1
. Para mais informações sobre as regiões com suporte, consulte
Locais do Artifact Registry.
Receber os exemplos de código
Google Cloud armazena o código-fonte do aplicativo deste tutorial no GitHub. Você pode clonar esse repositório ou fazer o download dos exemplos.
Clone o repositório do app de amostra na máquina local:
git clone https://github.com/GoogleCloudPlatform/batch-samples.git
Outra opção é fazer o download das amostras no arquivo
main.zip
e extraí-las.Acesse o diretório que contém o exemplo de código:
cd batch-samples/primegen
Agora você tem o código-fonte do aplicativo no ambiente de desenvolvimento.
Criar a imagem do Docker usando o Cloud Build
O Dockerfile
contém as informações necessárias para criar uma imagem do Docker
usando o Cloud Build. Execute o comando a seguir para criá-lo:
gcloud builds submit \
-t us-central1-docker.pkg.dev/PROJECT_ID/containers/primegen-service:v1 PrimeGenService/
Substitua PROJECT_ID
pelo ID do projeto Google Cloud.
Quando a criação for concluída, você verá uma saída semelhante a esta:
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, você criou uma imagem do Docker chamada primegen-service
e
enviou a imagem para um repositório do Artifact Registry chamado containers
.
Implantar um fluxo de trabalho que programe e execute um job em lote
O fluxo de trabalho a seguir programa e executa um job em lote que executa um contêiner do 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 em um bucket do Cloud Storage.
Console
No console do Google Cloud, abra a página Workflows.
Clique em
Criar.Insira 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 você criou anteriormente.
Clique em Próxima.
No editor de fluxo de trabalho, insira a seguinte definição:
YAML
JSON
Clique em Implantar.
gcloud
Crie um arquivo de código-fonte para seu fluxo de trabalho:
touch batch-workflow.JSON_OR_YAML
Substitua
JSON_OR_YAML
poryaml
oujson
, dependendo do formato do seu fluxo de trabalho.Em um editor de texto, copie o seguinte fluxo de trabalho para o arquivo de código-fonte:
YAML
JSON
Implante o fluxo de trabalho digitando 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 você criou anteriormente.
Executar o fluxo de trabalho
Quando um fluxo de trabalho é executado, a definição atual associada a ele também é.
Console
No console do Google Cloud, abra a página Workflows.
Na página Fluxos de trabalho, clique no fluxo de trabalho batch-workflow para acessar a página de detalhes dele.
Na página Detalhes do fluxo de trabalho, clique em play_arrow Executar.
Clique em Executar novamente.
A execução do fluxo de trabalho leva alguns minutos.
Confira os resultados do fluxo de trabalho no painel Saída.
A resposta deve ficar assim:
{ "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 leva alguns minutos.
É possível verificar o status de uma execução de longa duração.
Para conferir o status da última execução concluída, execute o seguinte comando:
gcloud workflows executions describe-last
Os resultados serão semelhantes a estes:
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
Listar os objetos no bucket de saída
É possível confirmar se os resultados são esperados listando os objetos no bucket de saída do Cloud Storage.
Console
- No Console do Google Cloud, acesse a página Buckets do Cloud Storage.
Na lista de buckets, clique no nome do bucket cujo conteúdo você quer visualizar.
Os resultados serão semelhantes aos seguintes, com seis arquivos no total, e cada um listando 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
Recupere o nome do bucket de saída:
gcloud storage ls
A saída será assim:
gs://PROJECT_ID-job-primegen-TIMESTAMP/
Liste os objetos no bucket de saída.
gcloud storage ls gs://PROJECT_ID-job-primegen-TIMESTAMP/** --recursive
Substitua
TIMESTAMP
pelo carimbo de data/hora retornado pelo comando anterior.A saída será semelhante à seguinte, com seis arquivos no total, e cada um listando 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 você criou um novo projeto para este tutorial, exclua o projeto. Se você usou um projeto atual e quer mantê-lo sem as alterações incluídas neste tutorial, exclua os recursos criados para o tutorial.
Exclua o projeto
O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.
Para excluir 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.
Excluir os recursos criados neste tutorial
Exclua o job em lote:
Primeiro, extraia o nome do job:
gcloud batch jobs list --location=us-central1
A saída será semelhante a esta:
NAME: projects/project-name/locations/us-central1/jobs/job-primegen-TIMESTAMP STATE: SUCCEEDED
Em que
job-primegen-TIMESTAMP
é o nome do job em lote.Exclua o job:
gcloud batch jobs delete BATCH_JOB_NAME --location us-central1
Exclua o fluxo de trabalho:
gcloud workflows delete WORKFLOW_NAME
Exclua o repositório de contêineres:
gcloud artifacts repositories delete REPOSITORY_NAME --location=us-central1
O Cloud Build usa o Cloud Storage para armazenar recursos de build. Para excluir um bucket do Cloud Storage, consulte Excluir buckets.