使用 Cloud Scheduler 安排工作流

本页面介绍了如何使用 Cloud Scheduler 以特定计划运行工作流,例如每个星期一上午 9 点或每 15 分钟运行一次工作流。

准备工作

  1. 如果您还没有要安排的工作流,请创建工作流
  2. 启用 Cloud Scheduler API。

    启用 API

安排工作流

  1. 创建一个服务帐号,以便 Cloud Scheduler 可以向 Workflows API 发出请求:

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

    SERVICE_ACCOUNT_NAME 替换为一个介于 6 到 30 个字符的名称。它可以包含小写字母数字字符和短划线。在服务帐号创建完毕后,无法再更改其名称。

  2. 为将要运行 Cloud Scheduler 命令的帐号授予使用您的服务帐号的权限

  3. 为您的新服务帐号授予 workflows.invoker 角色,以便该帐号有权触发您的工作流:

    gcloud projects add-iam-policy-binding PROJECT_NAME \
      --member serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com \
      --role roles/workflows.invoker

    替换以下内容:

    • PROJECT_NAME:您的 Google Cloud 项目的名称。
    • SERVICE_ACCOUNT_NAME:您之前创建的服务帐号的名称。
  4. 通过使用先前创建的服务帐号进行身份验证,创建一个 Cloud Scheduler 作业以触发您的工作流。例如,要将您的工作流安排成每 5 分钟执行一次(使用 unix-cron 格式定义间隔),请执行以下操作:

    gcloud scheduler jobs create http JOB_NAME \
      --schedule="*/5 * * * *" \
      --uri="https://workflowexecutions.googleapis.com/v1/projects/PROJECT_NAME/locations/REGION_NAME/workflows/WORKFLOW_NAME/executions" \
      --message-body="{\"argument\": \"DOUBLE_ESCAPED_JSON_STRING\"}" \
      --time-zone="TIME_ZONE" \
      --oauth-service-account-email="SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com"

    替换以下内容:

    • JOB_NAME:您提供给 Cloud Scheduler 作业的名称。
    • PROJECT_NAME:您的 Google Cloud 项目的名称。
    • REGION_NAME:您的工作流所在的区域,例如 us-central1
    • WORKFLOW_NAME:您要安排执行的工作流的名称。
    • DOUBLE_ESCAPED_JSON_STRING:您要传递的所有参数的 JSON 编码。带英文引号的字符串中的英文双引号使用反斜杠 (\) 进行转义。例如:--message-body="{\"argument\": \"{\\\"foo\\\": \\\"bar\\\"}\"}"
    • TIME_ZONE:Cloud Scheduler 应该用于解读您提供的计划的时区
    • SERVICE_ACCOUNT_NAME:您之前创建的服务帐号的名称。

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

后续步骤