Cloud Batch — Parte 2 — Executando Containers

Bruno Patrocinio
google-cloud-brasil
4 min readApr 19, 2023

Para esse e outros tutoriais do Google Cloud, você pode criar uma conta e receber US$ 300 em créditos para aprender e praticar! Saiba mais neste guia.

Google Cloud Batch

Introdução

Em nosso primeiro artigo sobre Cloud Batch, você aprendeu o básico do serviço: como criar e executar um script em uma VM.

Porém em nosso dia-a-dia, é comum trabalharmos em containers, que nos beneficia de várias formas, como por exemplo:

  • Flexibilidade e/ou portabilidade;
  • Redução de custos;
  • Velocidade;
  • Eficiência;
  • Segurança,
  • Facilidade de gestão;
  • Isolamento de falhas entre outros.

Felizmente o Batch tem suporte nativo para executar containers sob demanda e/ou como uma tarefa agendada.

Bora praticar?

Hoje você irá executar um container gerador de números primos a partir de um job do Batch.

Iremos executar todos os passos utilizando o próprio Cloud Shell dentro do console do Google Cloud.

Cloud Shell é um ambiente de desenvolvimento e operações on-line acessível pelo navegador em qualquer lugar.

É possível gerenciar os recursos com este terminal on-line pré-carregado com utilitários como a ferramenta de linha de comando gcloud, kubectl e muito mais.

Você também pode desenvolver, criar, depurar e implantar aplicativos nativos da nuvem usando o Editor do Cloud Shell on-line.

Para ativá-lo, basta clicar no ícone do cloud shell no canto superior direito.

Após o shell ser disponibilizado, a primeira atividade é criar um novo projeto, pois ao final desse tutorial, e se quisermos, podemos remover todos os recursos de uma só vez.

Para criar um novo projeto vamos utilizar o seguinte comando:

gcloud projects create [PROJECT_ID]

Substitua o [PROJECT_ID] por um de sua preferência, ele será o mesmo utilizado pelo resto deste artigo.

Para alterar o projeto default do gcloud, execute:

gcloud config set project [PROJECT_ID]

Um ponto importante: Garanta que o billing está ativo para o projeto. Saiba como verificar se o billing está ativo no projeto e caso não esteja, saiba como ativa-lo.

Ativando as APIs

Precisamos ativar as apis:

  • Artifact Registry — para armazenar nosso container
  • Cloud Build — para buildar o container e armazenar no registry
  • Batch — para executar o container
gcloud services enable \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com\
batch.googleapis.com

Preparando o ambiente

Os arquivos e scripts que vamos utilizar a partir de agora, estão neste repositório:

https://github.com/GoogleCloudPlatform/batch-samples

Vamos copiá-los para dentro do cloud shell:

git clone https://github.com/GoogleCloudPlatform/batch-samples
cd primegen

Agora já podemos criar o repositório para armazenar a imagem:

gcloud artifacts repositories create containers --repository-format=docker \
--location=us-central

Após o fim da criação do repositório, utilizaremos o Build para criar o container e enviar para o repositório:

gcloud builds submit -t \
us-central1-docker.pkg.dev/[PROJECT_ID]/containers/primegen-service PrimeGenService/

Vamos criar um novo bucket onde iremos armazenar os resultados do job. Altere [BUCKET_NAME] para um nome de sua preferência.

gcloud storage buckets create gs://[BUCKET_NAME]

Tudo pronto, agora podemos focar no Batch!

Hora do Job!

Vamos criar o job que irá executar um container calculando 60 mil números primos e salvar em arquivos .txt dentro de um bucket.

Iremos utilizar as seguintes especificações para esta task:

  • Vamos executar o container que foi buildado na etapa anterior como tarefa
  • Vamos informar a variável de ambiente BUCKET como o valor [BUCKET_NAME]
  • Serão 6 tasks com esta especificação
  • Batch deverá executar no máximo duas tasks simultaneamente

Seu arquivo job.json* ficará assim:

{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"container": {
"imageUri": "us-central1-docker.pkg.dev/[PROJECT_ID]/containers/primegen-service"
},
"environment": {
"variables": {
"BUCKET": [BUCKET_NAME]
}
}
}
]
},
"taskCount": 6,
"parallelism": 2
}
]
}

Para enviar o job, basta executar:

gcloud beta batch jobs submit primegen - location=us-central1 - config=job.json

Verificando os arquivos processados

Após executar o container, o job armazenou os arquivos no Cloud Storage. Copie todos os objetos com o seguinte comando:

gsutil cp gs://[BUCKET_NAME]/*.txt .

Para visualizar uma amostra do conteúdo dos arquivos, execute:

head primes-1–10000.txt
2
3
5
7
11
13
17
19
23
29

Também é possível visualizar os arquivos via Console.

Deletando um job

Para deletar o job basta executar o seguinte comando:

gcloud beta batch jobs delete primegen - location=us-central1

Limpando tudo

O Batch automaticamente deleta as instâncias que criou para executar os jobs automaticamente, porém você ainda pode ser cobrado pelos arquivos que estiverem armazenados no Cloud Storage.

Por este motivo, iremos deletar o projeto para evitar quaisquer custos adicionais.

gcloud projects delete [PROJECT_ID]

Recap

Então é isso pessoal! Neste post você aprendeu como executar containers a partir de um job no Batch. Parabéns!

Este é um pequeno exemplo de como a versatilidade de executar containers com o Batch pode facilitar e otimizar os fluxos de trabalho.

Convido vocês a substituir algum processo assíncrono nos seus ambientes de testes pelo Cloud Batch, para testá-lo na prática e ver como ele pode ajudar no dia-a-dia.

Nos próximos posts desta série iremos abordar ainda:

  • Como adicionar GPU a um job
  • Como utilizar o Cloud Batch para HPC
  • Como agendar uma execução de job
  • Como orquestrar jobs via eventos como Cloud Workflows
  • Como provisionar tudo isso via Infra as a Code

Um abraço e até láaaaa!

--

--