使用 Cloud Scheduler 安排工作流

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

准备工作

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

    启用 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 作业以触发您的工作流:

    控制台

    1. 如需安排工作流,请转到 Cloud Console 中的工作流页面:

      转到 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. Workflow's parameters 字段中,指定要在执行之前传递给工作流的任何运行时参数。参数必须采用 JSON 格式。例如:{"firstName":"Sherlock", "lastName":"Holmes"}。如果您的工作流不使用运行时参数,请接受默认值 {},或将该字段留空。

      2. 工作流的通话记录级别列表中,选择要在工作流执行期间应用的通话记录级别。您可以接受默认值无日志或选择以下其中一项:

        • 所有调用:记录对子工作流或库函数及其调用的所有调用。
        • 仅限错误:仅在通话因异常停止时记录。
      3. 服务帐号列表中,选择您之前创建的服务帐号。

    8. 点击创建

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

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

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

      1. 工作流详细信息页面上,选择 修改
      2. 触发器部分,找到想要更新或删除的作业。
      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

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

后续步骤