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 prevista,
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.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. - Predefina a localização usada neste tutorial:
Substituagcloud config set workflows/location REGION
REGIONpelo fluxo de trabalho location da 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.invokerpara 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 de fluxos de trabalho, que podem ser escritos 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
myFirstWorkflowcomo 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_jsonporyamloujson, 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
Mantenha o método HTTP na predefinição de POST.
Adicione os dois cabeçalhos HTTP seguintes:
- Nome:
Content-Typee valor:application/octet-stream - Nome:
User-Agente 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 (\).
Agora, o seu fluxo de trabalho é 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_IDpelo 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.