使用 Cloud Scheduler 安排工作流

本页面介绍了如何使用 Cloud Scheduler 以特定计划运行工作流,例如每个星期一上午 9 点或每 15 分钟运行一次工作流。您可以在 Google Cloud 控制台中或使用 Google Cloud CLI 来配置时间表。

准备工作

  1. 如果您还没有要安排的工作流,请创建和部署工作流
  2. Enable the Cloud Scheduler API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  3. 或者,在终端中输入以下命令:
    gcloud services enable cloudscheduler.googleapis.com

安排工作流

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

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

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

  2. 如需允许将运行 Cloud Scheduler 命令的主账号充当 Identity and Access Management (IAM) 服务账号,请授予一个角色以让主账号能够模拟服务账号

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

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

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud 项目的 ID。
    • SERVICE_ACCOUNT_NAME:您之前创建的服务账号的名称。
  4. 通过使用先前创建的服务账号进行身份验证,创建一个 Cloud Scheduler 作业以触发您的工作流。

    请注意,如果您要应用通话记录,则必须通过Google Cloud 控制台中的工作流页面配置通话记录。如需了解详情,请参阅以下步骤。

    控制台

    1. 如需安排工作流,请前往 Google Cloud 控制台中的 Workflows 页面:

      进入 Workflows

    2. 在 Workflows 页面上,选择一个工作流以转到其详情页面。

    3. 工作流详细信息页面上,点击 修改

    4. 修改工作流页面上,选择添加新的触发器 > Cloud Scheduler

      此时会打开创建 Scheduler 作业窗格。

    5. 制定时间表:

      1. 名称字段中,输入您的 Cloud Scheduler 作业的名称。在同一区域内的作业中必须是唯一的。

      2. 区域列表中,选择一个适当的区域,例如 us-central1

      3. 频率字段中,指定以 unix-cron 格式定义的时间间隔。例如,如需将工作流安排成每 5 分钟执行一次,请输入 */5 * * * *

      4. 时区列表中,选择 Cloud Scheduler 应该用于解读您提供的时间表的时区。您可以按国家/地区搜索。

    6. 点击继续

    7. 配置执行:

      1. 工作流的实参字段中,指定要在执行之前传递给工作流的任何运行时实参。实参必须采用 JSON 格式。例如:{"firstName":"Sherlock", "lastName":"Holmes"}。 如果您的工作流不使用运行时参数,请接受默认值 {},或将该字段留空。

      2. 工作流的调用日志级别列表中,选择要在执行工作流期间应用的调用日志记录级别:

        • 未指定:未指定日志记录级别。这是默认设置。 除非未指定执行日志级别(默认),否则执行日志级别优先于任何工作流日志级别;在这种情况下,工作流日志级别适用。
        • 仅限错误:记录所有已捕获的异常;或者调用因异常而停止时。
        • 所有调用:记录对子工作流或库函数及其结果的所有调用。
        • 无日志:无调用日志记录。
      3. 服务账号列表中,选择您之前创建的服务账号。

    8. 点击创建

      请注意,如果您要更新现有工作流,则无需重新部署工作流。

      Cloud Scheduler 作业现在列在工作流详情页面的触发器标签页上。

    9. 如需更新或删除作业,您必须修改工作流:

      1. 工作流详细信息页面上,点击 修改
      2. Triggers 部分,找到要更新或删除的作业。
      3. 点击 修改资源 删除资源

    gcloud

    1. 打开终端并输入以下命令:

      gcloud scheduler jobs create http JOB_NAME \
          --schedule="FREQUENCY" \
          --uri="https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/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_ID.iam.gserviceaccount.com"

      替换以下内容:

      • JOB_NAME:您提供给 Cloud Scheduler 作业的名称。
      • FREQUENCY:使用 unix-cron 格式定义的时间间隔。例如,如需将工作流安排成每 5 分钟执行一次,请输入 */5 * * * *
      • PROJECT_ID:您的 Google Cloud 项目的 ID。
      • REGION_NAME:您的工作流所在的区域,例如 us-central1
      • WORKFLOW_NAME:您要安排执行的工作流的名称。
      • DOUBLE_ESCAPED_JSON_STRING:您要传递的所有参数的 JSON 编码。带英文引号的字符串中的英文双引号使用反斜杠 (\) 进行转义。例如:--message-body="{\"argument\": \"{\\\"foo\\\": \\\"bar\\\"}\"}"
      • TIME_ZONE:Cloud Scheduler 应该用于解读您提供的计划的时区。例如:America/New_York
      • SERVICE_ACCOUNT_NAME:您之前创建的服务账号的名称。
    2. 如需列出项目中的所有作业,请执行以下操作:

      gcloud scheduler jobs list

    3. 如需删除任务,请执行以下操作:

      gcloud scheduler jobs delete JOB_NAME

您的工作流现在会根据您定义的频率执行。

后续步骤