O Batch é um serviço totalmente gerenciado que permite programar, enfileirar e executar processamento em lote em instâncias de máquina virtual (VM) do Compute Engine. O Batch provisiona recursos e gerencia a capacidade permitindo que suas cargas de trabalho em lote sejam executadas em escala.
O Workflows permite que você execute os serviços que precisa em uma ordem que você define e descreve com o uso do Sintaxe de fluxos de trabalho.
Neste tutorial, você vai usar a Conector de fluxos de trabalho para Batch programar e executar um job em lote que executa seis tarefas em paralelo em duas VMs do Compute Engine. Como usar o Batch e o Workflows permite combinar as vantagens que eles oferecem e provisionar e orquestrar com eficiência todo o processo.
Objetivos
Neste tutorial, você aprenderá a:- Criar um repositório do Artifact Registry para uma imagem de contêiner do Docker.
- Receba o código da carga de trabalho de processamento em lote no GitHub: um exemplo de programa 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 da principal gerador de números.
- programa e executa um job em lote que executa o Docker em contêineres como seis tarefas em paralelo em duas VMs do Compute Engine.
- Opcionalmente, exclui o job do Batch após a conclusão.
- Confirme se os resultados são os esperados e se os lotes de números primos 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 Google Cloud CLI no seu 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 do Google Cloud.
Console
No Console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
Verifique se a cobrança está ativada para o seu projeto do Google Cloud. Saiba como verificar se o faturamento está ativado em um projeto.
Ative as APIs Artifact Registry, Batch, Cloud Build Compute Engine, execuções de fluxo de trabalho e APIs Workflows.
Crie uma conta de serviço para seu fluxo de trabalho usar na autenticação com outros serviços do Google Cloud e conceder a ele os papéis apropriados:
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 um papel, filtre os seguintes papéis para conceder para a conta de serviço gerenciado 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 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 de serviço para a conta de serviço gerenciado pelo usuário etapa. Depois de ativar a API Compute Engine, a conta de serviço padrão é a conta de serviço padrão do Compute Engine (
PROJECT_NUMBER-compute@developer.gserviceaccount.com
), e a permissão é normalmente atribuída pela papelroles/iam.serviceAccountUser
.Na página Contas de serviço, clique no endereço de e-mail do conta de serviço padrão (
PROJECT_NUMBER-compute@developer.gserviceaccount.com
).Clique na guia Permissões.
Clique no botão
Conceder acesso.Para adicionar um novo principal, insira o endereço de e-mail da sua conta de serviço (
SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
).Na lista Selecionar papel, escolha as Contas de serviço. > Usuário da conta de serviço.
Clique em Salvar.
gcloud
No Console do Google Cloud, ative o Cloud Shell.
Na parte inferior do Console do Google Cloud, uma sessão do Cloud Shell é iniciada e exibe um prompt de linha de comando. O Cloud Shell é um ambiente shell com a CLI do Google Cloud já instalada e com valores já definidos para o projeto atual. A inicialização da sessão pode levar alguns segundos.
Verifique se a cobrança está ativada para o seu projeto do Google Cloud. Saiba como verificar se o faturamento está ativado em um projeto.
Ative as APIs Artifact Registry, Batch, Cloud Build Execuções de fluxo de trabalho do Compute Engine e APIs 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 seu fluxo de trabalho usar na autenticação com outros serviços do Google Cloud e conceder a ele os papéis apropriados.
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 gerenciado pelo usuário que você criou etapa anterior. Execute o seguinte comando uma vez 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 de serviço para a conta de serviço gerenciado pelo usuário etapa anterior. Depois de ativar a API Compute Engine, o serviço padrão é a conta de serviço padrão do Compute Engine (
PROJECT_NUMBER-compute@developer.gserviceaccount.com
), e a permissão é normalmente atribuída pela 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 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
no
us-central1
região. Para mais informações sobre as regiões compatíveis, consulte
Locais do Artifact Registry.
Acessar os exemplos de código
O Google Cloud armazena o código-fonte do aplicativo para este tutorial em o GitHub. Clone esse repositório ou faça o download das amostras.
Clone o repositório do app de amostra na máquina local:
git clone https://github.com/GoogleCloudPlatform/batch-samples.git
Também é possível faça o download das amostras no arquivo
main.zip
e extraí-lo.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 seu ambiente de desenvolvimento.
crie a imagem Docker usando o Cloud Build
O Dockerfile
contém as informações necessárias para criar uma imagem Docker.
usando o Cloud Build. Execute o seguinte comando para criá-lo:
gcloud builds submit \
-t us-central1-docker.pkg.dev/PROJECT_ID/containers/primegen-service:v1 PrimeGenService/
Substitua o PROJECT_ID
pelo ID do projeto do Google Cloud.
Quando o build for concluído, você verá uma resposta 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 Docker chamada primegen-service
e
enviou a imagem para um repositório do Artifact Registry chamado containers
.
Implantar um fluxo de trabalho que programa e executa um job em lote
O fluxo de trabalho a seguir programa e executa um job em lote que é executado um contêiner do Docker como seis tarefas paralelamente em duas VMs do Compute Engine. O resultante é a geração de seis lotes de números primos, armazenados em um do 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 Next.
No editor de fluxo de trabalho, insira a seguinte definição para seu fluxo de trabalho:
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 fluxo de trabalho a seguir 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 do a 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 batch-workflow para acessar a página de detalhes.
Na página Detalhes do fluxo de trabalho, clique em play_arrow Execução.
Clique em Executar novamente.
A execução do fluxo de trabalho leva alguns minutos.
Veja 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.
Você pode Verificar o status de uma execução de longa duração.
Para saber o status da última execução concluída, execute este comando: 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
Você pode confirmar que os resultados são os esperados listando os objetos em seu 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 mostrados a seguir, com seis arquivos no total, e cada 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
O resultado 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 por o comando anterior.A saída será semelhante a esta, com seis arquivos no total, e cada 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:
- No Console do Google Cloud, acesse a página Gerenciar recursos.
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
- Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.
Excluir recursos criados neste tutorial
Exclua o job no Batch:
Primeiro recupere 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 lote trabalho.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 do contêiner:
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 Exclua buckets.