Executar um job em lote usando o Workflows (original) (raw)
Descoberta
Começar
Desenvolver
Acionar
Acionar um fluxo de trabalho com um evento ou uma mensagem do Pub/Sub
Conectar
Invocar serviços
- Fazer uma solicitação HTTP
- Invocar um serviço do Google Cloud usando um conector
- Acessar objetos da API Kubernetes usando um conector
- Executar uma tradução em lote usando o conector do Cloud Translation
- Invocar funções do Cloud Run ou o Cloud Run
- Tutorial: usar o Workflows com o Cloud Run e o Cloud Functions
- Executar um job do Cloud Run
- Executar um job do Cloud Run que processa dados de eventos salvos no Cloud Storage
- Executar um job em lote
- Invocar um endpoint particular usando o Diretório de serviços
- Invocar um endpoint protegido pelo Identity-Aware Proxy
- Publicar uma mensagem em um tópico do Pub/Sub
- Programar a execução de um fluxo de trabalho SQL do Dataform
Proteger e controlar o acesso
Monitoramento
Resolver problemas
Exemplos
Executar um job em lote usando o Workflows
O Batch é um serviço totalmente gerenciado que permite programar, enfileirar e executar cargas de trabalho de processamento em loteem 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.
Com o Workflows, é possível executar os serviços necessários na ordem definida por você, descrita usando asintaxe do Workflows.
Neste tutorial, você vai usar o conector do Workflows para o Batch a fim de programar e executar um job em lote do Batch que executa seis tarefas em paralelo em duas VMs do Compute Engine. Usar o Batch e Workflows 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 amostra 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 do Batch que executa o contêiner do Docker como seis tarefas em paralelo em duas VMs do Compute Engine.
- Exclui opcionalmente o job em lote após a conclusão.
- Confirme se os resultados estão como esperado e se os lotes de números primos gerados estão armazenados no Cloud Storage.
É possível executar a maioria dos comandos a seguir no console Google Cloud ou todos eles usando a Google Cloud CLI no terminal ou no Cloud Shell.
Custos
Neste documento, você vai 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, consulteDesenvolver aplicativos em um ambiente restrito de Google Cloud .
Console
- No console do Google Cloud , na página do seletor de projetos, selecione oucrie um projeto do Google Cloud .
Acessar o seletor de projetos - Verifique se o faturamento foi ativado para o projeto Google Cloud . Saiba comoverificar se o faturamento está ativado em um projeto.
- Ative as APIs Artifact Registry, Batch, Cloud Build, Compute Engine, Workflow Executions e Workflows.
Ativar as APIs - Crie uma conta de serviço para que seu fluxo de trabalho use na autenticação com outros Google Cloud serviços e conceda as funções adequadas:
- No console Google Cloud , acesse a página Criar conta de serviço.
Acesse "Criar conta de serviço" - Selecione o projeto.
- No campo Nome da conta de serviço, insira um nome. O Google Cloud console 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 à conta de serviço gerenciado pelo usuário criada 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.
- No console Google Cloud , acesse a página Criar conta de serviço.
- Conceda o papel de usuário da conta de serviço do IAM na conta de serviço padrão à conta de serviço gerenciado pelo usuário criada na etapa anterior. Depois que você ativa 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 geralmente é atribuída pela funçãoroles/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 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 um papel, escolha o papel Contas de serviço > Usuário da conta de serviço.
- Clique em Salvar.
- Na página Contas de serviço, clique no endereço de e-mail da conta de serviço padrão (
gcloud
- No console do Google Cloud , ative o Cloud Shell.
Ativar o Cloud Shell
Na parte de baixo do console 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 o faturamento foi ativado para o projeto Google Cloud . Saiba comoverificar 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 Google Cloud serviços e conceda as funções adequadas.
- Crie a conta de serviço:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
SubstituaSERVICE_ACCOUNT_NAMEpor um nome para a conta de serviço. - Conceda papéis à conta de serviço gerenciado pelo usuário criada 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 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
- Crie a conta de serviço:
- Conceda o papel de usuário da conta de serviço do IAM na conta de serviço padrão à conta de serviço gerenciado pelo usuário criada na etapa anterior. Depois que você ativa 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 geralmente é atribuída pela 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 imagem do contêiner do Docker.
Console
- No console do Google Cloud , acesse a página Repositórios.
Acessar 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 regiões compatíveis, consulteLocais do Artifact Registry.
Acessar os exemplos de código
OGoogle Cloud armazena o código-fonte do aplicativo deste tutorial no GitHub. Você pode clonar esse repositório ou fazer 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 Outra opção é fazer o download das amostras no arquivo main.zip e extraí-las. 2. 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 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 criar o binário:
gcloud builds submit \
-t us-central1-docker.pkg.dev/PROJECT_ID/containers/primegen-service:v1 PrimeGenService/
Substitua PROJECT_ID pelo ID do projeto do Google Cloud.
Quando a build for concluída, 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 a enviou 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 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 Google Cloud , acesse a página Fluxos de trabalho.
Acessar fluxos de trabalho - 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.
- Clique em Próxima.
- No editor de fluxo de trabalho, insira a seguinte definição:
- Clique em Implantar.
gcloud
- Crie um arquivo de código-fonte para seu fluxo de trabalho:
touch batch-workflow.JSON_OR_YAML
SubstituaJSON_OR_YAMLporyamloujson, dependendo do formato do fluxo de trabalho. - Em um editor de texto, copie o seguinte fluxo de trabalho para o arquivo de código-fonte:
- 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
SubstituaSERVICE_ACCOUNT_NAMEpelo 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 Google Cloud , acesse a página Fluxos de trabalho.
Acessar fluxos de trabalho - Na página Fluxos de trabalho, clique no fluxo de trabalhobatch-workflow para acessar a página de detalhes dele.
- Na página Detalhes do fluxo de trabalho, clique emExecutar.
- 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 ver 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 estão conforme o esperado 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.
Acessar buckets - Na lista de buckets, clique no nome do bucket cujo conteúdo você quer visualizar.
Os resultados serão semelhantes a este, 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
SubstituaTIMESTAMPpelo carimbo de data/hora retornado pelo comando anterior.
A saída será semelhante a esta, com seis arquivos no total, 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:
- No console Google Cloud , acesse a página Gerenciar recursos.
Acessar "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 em lote:
- 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 quejob-primegen-TIMESTAMPé o nome do job do Batch. - Exclua o job:
gcloud batch jobs delete BATCH_JOB_NAME --location us-central1
- Primeiro, recupere o nome do job:
- 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, consulteExcluir buckets.
A seguir
- Saiba mais sobre o Batch.
- Saiba mais sobre os fluxos de trabalho.
- Saiba mais sobre os conectores do Workflows.
Exceto em caso de indicação contrária, o conteúdo desta página é licenciado de acordo com a Licença de atribuição 4.0 do Creative Commons, e as amostras de código são licenciadas de acordo com a Licença Apache 2.0. Para mais detalhes, consulte as políticas do site do Google Developers. Java é uma marca registrada da Oracle e/ou afiliadas.
Última atualização 2026-06-17 UTC.