Agende fluxos de trabalho


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

  1. Crie e implemente um fluxo de trabalho que possa receber argumentos de tempo de execução.
  2. 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.

Os novos Google Cloud utilizadores podem ser elegíveis para uma avaliação gratuita.

Antes de começar

  1. Configure o seu ambiente para o Cloud Scheduler, incluindo a criação de uma app do App Engine.
  2. Enable the Workflows API.

    Enable the API

  3. Defina a localização predefinida usada neste tutorial:
      gcloud config set workflows/location REGION
    Substitua REGION pelos fluxos de trabalho suportados location à sua escolha.
  4. Crie uma conta de serviço para os fluxos de trabalho usarem; por exemplo, sa-name.
      gcloud iam service-accounts create sa-name
  5. 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"
  6. Substitua PROJECT_ID pelo ID do seu Google Cloud projeto.
  7. 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"

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

  1. Na Google Cloud consola, aceda à página Fluxos de trabalho:

    Aceda a Fluxos de trabalho

  2. Clique em Criar.

  3. Introduza myFirstWorkflow como nome do novo fluxo de trabalho.

  4. Selecione us-central1 para a região.

  5. Selecione a conta de serviço que criou anteriormente.

  6. Clicar em Seguinte.

  7. 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.

  8. Clique em Implementar.

gcloud

  1. Abra um terminal.
  2. 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.

  3. 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 por yaml ou json, 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

  1. Na Google Cloud consola, aceda à página Cloud Scheduler:

    Aceda ao Cloud Scheduler

  2. Clique em Criar tarefa.

  3. Defina o Nome como my-workflow-job.

  4. Para Frequência, introduza:

    */5 * * * *
    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).

  6. Clique em Continuar.

  7. Para Tipo de destino, selecione HTTP.

  8. Para URL, introduza:

    https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/workflows/myFirstWorkflow/executions
    

  9. Deixe o método HTTP na predefinição de POST.

  10. Adicione os dois cabeçalhos HTTP seguintes:

    • Nome: Content-Type e valor: application/octet-stream
    • Nome: User-Agent e valor: Google-Cloud-Scheduler
  11. 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 (\).

  12. Para Cabeçalho de autorização, selecione Adicionar token OAuth.

  13. Introduza a conta de serviço que criou anteriormente.

    sa-name@PROJECT_ID.iam.gserviceaccount.com
    
    Não tem de especificar o Âmbito, uma vez que é usado o valor predefinido de https://www.googleapis.com/auth/cloud-platform.

  14. 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

  1. Na Google Cloud consola, aceda à página Cloud Scheduler:

    Aceda ao Cloud Scheduler

    Se o trabalho não for apresentado, pode ter de atualizar a página.

  2. Para a tarefa com o nome my-workflow-job, clique em Executar agora.

    O valor do Resultado deve ser atualizado para Êxito.

  3. Na Google Cloud consola, aceda à página Fluxos de trabalho:

    Aceda a Fluxos de trabalho

  4. 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.

  5. 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

  1. Execute a tarefa do Cloud Scheduler para executar o fluxo de trabalho:

    gcloud scheduler jobs run my-workflow-job
    
  2. 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
  3. 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:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Elimine a tarefa do Cloud Scheduler

  1. Aceda à página Cloud Scheduler na Google Cloud consola.

    Aceda ao Cloud Scheduler

  2. Selecione a caixa de verificação junto ao seu trabalho.

  3. Clique em Eliminar na parte superior da página e confirme a eliminação.

Elimine o fluxo de trabalho do Workflows

  1. Aceda à página Fluxos de trabalho na Google Cloud consola.

    Aceda a Fluxos de trabalho

  2. Selecione o fluxo de trabalho.

  3. 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.

  1. Aceda à página Definições da aplicação na Google Cloud consola.

    Aceda às Definições de aplicações

  2. Clique em Desativar aplicação.

  3. Siga as instruções.

O que se segue?