Este tutorial mostra como usar o Cloud Scheduler para executar automaticamente fluxos de trabalho, de modo que um fluxo de trabalho seja executado num horário específico, neste caso, a cada 5 minutos.
Objetivos
- Crie e implemente um fluxo de trabalho que possa receber argumentos de tempo de execução.
- Crie uma tarefa do Cloud Scheduler que acione o fluxo de trabalho e o execute a cada 5 minutos, transmitindo argumentos JSON no formato correto.
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custos com base na sua utilização projetada,
use a calculadora de preços.
Antes de começar
- Configure o seu ambiente para o Cloud Scheduler, incluindo a criação de uma app do App Engine.
-
Enable the Workflows API.
- Defina a localização predefinida usada neste tutorial:
Substituagcloud config set workflows/location REGION
REGION
pelos fluxos de trabalho suportados location à sua escolha. - Crie uma conta de serviço para os fluxos de trabalho usarem; por exemplo,
sa-name
.gcloud iam service-accounts create sa-name
- Conceda à sua conta de serviço a função
workflows.invoker
para que a conta tenha autorização para acionar o seu fluxo de trabalho:gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:sa-name@PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/workflows.invoker"
Substitua - Conceda a função
logging.logWriter
à conta de serviço.gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:sa-name@PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/logging.logWriter"
PROJECT_ID
pelo ID do seu Google Cloud projeto.
Crie um fluxo de trabalho que receba argumentos de tempo de execução
Uma definição de fluxo de trabalho é composta por uma série de passos descritos através da sintaxe do Workflows, que pode ser escrita no formato YAML ou JSON. Depois de criar um fluxo de trabalho, implemente-o para o tornar disponível para execução.
Consola
Na Google Cloud consola, aceda à página Fluxos de trabalho:
Clique em Criar.
Introduza
myFirstWorkflow
como nome do novo fluxo de trabalho.Selecione us-central1 para a região.
Selecione a conta de serviço que criou anteriormente.
Clicar em Seguinte.
No editor de fluxos de trabalho, introduza a seguinte definição para o seu fluxo de trabalho.
YAML
main: params: [args] steps: - step1: assign: - outputVar: ${"Hello, " + args.firstName + " " + args.lastName + "!"} - step2: return: ${outputVar}
JSON
{ "main": { "params": [ "args" ], "steps": [ { "step1": { "assign": [ { "outputVar": "${\"Hello \" + args.firstName + \" \" + args.lastName}" } ] } }, { "step2": { "return": "${outputVar}" } } ] } }
Este fluxo de trabalho devolve uma saudação "Olá" a uma pessoa cujo nome próprio e apelido transmite como argumentos de tempo de execução.
Clique em Implementar.
gcloud
- Abra um terminal.
Guarde a seguinte definição do fluxo de trabalho como um ficheiro YAML ou JSON, como myFirstWorkflow.yaml ou myFirstWorkflow.json.
YAML
main: params: [args] steps: - step1: assign: - outputVar: ${"Hello, " + args.firstName + " " + args.lastName + "!"} - step2: return: ${outputVar}
JSON
{ "main": { "params": [ "args" ], "steps": [ { "step1": { "assign": [ { "outputVar": "${\"Hello \" + args.firstName + \" \" + args.lastName}" } ] } }, { "step2": { "return": "${outputVar}" } } ] } }
Este fluxo de trabalho devolve uma saudação "Olá" a uma pessoa cujo nome próprio e apelido transmite como argumentos de tempo de execução.
Implemente o fluxo de trabalho introduzindo o seguinte comando:
gcloud workflows deploy myFirstWorkflow \ --source=myFirstWorkflow.yaml_OR_json \ --service-account=sa-name@PROJECT_ID.iam.gserviceaccount.com
Substitua
yaml_OR_json
poryaml
oujson
, consoante o formato do ficheiro de definição do Workflows que criou anteriormente.
Agende o fluxo de trabalho
Crie uma tarefa do Cloud Scheduler que acione o fluxo de trabalho, usando a conta de serviço que criou anteriormente.
Consola
Na Google Cloud consola, aceda à página Cloud Scheduler:
Clique em Criar tarefa.
Defina o Nome como
my-workflow-job
.Para Frequência, introduza:
Esta ação executa a tarefa a cada 5 minutos. O intervalo é definido através do formato unix-cron.*/5 * * * *
Em Fuso horário, selecione um país e um fuso horário.
Por exemplo, selecione Estados Unidos e Los Angeles ou Hora de verão do Pacífico (PDT).
Clique em Continuar.
Para Tipo de destino, selecione HTTP.
Para URL, introduza:
https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/workflows/myFirstWorkflow/executions
Deixe o método HTTP na predefinição de POST.
Adicione os dois cabeçalhos HTTP seguintes:
- Nome:
Content-Type
e valor:application/octet-stream
- Nome:
User-Agent
e valor:Google-Cloud-Scheduler
- Nome:
Para Corpo, introduza:
{"argument": "{\"firstName\":\"Sherlock\", \"lastName\":\"Holmes\"}"}
Isto transmite uma codificação JSON dos argumentos do fluxo de trabalho; neste caso, o nome próprio, "Sherlock", e o apelido, "Holmes". As aspas duplas no interior da string são interpretadas de forma literal através de barras invertidas (\).
Para Cabeçalho de autorização, selecione Adicionar token OAuth.
Introduza a conta de serviço que criou anteriormente.
Não tem de especificar o Âmbito, uma vez que é usado o valor predefinido desa-name@PROJECT_ID.iam.gserviceaccount.com
https://www.googleapis.com/auth/cloud-platform
.Aceite todas as outras predefinições e clique em Criar.
gcloud
Agende uma tarefa denominada my-workflow-job
introduzindo o seguinte comando:
gcloud scheduler jobs create http my-workflow-job \ --schedule="*/5 * * * *" \ --uri="https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/workflows/myFirstWorkflow/executions" \ --message-body="{\"argument\": \"{\\\"firstName\\\":\\\"Sherlock\\\", \\\"lastName\\\":\\\"Holmes\\\"}\"}" \ --time-zone="America/Los_Angeles" \ --oauth-service-account-email="sa-name@PROJECT_ID.iam.gserviceaccount.com"
O intervalo é definido através do formato unix-cron.
A flag message-body
é usada para transmitir uma codificação JSON dos argumentos do fluxo de trabalho; neste caso, o nome próprio "Sherlock" e o apelido "Holmes". As aspas dentro da string são ignoradas
com barras invertidas (\).
O fluxo de trabalho é agora executado a cada 5 minutos.
Para mais informações sobre as flags gcloud scheduler
, bem como sobre como aplicar o registo de chamadas para que cada passo de chamada durante a execução do fluxo de trabalho seja registado, consulte o artigo Agende um fluxo de trabalho e a gcloud
referência.
Execute a tarefa e valide os resultados
Consola
Na Google Cloud consola, aceda à página Cloud Scheduler:
Se o trabalho não for apresentado, pode ter de atualizar a página.
Para a tarefa com o nome
my-workflow-job
, clique em Executar agora.O valor do Resultado deve ser atualizado para Êxito.
Na Google Cloud consola, aceda à página Fluxos de trabalho:
Na lista de fluxos de trabalho, clique em myFirstWorkflow para abrir a respetiva página de detalhes.
O estado de execução do fluxo de trabalho deve ser Succeeded.
Clique no ID de execução do fluxo de trabalho para abrir a página de detalhes e ver os resultados do fluxo de trabalho no painel de saída.
O resultado deve ser "Olá, Sherlock Holmes!".
gcloud
Execute a tarefa do Cloud Scheduler para executar o fluxo de trabalho:
gcloud scheduler jobs run my-workflow-job
Recupere o ID de execução do seu fluxo de trabalho:
gcloud workflows executions list myFirstWorkflow
O resultado deve ser semelhante ao seguinte, com o ID de execução em negrito:
projects/316710615161/locations/us-central1/workflows/myFirstWorkflow/executions/138b31e1-f3bb-4ba7-a6da-008d0cb4a320
Obtenha os resultados da execução do fluxo de trabalho:
gcloud workflows executions describe EXECUTION_ID --workflow myFirstWorkflow
Substitua
EXECUTION_ID
pelo ID de execução devolvido no passo anterior.O resultado deve ser semelhante ao seguinte:
argument: '{"firstName":"Sherlock","lastName":"Holmes"}' endTime: '2021-09-09T15:15:00.869350639Z' name: projects/316710615161/locations/us-central1/workflows/myFirstWorkflow/executions/138b31e1-f3bb-4ba7-a6da-008d0cb4a320 result: '"Hello, Sherlock Holmes!"' startTime: '2021-09-09T15:15:00.839175480Z' state: SUCCEEDED workflowRevisionId: 000001-4f9
Parabéns! Criou com êxito uma tarefa do Cloud Scheduler que executa automaticamente um fluxo de trabalho num horário específico.
Limpar
Depois de concluir o tutorial, pode limpar os recursos que criou para que deixem de usar a quota e incorrer em custos. As secções seguintes descrevem como eliminar ou desativar estes recursos.
Elimine o projeto
A forma mais fácil de eliminar a faturação é eliminar o projeto que criou para o tutorial.
Para eliminar o projeto:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Elimine a tarefa do Cloud Scheduler
Aceda à página Cloud Scheduler na Google Cloud consola.
Selecione a caixa de verificação junto ao seu trabalho.
Clique em Eliminar na parte superior da página e confirme a eliminação.
Elimine o fluxo de trabalho do Workflows
Aceda à página Fluxos de trabalho na Google Cloud consola.
Selecione o fluxo de trabalho.
Clique em Eliminar na parte superior da página, escreva o nome do fluxo de trabalho e confirme a eliminação.
Desative a app do App Engine
A desativação de uma app do App Engine impede a execução de instâncias e o processamento de pedidos da sua aplicação, ao mesmo tempo que retém as definições e os dados da aplicação.
Aceda à página Definições da aplicação na Google Cloud consola.
Clique em Desativar aplicação.
Siga as instruções.
O que se segue?
- Saiba mais sobre os fluxos de trabalho.