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.

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, implementa-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 duplas na string são ignoradas com barras invertidas (\).

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

  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.