安排工作流

本教程介绍如何使用 Cloud Scheduler 自动执行工作流,以便工作流按特定时间表运行,在本例中,每 5 分钟运行一次。

创建接收运行时参数的工作流

工作流定义由一系列使用 Workflows 语法描述的步骤组成,该语法可以采用 YAML 或 JSON 格式编写。创建工作流后,可以进行部署,使其可以执行。

控制台

  1. 在 Google Cloud 控制台中,前往 Workflows 页面:

    转到 Workflows

  2. 点击创建

  3. 输入 myFirstWorkflow 作为新工作流的名称。

  4. 选择 us-central1 作为区域。

  5. 选择您之前创建的服务账号。

  6. 点击下一步

  7. 在工作流编辑器中,输入工作流的定义。

    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}"
            }
          }
        ]
      }
    }
      

    此工作流向以其运行时参数形式传递其名字和姓氏的用户返回“Hello”问候语。

  8. 点击部署

gcloud

  1. 打开终端。
  2. 将以下工作流定义保存为 YAML 或 JSON 文件,例如 myFirstWorkflow.yamlmyFirstWorkflow.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}"
            }
          }
        ]
      }
    }
      

    此工作流向以其运行时参数形式传递其名字和姓氏的用户返回“Hello”问候语。

  3. 输入以下命令以部署工作流:

    gcloud workflows deploy myFirstWorkflow \
        --source=myFirstWorkflow.yaml_OR_json \
        --service-account=sa-name@PROJECT_ID.iam.gserviceaccount.com

    yaml_OR_json 替换为 yamljson,具体取决于您之前创建的 Workflows 定义文件的格式。

安排工作流

通过使用先前创建的服务账号创建 Cloud Scheduler 作业,以触发工作流。

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud Scheduler 页面:

    转到 Cloud Scheduler

  2. 点击创建作业

  3. 名称设置为 my-workflow-job

  4. 对于频率,输入:

    */5 * * * *
    这将每 5 分钟执行一次作业。该间隔使用 unix-cron 格式定义。

  5. 对于时区,请选择国家/地区和时区。

    例如,选择美国和洛杉矶或太平洋夏令时 (PDT)

  6. 点击继续

  7. 对于目标类型,选择 HTTP

  8. 对于网址,请输入:

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

  9. HTTP 方法保留为 POST 的默认值。

  10. 添加以下两个 HTTP 标头

    • 名称:Content-Type,值:application/octet-stream
    • 名称:User-Agent,值:Google-Cloud-Scheduler
  11. 对于正文,请输入:

    {"argument": "{\"firstName\":\"Sherlock\", \"lastName\":\"Holmes\"}"}
    

    这将传递工作流参数的 JSON 编码;在此示例中,名字为“Sherlock”和姓氏“Holmes”。字符串中的双引号使用反斜杠 (\) 进行转义。

  12. 身份验证标头部分,选择添加 OAuth 令牌

  13. 输入您之前创建的服务账号。

    sa-name@PROJECT_ID.iam.gserviceaccount.com
    
    您不必指定范围,因为系统将使用 https://www.googleapis.com/auth/cloud-platform 的默认值。

  14. 接受所有其他默认设置,然后点击创建

gcloud

输入以下命令以安排名为 my-workflow-job 的作业:

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"

该间隔使用 unix-cron 格式定义。

message-body 标志用于传递工作流参数的 JSON 编码。在本例中,名字为“Stherlock”,姓氏为“Holmes”。字符串中的双引号使用反斜杠 (\) 进行转义。

现在,您的工作流每 5 分钟执行一次。

如需详细了解 gcloud scheduler 标志,以及如何应用调用日志记录,以便记录工作流执行期间的每个调用步骤,请参阅安排工作流gcloud 参考文档

运行作业并验证结果

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud Scheduler 页面:

    转到 Cloud Scheduler

    如果作业未显示,您可能需要刷新页面。

  2. 对于名为 my-workflow-job 的作业,点击立即运行

    您应该会看到 Result 值更新为 Success

  3. 在 Google Cloud 控制台中,前往 Workflows 页面:

    转到 Workflows

  4. 在工作流列表中,点击 myFirstWorkflow 以打开其详情页面。

    工作流的执行状态应该为成功

  5. 点击工作流的执行 ID 以打开详情页面,并在“输出”窗格中查看工作流的结果。

    输出内容应为“Hello, Sherlock Holmes!”。

gcloud

  1. 运行 Cloud Scheduler 作业以执行工作流:

    gcloud scheduler jobs run my-workflow-job
    
  2. 检索工作流的执行 ID:

    gcloud workflows executions list myFirstWorkflow
    

    输出应类似于以下内容,执行 ID 以粗体显示:

    projects/316710615161/locations/us-central1/workflows/myFirstWorkflow/executions/138b31e1-f3bb-4ba7-a6da-008d0cb4a320
  3. 检索工作流的执行结果:

    gcloud workflows executions describe EXECUTION_ID --workflow myFirstWorkflow

    EXECUTION_ID 替换为上一步返回的执行 ID。

    输出应类似于以下内容:

    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

恭喜!您已成功创建了一个 Cloud Scheduler 作业,该作业会自动按特定时间表运行工作流。