Os fluxos de trabalho permitem-lhe executar tarefas do Cloud Run como parte de um fluxo de trabalho para realizar um tratamento de dados mais complexo ou orquestrar um sistema de tarefas existentes.
Este tutorial demonstra como usar os Workflows para executar uma tarefa do Cloud Run que processa dados transmitidos como variáveis de ambiente para a tarefa, em resposta a um evento do Cloud Storage.
Tenha em atenção que também pode armazenar os dados de eventos num contentor do Cloud Storage, o que lhe permite encriptar os dados através de chaves de encriptação geridas pelo cliente. Para mais informações, consulte o artigo Execute uma tarefa do Cloud Run que processe dados de eventos guardados no Cloud Storage.
Crie uma tarefa do Cloud Run
Este tutorial usa uma tarefa de exemplo do Cloud Run do GitHub. A tarefa lê dados de um ficheiro de entrada no Cloud Storage e realiza algum processamento arbitrário para cada linha no ficheiro.
Obtenha o exemplo de código clonando o repositório da app de exemplo para o seu computador local:
git clone https://github.com/GoogleCloudPlatform/jobs-demos.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.
Altere para o diretório que contém o código de exemplo:
cd jobs-demos/parallel-processing
Crie um contentor do Cloud Storage para armazenar um ficheiro de entrada que possa ser escrito e acionar um evento:
Consola
- Na Google Cloud consola, aceda à página Recipientes do Cloud Storage.
- Clique em adicionar Criar.
- Na página Criar um contentor, introduza um nome para o contentor:
Substituainput-PROJECT_ID
PROJECT_ID
pelo ID do seu Google Cloud projeto. - Mantenha as outras predefinições.
- Clique em Criar.
gcloud
Execute o comando
gcloud storage buckets create
:gcloud storage buckets create gs://input-PROJECT_ID
Se o pedido for bem-sucedido, o comando devolve a seguinte mensagem:
Creating gs://input-PROJECT_ID/...
Terraform
Para criar um contentor do Cloud Storage, use o recurso
google_storage_bucket
e modifique o ficheiromain.tf
, conforme mostrado no exemplo seguinte.Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.
Tenha em atenção que, num fluxo de trabalho típico do Terraform, aplica todo o plano de uma só vez. No entanto, para efeitos deste tutorial, pode segmentar um recurso específico. Por exemplo:
terraform apply -target="random_id.bucket_name_suffix"
e
terraform apply -target="google_storage_bucket.default"
- Na Google Cloud consola, aceda à página Recipientes do Cloud Storage.
Crie um repositório padrão do Artifact Registry onde pode armazenar a sua imagem de contentor:
Consola
Na Google Cloud consola, aceda à página do Artifact Registry Repositórios:
Clique em
Criar repositório.Introduza um nome para o repositório, por exemplo,
my-repo
. Para cada localização do repositório num projeto, os nomes dos repositórios têm de ser exclusivos.Mantenha o formato predefinido, que deve ser Docker.
Mantenha o modo predefinido, que deve ser Padrão.
Para a região, selecione us-central1 (Iowa).
Manter todas as outras predefiniçõ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 localização do repositório num projeto, os nomes dos repositórios têm de ser exclusivos.Terraform
Para criar um repositório do Artifact Registry, use o recurso
google_artifact_registry_repository
e modifique o ficheiromain.tf
, conforme mostrado no exemplo seguinte.Tenha em atenção que, num fluxo de trabalho típico do Terraform, aplica todo o plano de uma só vez. No entanto, para os fins deste tutorial, pode segmentar um recurso específico. Por exemplo:
terraform apply -target="google_artifact_registry_repository.default"
Crie a imagem de contentor com um Google Cloud buildpack predefinido:
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 seu repositório do Artifact Registry.A compilação pode demorar alguns minutos a ser concluída.
Crie uma tarefa do Cloud Run que implemente a imagem de contentor:
Consola
Na Google Cloud consola, aceda à página Cloud Run:
Clique em Criar tarefa para apresentar o formulário Criar tarefa.
- No formulário, selecione
us-central1-docker.pkg.dev/PROJECT_ID/REPOSITORY/parallel-job:latest
como o URL da imagem do contentor do Artifact Registry. - Opcional: para o nome do trabalho, introduza
parallel-job
. - Opcional: para a região, selecione us-central1 (Iowa).
- Para o número de tarefas que quer executar no trabalho, introduza
10
. Todas as tarefas têm de ser bem-sucedidas para que o trabalho seja bem-sucedido. Por predefinição, as tarefas são executadas em paralelo.
- No formulário, selecione
Expanda a secção Contentor, variáveis e segredos, ligações, segurança e mantenha todas as predefinições, exceto as seguintes definições:
Clique no separador Geral.
- Para o comando de contentor, introduza
python
. - Para o argumento do contentor, introduza
process.py
.
- Para o comando de contentor, introduza
Clique no separador Variáveis e segredos.
- Clique em Adicionar variável e introduza
INPUT_BUCKET
para o nome einput-PROJECT_ID
para o valor. - Clique em Adicionar variável e introduza
INPUT_FILE
para o nome einput_file.txt
para o valor.
- Clique em Adicionar variável e introduza
Para criar a tarefa, clique em Criar.
gcloud
Defina a região predefinida do Cloud Run:
gcloud config set run/region us-central1
Crie a tarefa 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
Tenha em atenção que, se não especificar uma etiqueta de imagem, o Artifact Registry procura a imagem com a etiqueta
latest
predefinida.Para ver uma lista completa das opções disponíveis quando cria uma tarefa, consulte a documentação da linha de comandos do gcloud run jobs create.
Quando a tarefa for criada, deve ver uma mensagem a indicar que foi bem-sucedida.
Terraform
Para criar uma tarefa do Cloud Run, use o recurso
google_cloud_run_v2_job
e modifique o ficheiromain.tf
, conforme mostrado no exemplo seguinte.Tenha em atenção que, num fluxo de trabalho típico do Terraform, aplica todo o plano de uma só vez. No entanto, para os fins deste tutorial, pode segmentar um recurso específico. Por exemplo:
terraform apply -target="google_cloud_run_v2_job.default"
Implemente um fluxo de trabalho que execute a tarefa do Cloud Run
Defina e implemente um fluxo de trabalho que execute a tarefa do Cloud Run que acabou de criar. Uma definição de fluxo de trabalho é composta por uma série de passos descritos através da sintaxe do Workflows.
Consola
Na Google Cloud consola, aceda à página Fluxos de trabalho:
Clique em
Criar.Introduza um nome para o novo fluxo de trabalho, como
cloud-run-job-workflow
.Para a região, selecione us-central1 (Iowa).
No campo Conta de serviço, selecione a conta de serviço que criou anteriormente.
A conta de serviço funciona como a identidade do fluxo de trabalho. Já deve ter concedido a função Administrador do Cloud Run à conta de serviço para que o fluxo de trabalho possa executar a tarefa do Cloud Run.
Clicar em Seguinte.
No editor de fluxos de trabalho, introduza a seguinte definição para o seu fluxo de trabalho:
Clique em Implementar.
gcloud
Crie um ficheiro de código-fonte para o seu fluxo de trabalho:
touch cloud-run-job-workflow.yaml
Copie a seguinte definição do fluxo de trabalho para o ficheiro de código-fonte:
Implemente o fluxo de trabalho introduzindo 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 o seguinte:
SERVICE_ACCOUNT_NAME
: o nome da conta de serviço que criou anteriormentePROJECT_ID
: o ID do seu Google Cloud projeto
A conta de serviço funciona como a identidade do fluxo de trabalho. Já deve ter concedido a função
roles/run.admin
à conta de serviço para que o fluxo de trabalho possa executar a tarefa do Cloud Run.
Terraform
Para criar um fluxo de trabalho, use o recurso google_workflows_workflow
e modifique o ficheiro main.tf
, conforme mostrado no exemplo seguinte.
Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.
Tenha em atenção que, num fluxo de trabalho típico do Terraform, aplica todo o plano de uma só vez. No entanto, para os fins deste tutorial, pode segmentar um recurso específico. Por exemplo:
terraform apply -target="google_workflows_workflow.default"
O fluxo de trabalho faz o seguinte:
init
: aceita um evento do Cloud Storage como argumento e, em seguida, define as variáveis necessárias.check_input_file
: verifica se o contentor do Cloud Storage especificado no evento é o contentor usado pela tarefa do Cloud Run.- Em caso afirmativo, o fluxo de trabalho avança para o passo
run_job
. - Se não, o fluxo de trabalho termina, interrompendo qualquer processamento adicional.
- Em caso afirmativo, o fluxo de trabalho avança para o passo
run_job
passo: usa o métodogoogleapis.run.v1.namespaces.jobs.run
do conector da API Cloud Run Admin para executar a tarefa. O contentor do Cloud Storage e os nomes dos ficheiros de dados são transmitidos como variáveis de substituição do fluxo de trabalho para a tarefa.Passo
finish
: devolve informações sobre a execução da tarefa como resultado do fluxo de trabalho.
Crie um acionador do Eventarc para o fluxo de trabalho
Para executar automaticamente o fluxo de trabalho e, por sua vez, a tarefa do Cloud Run sempre que o ficheiro de dados de entrada for atualizado, crie um acionador do Eventarc que responda a eventos do Cloud Storage no contentor que contém o ficheiro de dados de entrada.
Consola
Na Google Cloud consola, aceda à 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 secção Acionadores, clique em Adicionar novo acionador > Eventarc.
É aberto o painel Acionador do Eventarc.
No campo Nome do acionador, introduza um nome para o acionador, como
cloud-run-job-workflow-trigger
.Na lista Fornecedor de eventos, selecione Cloud Storage.
Na lista Evento, selecione google.cloud.storage.object.v1.finalized.
No campo Recipiente, selecione o recipiente que contém o ficheiro de dados de entrada. O nome do contentor tem o formato
input-PROJECT_ID
.No campo Conta de serviço, selecione a conta de serviço que criou anteriormente.
A conta de serviço funciona como a identidade do acionador. Já deve ter concedido as seguintes funções à conta de serviço:
- Eventarc Event Receiver: para receber eventos
- Workflows Invoker: para executar fluxos de trabalho
Clique em Guardar acionador.
O acionador do Eventarc aparece agora na secção Acionadores na página Editar fluxo de trabalho.
Clicar em Seguinte.
Clique em Implementar.
gcloud
Crie um acionador 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 o seguinte:
PROJECT_ID
: o ID do seu Google Cloud projetoSERVICE_ACCOUNT_NAME
: o nome da conta de serviço que criou anteriormente.
A conta de serviço funciona como a identidade do acionador. Já deve ter concedido as seguintes funções à conta de serviço:
roles/eventarc.eventReceiver
: para receber eventosroles/workflows.invoker
: para executar fluxos de trabalho
Terraform
Para criar um acionador, use o recurso google_eventarc_trigger
e modifique o ficheiro main.tf
, conforme mostrado no exemplo seguinte.
Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.
Tenha em atenção que, num fluxo de trabalho típico do Terraform, aplica todo o plano de uma só vez. No entanto, para os fins deste tutorial, pode segmentar um recurso específico. Por exemplo:
terraform apply -target="google_eventarc_trigger.default"
Sempre que um ficheiro é carregado ou substituído no contentor do Cloud Storage que contém o ficheiro de dados de entrada, o fluxo de trabalho é executado com o evento do Cloud Storage correspondente como argumento.
Acione o fluxo de trabalho
Teste o sistema ponto a ponto atualizando o ficheiro de dados de entrada no Google Cloud Storage.
Gere novos dados para o ficheiro de entrada e carregue-os para o Cloud Storage na localização esperada pela tarefa 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 criou um contentor do Cloud Storage com o Terraform, pode obter o nome do contentor executando o seguinte comando:
gcloud storage buckets list gs://input*
A tarefa do Cloud Run pode demorar alguns minutos a ser executada.
Confirme que a tarefa do Cloud Run foi executada conforme esperado, consultando as execuções da tarefa:
gcloud config set run/region us-central1 gcloud run jobs executions list --job=parallel-job
Deverá ver uma execução bem-sucedida da tarefa no resultado, o que indica que
10/10
tarefas foram concluídas.
Saiba como acionar um fluxo de trabalho com eventos ou mensagens do Pub/Sub.