Com o Workflows, é possível executar jobs do Cloud Run como parte de um fluxo de trabalho para realizar processamentos de dados mais complexos ou orquestrar um sistema de jobs atuais.
Neste tutorial, mostramos como usar o Workflows para executar um job do Cloud Run que processa dados transmitidos como variáveis de ambiente para o job, em resposta a um evento do Cloud Storage.
Também é possível armazenar os dados de eventos em um bucket do Cloud Storage, o que permite criptografar os dados usando chaves de criptografia gerenciadas pelo cliente. Para mais informações, consulte Executar um job do Cloud Run que processa dados de eventos salvos no Cloud Storage.
Criar um job do Cloud Run
Este tutorial usa um exemplo de job do Cloud Run do GitHub. O job lê dados de um arquivo de entrada no Cloud Storage e realiza algum processamento arbitrário para cada linha do arquivo.
Clone o repositório do app de amostra na máquina local para acessar o código de exemplo:
git clone https://github.com/GoogleCloudPlatform/jobs-demos.git
Outra opção é fazer o download da amostra como um arquivo ZIP e extraí-la.
Acesse o diretório que contém o exemplo de código:
cd jobs-demos/parallel-processing
Crie um bucket do Cloud Storage para armazenar um arquivo de entrada que possa ser gravado e acionar um evento:
Console
- No console do Google Cloud , acesse a página Buckets do Cloud Storage.
- Clique em add Create.
- Na página Criar um bucket, insira um nome para o bucket:
Substituainput-PROJECT_ID
PROJECT_ID
pelo ID do seu projeto do Google Cloud . - Mantenha os outros padrões.
- Clique em Criar.
gcloud
Execute o comando
gcloud storage buckets create
:gcloud storage buckets create gs://input-PROJECT_ID
Se a solicitação for bem-sucedida, o comando retornará a seguinte mensagem:
Creating gs://input-PROJECT_ID/...
Terraform
Para criar um bucket do Cloud Storage, use o recurso
google_storage_bucket
e modifique o arquivomain.tf
, conforme mostrado no exemplo a seguir.Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.
Em um fluxo de trabalho típico do Terraform, você aplica todo o plano de uma só vez. No entanto, para os fins deste tutorial, você pode segmentar um recurso específico. Exemplo:
terraform apply -target="random_id.bucket_name_suffix"
e
terraform apply -target="google_storage_bucket.default"
- No console do Google Cloud , acesse a página Buckets do Cloud Storage.
Crie um repositório padrão do Artifact Registry para armazenar a imagem do contêiner:
Console
No console Google Cloud , acesse a página Repositórios do Artifact Registry:
Clique em
Criar repositório.Insira um nome para o repositório, por exemplo,
my-repo
. Para cada local de repositório em um projeto, os nomes dos repositórios precisam ser exclusivos.Mantenha o formato padrão, que deve ser Docker.
Mantenha o modo padrão, que deve ser Padrão.
Em região, selecione us-central1 (Iowa).
Mantenha todos os outros padrões.
Clique em Criar.
gcloud
Execute o comando:
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=us-central1
Substitua
REPOSITORY
por um nome exclusivo para o repositório, por exemplo,my-repo
. Para cada local de repositório em um projeto, os nomes dos repositórios precisam ser exclusivos.Terraform
Para criar um repositório do Artifact Registry, use o recurso
google_artifact_registry_repository
e modifique o arquivomain.tf
, conforme mostrado no exemplo a seguir.Em um fluxo de trabalho típico do Terraform, você aplica todo o plano de uma só vez. No entanto, para os fins deste tutorial, você pode segmentar um recurso específico. Exemplo:
terraform apply -target="google_artifact_registry_repository.default"
Crie a imagem do contêiner usando um buildpack Google Cloud padrão:
export SERVICE_NAME=parallel-job gcloud builds submit \ --pack image=us-central1-docker.pkg.dev/PROJECT_ID/REPOSITORY/${SERVICE_NAME}
Substitua
REPOSITORY
pelo nome do repositório do Artifact Registry.A conclusão do build pode levar alguns minutos.
Crie um job do Cloud Run que implante a imagem do contêiner:
Console
No console Google Cloud , acesse a página do Cloud Run:
Clique em Criar job para exibir o formulário Criar job.
- No formulário, selecione
us-central1-docker.pkg.dev/PROJECT_ID/REPOSITORY/parallel-job:latest
como o URL da imagem do contêiner do Artifact Registry. - Opcional: para o nome do job, insira
parallel-job
. - Opcional: para a região, selecione us-central1 (Iowa).
- Para o número de tarefas que você quer executar no job, digite
10
. Todas as tarefas precisam ser bem-sucedidas para que o job seja concluído. Por padrão, as tarefas são executadas em paralelo.
- No formulário, selecione
Expanda a seção Contêiner, variáveis e secrets, conexões e segurança e mantenha todos os padrões, exceto as seguintes configurações:
Clique na guia Geral.
- Para o comando do contêiner, insira
python
. - Para o argumento do contêiner, insira
process.py
.
- Para o comando do contêiner, insira
Clique na guia Variáveis e secrets.
- Clique em Adicionar variável e insira
INPUT_BUCKET
no nome einput-PROJECT_ID
no valor. - Clique em Adicionar variável e insira
INPUT_FILE
para o nome einput_file.txt
para o valor.
- Clique em Adicionar variável e insira
Para criar o job, clique em Criar.
gcloud
Defina a região padrão do Cloud Run:
gcloud config set run/region us-central1
Crie o job do Cloud Run:
gcloud run jobs create parallel-job \ --image us-central1-docker.pkg.dev/PROJECT_ID/REPOSITORY/parallel-job:latest \ --command python \ --args process.py \ --tasks 10 \ --set-env-vars=INPUT_BUCKET=input-PROJECT_ID,INPUT_FILE=input_file.txt
Se você não especificar uma tag de imagem, o Artifact Registry procurará a imagem com a tag padrão
latest
.Para ver uma lista completa das opções disponíveis ao criar um job, consulte a documentação da linha de comando gcloud run jobs create.
Quando o job for criado, você vai receber uma mensagem indicando que a operação foi concluída.
Terraform
Para criar um job do Cloud Run, use o recurso
google_cloud_run_v2_job
e modifique seu arquivomain.tf
, conforme mostrado no exemplo a seguir.Em um fluxo de trabalho típico do Terraform, você aplica todo o plano de uma só vez. No entanto, para os fins deste tutorial, você pode segmentar um recurso específico. Exemplo:
terraform apply -target="google_cloud_run_v2_job.default"
Implante um fluxo de trabalho que execute o job do Cloud Run
Defina e implante um fluxo de trabalho que execute o job do Cloud Run que você acabou de criar. Uma definição de fluxo de trabalho é composta por uma série de etapas descritas usando a sintaxe do Workflows.
Console
No console Google Cloud , acesse a página Fluxos de trabalho:
Clique em
Criar.Insira um nome para o novo fluxo de trabalho, como
cloud-run-job-workflow
.Em região, selecione us-central1 (Iowa).
No campo Conta de serviço, selecione a conta de serviço que você criou anteriormente.
A conta de serviço serve como a identidade do fluxo de trabalho. Você já deve ter concedido o papel de Administrador do Cloud Run à conta de serviço para que o fluxo de trabalho possa executar o job do Cloud Run.
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 cloud-run-job-workflow.yaml
Copie a seguinte definição de fluxo de trabalho para o arquivo de código-fonte:
Implante o fluxo de trabalho digitando o seguinte comando:
gcloud workflows deploy cloud-run-job-workflow \ --location=us-central1 \ --source=cloud-run-job-workflow.yaml \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Substitua:
SERVICE_ACCOUNT_NAME
: o nome da conta de serviço que você criou antesPROJECT_ID
: o ID do seu projetoGoogle Cloud
A conta de serviço serve como a identidade do fluxo de trabalho. Você já precisa ter concedido o papel
roles/run.admin
à conta de serviço para que o fluxo de trabalho possa executar o job do Cloud Run.
Terraform
Para criar um fluxo de trabalho, use o
recurso google_workflows_workflow
e modifique o arquivo main.tf
, conforme mostrado no exemplo a seguir.
Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.
Em um fluxo de trabalho típico do Terraform, você aplica todo o plano de uma só vez. No entanto, para os fins deste tutorial, você pode segmentar um recurso específico. Exemplo:
terraform apply -target="google_workflows_workflow.default"
O fluxo de trabalho faz o seguinte:
Etapa
init
: aceita um evento do Cloud Storage como argumento e define as variáveis necessárias.Etapa
check_input_file
: verifica se o bucket do Cloud Storage especificado no evento é o mesmo usado pelo job do Cloud Run.- Se a resposta for "sim", o fluxo de trabalho vai para a etapa
run_job
. - Se a resposta for não, o fluxo de trabalho será encerrado, interrompendo qualquer outro processamento.
- Se a resposta for "sim", o fluxo de trabalho vai para a etapa
Etapa
run_job
: usa o métodogoogleapis.run.v1.namespaces.jobs.run
do conector da API Cloud Run Admin para executar o job. Os nomes do bucket do Cloud Storage e do arquivo de dados são transmitidos como variáveis de substituição do fluxo de trabalho para o job.Etapa
finish
: retorna informações sobre a execução do job como resultado do fluxo de trabalho.
Criar um gatilho do Eventarc para o fluxo de trabalho
Para executar automaticamente o fluxo de trabalho e, por sua vez, o job do Cloud Run sempre que o arquivo de dados de entrada for atualizado, crie um gatilho do Eventarc que responda a eventos do Cloud Storage no bucket que contém o arquivo de dados de entrada.
Console
No console Google Cloud , acesse a página Fluxos de trabalho:
Clique no nome do fluxo de trabalho, como
cloud-run-job-workflow
.Na página Detalhes do fluxo de trabalho, clique em
Editar.Na página Editar fluxo de trabalho, na seção Gatilhos, clique em Adicionar novo gatilho > Eventarc.
O painel Gatilho do Eventarc é aberto.
No campo Nome do gatilho, insira um nome para o gatilho, como
cloud-run-job-workflow-trigger
.Na lista Provedor de eventos, selecione Cloud Storage.
Na lista Evento, selecione google.cloud.storage.object.v1.finalized.
No campo Bucket, selecione o bucket que contém o arquivo de dados de entrada. O nome do bucket tem o formato
input-PROJECT_ID
.No campo Conta de serviço, selecione a conta de serviço que você criou anteriormente.
A conta de serviço serve como a identidade do gatilho. Você já precisa ter concedido os seguintes papéis à conta de serviço:
- Receptor de eventos do Eventarc: para receber eventos
- Chamador do Workflows: para executar fluxos de trabalho
Clique em Salvar acionador.
O gatilho do Eventarc agora aparece na seção Gatilhos da página Editar fluxo de trabalho.
Clique em Próxima.
Clique em Implantar.
gcloud
Crie um gatilho do Eventarc executando o seguinte comando:
gcloud eventarc triggers create cloud-run-job-workflow-trigger \ --location=us \ --destination-workflow=cloud-run-job-workflow \ --destination-workflow-location=us-central1 \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=input-PROJECT_ID" \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Substitua:
PROJECT_ID
: o ID do projeto Google CloudSERVICE_ACCOUNT_NAME
: o nome da conta de serviço que você criou anteriormente.
A conta de serviço serve como a identidade do gatilho. Você já precisa ter concedido os seguintes papéis à conta de serviço:
roles/eventarc.eventReceiver
: para receber eventos.roles/workflows.invoker
: para executar fluxos de trabalho
Terraform
Para criar um gatilho, use o
recurso google_eventarc_trigger
e modifique o arquivo main.tf
, conforme mostrado no exemplo a seguir.
Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.
Em um fluxo de trabalho típico do Terraform, você aplica todo o plano de uma só vez. No entanto, para os fins deste tutorial, você pode segmentar um recurso específico. Exemplo:
terraform apply -target="google_eventarc_trigger.default"
Sempre que um arquivo é enviado ou substituído no bucket do Cloud Storage que contém o arquivo de dados de entrada, o fluxo de trabalho é executado com o evento correspondente do Cloud Storage como um argumento.
Acione o fluxo de trabalho
Teste o sistema de ponta a ponta atualizando o arquivo de dados de entrada no Cloud Storage.
Gere novos dados para o arquivo de entrada e faça upload deles para o Cloud Storage no local esperado pelo job do Cloud Run:
base64 /dev/urandom | head -c 100000 >input_file.txt gcloud storage cp input_file.txt gs://input-PROJECT_ID/input_file.txt
Se você criou um bucket do Cloud Storage usando o Terraform, é possível recuperar o nome dele executando o seguinte comando:
gcloud storage buckets list gs://input*
O job do Cloud Run pode levar alguns minutos para ser executado.
Confirme se o job do Cloud Run foi executado conforme esperado. Para isso, confira as execuções do job:
gcloud config set run/region us-central1 gcloud run jobs executions list --job=parallel-job
Você vai ver uma execução de job bem-sucedida na saída, indicando que as tarefas
10/10
foram concluídas.
Saiba mais sobre como acionar um fluxo de trabalho com eventos ou mensagens do Pub/Sub.