创建和管理工作流

您可以在 Google Cloud 控制台中创建和管理工作流,也可以使用 在您的终端或 Cloud Shell 中运行 Google Cloud CLI。您还可以 通过 Workflows API 管理工作流。

准备工作

您的组织定义的安全限制条件可能会导致您无法完成以下步骤。如需了解相关问题排查信息,请参阅在受限的 Google Cloud 环境中开发应用

控制台

  1. 在 Google Cloud 控制台的“项目选择器”页面上,选择或创建 Google Cloud 项目

    转到“项目选择器”

  2. 确保您的 Google Cloud 项目已启用结算功能。 了解如何检查项目是否已启用结算功能

  3. 启用 Workflows API。

    启用 API

gcloud

  1. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  2. 确保您的 Google Cloud 项目已启用结算功能。 了解如何检查项目是否已启用结算功能

  3. 启用 Workflows API。

    gcloud services enable workflows.googleapis.com
    

REST

如需使用 Workflows API 管理工作流,我们建议您 使用 Google 提供的 客户端库来调用 workflows.googleapis.com 服务。如需了解详情,请参阅 Workflows API

创建服务账号

服务账号代表工作流的身份, 工作流拥有的权限,以及它可以使用哪些 Google Cloud 资源 access.如果您还没有服务账号,请创建一个;然后授予它 为容器管理基础架构 管理工作流创建日志

如果您没有在创建工作流的过程中指定服务账号, 默认 Compute Engine 服务账号用作其身份。 如需了解详情,请参阅 授予工作流访问 Google Cloud 资源的权限

我们强烈建议您使用具备访问必需资源所需的最低权限的服务账号。

请注意,要创建资源并关联服务账号,您需要 拥有创建该资源并模拟用来创建该服务账号的权限 您将附加到该资源如需了解详情,请参阅 服务账号权限

控制台

  1. 在 Google Cloud 控制台中,转到服务账号页面。

    转到“服务账号”

  2. 选择项目,然后点击创建服务账号

  3. 服务账号名称字段中,输入一个名称。

    此名称必须介于 6 到 30 个字符之间,且可以包含小写字母数字字符和短划线。创建服务账号后 您无法更改其名称

  4. 点击创建并继续

  5. 点击选择角色

  6. 选择以下角色,然后根据需要点击添加其他角色

    1. 如需创建、更新和执行工作流,请选择 Workflows > Workflows Editor
    2. 如需将日志发送到 Cloud Logging,请选择 Logging > Logs Writer
  7. 点击完成以完成服务账号的创建过程。

gcloud

  1. 创建服务账号。

    gcloud iam service-accounts create SERVICE_ACCOUNT
  2. 通过分配角色来为服务账号授予权限。

    1. 要创建、更新和执行工作流,请将 roles/workflows.editor 角色:

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member "serviceAccount:SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
          --role "roles/workflows.editor"
      
    2. 如需将日志发送到 Cloud Logging,请分配 roles/logging.logWriter 角色:

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member "serviceAccount:SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \
          --role "roles/logging.logWriter"
      

    替换以下内容:

    • SERVICE_ACCOUNT:服务账号的名称。该名称必须介于 6 到 30 个字符之间,且可以包含小写字母数字字符和短划线。创建服务账号后 您无法更改其名称

    • PROJECT_ID:您的项目的 ID。

REST

您可以使用 serviceAccounts.create 创建服务账号的方法。如需了解详情,请参阅 创建服务账号

您可以通过修改和设置 使用 setIamPolicy 方法。如需了解详情,请参阅 以编程方式授予或撤消多个角色

创建工作流

工作流定义由一系列使用 Workflows 语法描述的步骤组成,该语法可以采用 YAML 或 JSON 格式编写。定义工作流后,您可以部署该工作流, 即可执行。部署步骤还会验证源文件是否可以执行。如果源文件不包含有效的工作流定义,则会失败。

修改 YAML 文件容易出错。如需创建工作流,您可以使用首选的 IDE 或源代码编辑器,并设置自动补全和语法验证来减少错误。

<ph type="x-smartling-placeholder">

控制台

  1. 在 Google Cloud 控制台中,进入 Workflows 页面:

    进入 Workflows

  2. 点击 创建

  3. 输入工作流的名称,例如 myFirstWorkflow。名称可以包含字母、数字、下划线和连字符。必须以字母开头,并以数字或字母结尾。

  4. (可选)添加工作流程说明。

  5. 区域列表中,选择合适的区域 部署工作流的位置;用于 例如 us-central1

  6. 服务账号列表中,选择需要 工作流将用于访问其他 Google Cloud 服务。有关 请参阅 创建服务账号

  7. 视需要执行下列任一操作:

    1. 指定要应用于工作流定义的调用日志记录级别。在调用日志级别列表中,选择以下选项之一:

      • 未指定:未指定日志记录级别。这是默认设置。 除非未指定执行日志级别(默认),否则执行日志级别优先于任何工作流日志级别;在这种情况下,工作流日志级别适用。
      • 仅限错误:记录所有已捕获的异常;或者调用因异常而停止时。
      • 所有调用:记录对子工作流或库函数及其结果的所有调用。
      • 无日志:无调用日志记录。
    2. 指定工作流应该用于数据加密的 Cloud Key Management Service 密钥:选择客户管理的加密密钥 (CMEK)。如需了解详情,请参阅使用客户管理的加密密钥 (CMEK)

    3. 指定可供工作流在运行时访问的环境变量。如需了解详情,请参阅使用环境变量

    4. 添加标签:标签是可帮助您整理 Google Cloud 实例的键值对。如需了解详情,请参阅 什么是标签? 工作流执行时会沿用工作流标签。查看 执行标签,请使用 workflows.executions.list 方法 列出和过滤工作流执行作业

    5. 安排工作流:选择添加新触发器 > Cloud Scheduler。如需了解详情,请参阅使用 Cloud Scheduler 安排工作流

    6. 通过事件或 Pub/Sub 消息触发工作流:选择添加新触发器 > Eventarc。如需了解详情,请参阅使用事件或 Pub/Sub 消息触发工作流

  8. 点击下一步

  9. 在工作流编辑器中,输入工作流的定义。请参阅示例工作流

  10. 点击部署

gcloud

  1. 确保工作流的源代码保存在 YAML 或 JSON 文件中,例如 MY_WORKFLOW.YAMLMY_WORKFLOW.JSON。请参阅示例工作流

  2. 打开终端。

  3. 您可以使用 gcloud workflows deploy 命令:

    gcloud workflows deploy WORKFLOW_NAME \
        --location=LOCATION \
        --call-log-level=CALL_LOGGING_LEVEL \
        --description="DESCRIPTION" \
        --labels="LABEL_KEY=LABEL_VALUE" \
        --set-env-vars="ENV_KEY=ENV_VALUE" \
        --kms-key=ENCRYPT_KEY \
        --service-account=SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com \
        --source=YAML_OR_JSON_SOURCE_FILE
    

    替换以下内容:

    • WORKFLOW_NAME:工作流的名称, 示例:myFirstWorkflow。名称可以包含字母、数字 下划线和连字符并且必须以字母开头并以 数字或字母。

    • LOCATION: 要在其中部署工作流的区域;用于 例如 us-central1

    • CALL_LOGGING_LEVEL:可选。在执行期间应用的调用日志记录级别。可以是以下之一:

      • none:未指定日志记录级别。这是默认设置。除非未指定执行日志级别(默认),否则执行日志级别优先于任何工作流日志级别;在这种情况下,工作流日志级别适用。
      • log-errors-only:记录所有已捕获的异常;或者调用因异常而停止时。
      • log-all-calls:记录对子工作流或库函数及其调用的所有调用。
      • log-none:无调用日志记录。
    • DESCRIPTION:可选。对 工作流。

    • LABEL_KEY=LABEL_VALUE:可选。 标签键值对列表,可帮助您整理自己的 Google Cloud 实例;例如 name=wrench。有关 请参阅 什么是标签? 工作流执行时会沿用工作流标签。查看 执行标签,请使用 workflows.executions.list 方法 列出和过滤工作流执行作业

    • ENV_KEY=ENV_VALUE:可选。列表 环境变量键值对;例如 MONTH=January。对于 请参阅 使用环境变量

    • ENCRYPT_KEY:可选。Cloud KMS 密钥,该密钥以 projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME. 如需了解详情,请参阅使用客户管理的加密密钥 (CMEK)

    • SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com:可选。您的工作流将用于访问其他 Google Cloud 服务的服务账号。如需了解更多信息,请参阅本文档 请参阅创建服务账号

    • YAML_OR_JSON_SOURCE_FILE: 工作流定义。例如:myFirstWorkflow.yaml

REST

要创建具有指定名称的新工作流,请使用 projects.locations.workflows.create 方法,并使用 workflowId 查询参数指定 工作流。

在使用任何请求数据之前,请先进行以下替换:

请求 JSON 正文:

{
  "name": "WORKFLOW_NAME",
  "description": "DESCRIPTION",
  "labels": {"LABEL_KEY":"LABEL_VALUE"},
  "serviceAccount": "SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com",
  "cryptoKeyName": "ENCRYPT_KEY",
  "callLogLevel": "CALL_LOGGING_LEVEL",
  "userEnvVars": {"ENV_KEY":"ENV_VALUE"},
  "sourceContents": "SOURCE_CODE"
}

如需发送您的请求,请展开以下选项之一:

如果成功,响应正文将包含一个新创建的 Operation 实例:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.workflows.v1.OperationMetadata",
    "createTime": "2023-12-05T14:06:06.338390918Z",
    "target": "projects/PROJECT_ID/locations/LOCATION/workflows/WORKFLOW_NAME",
    "verb": "create",
    "apiVersion": "v1"
  },
  "done": false
}

如果 "done" 的值为 false,则表示操作仍在进行中。

列出工作流

您可以列出工作流或使用过滤条件来检索特定工作流。

控制台

  1. 在 Google Cloud 控制台中,前往工作流页面。

    进入 Workflows

    此页面列出了您在所有位置的工作流,并包含如下详细信息: 例如名称、区域、最新修订版本等

  2. 如需过滤工作流,请执行以下操作:

    1. 点击 过滤条件过滤工作流字段。
    2. 属性列表中,选择一个选项以过滤工作流。

    您可以选择单个属性,或使用逻辑运算符 OR 添加更多属性。

  3. 要对工作流进行排序,请在任何受支持的列标题旁边点击 排序

gcloud

使用 gcloud workflows list 命令:

gcloud workflows list --location=LOCATION

LOCATION 替换为 ID 或完全限定 工作流位置的标识符。

此命令会列出指定位置的工作流,包括 例如工作流的 NAMESTATEREVISION_IDUPDATE_TIME

REST

要列出给定项目和位置的工作流,请使用 projects.locations.workflows.list 方法。

或者,要检索单个工作流的详细信息,请使用 projects.locations.workflows.get 方法。

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您的 Google Cloud 项目 ID。
  • LOCATION: 部署工作流的 region - 例如 us-central1

如需发送您的请求,请展开以下选项之一:

如果成功,则响应正文包含 Workflow 的实例,并且响应应类似如下内容:

{
  "workflows": [
    {
      "name": "projects/PROJECT_ID/locations/LOCATION/workflows/WORKFLOW_NAME",
      "state": "ACTIVE",
      "revisionId": "000001-0ce",
      "createTime": "2023-12-08T13:56:59.306770745Z",
      "updateTime": "2023-12-08T13:56:59.547021939Z",
      "revisionCreateTime": "2023-12-08T13:56:59.340161044Z",
      "serviceAccount": "projects/PROJECT_ID/serviceAccounts/PROJECT_NUMBER-compute@developer.gserviceaccount.com",
      "sourceContents": "main:\n    params: [input]\n [...] return: '${wikiResult.body[1]}'\n"
    },
    {
      object (Workflow)
    }
  ],
  "nextPageToken": string,
  "unreachable": [
    string
  ]
}

更新工作流

您可以更新现有工作流。您必须指定工作流的名称 要更新的项目及其来源。请注意,您无法更改工作流的名称 或位置信息。

更新工作流不会影响正在进行的执行。仅限未来日期 工作流执行都将使用更新后的配置。

每次更新工作流时,系统都会更新其 versionIDversionID 由两部分组成,并以连字符隔开:

  • 一个数字,从 1 开始,每当更新工作流时都会递增。

  • 由三个字符组成的随机字母数字字符串。

例如,000001-27f 表示工作流的初始版本, 000002-d52 表示已更新一次的工作流。

控制台

  1. 在 Google Cloud 控制台中,前往工作流页面。

    进入 Workflows

  2. 点击要更新的工作流的名称。请注意,您不能 更改工作流的名称。

    随即会出现工作流详细信息页面。

  3. 您可以通过以下方式修改工作流:

    • 如需修改来源,请执行以下操作:

      1. 点击来源标签页。
      2. 点击修改
      3. 要保存更改,请点击保存。 更新后的工作流程 。
    • 工作流用于更新说明的服务账号 通话记录级别、环境变量、标签或 加密密钥:

      1. 点击详情标签页。
      2. 点击相应 图标。
      3. 如果您要更新通话记录级别,请选择以下选项之一: <ph type="x-smartling-placeholder">
          </ph>
        • 未指定:未指定日志记录级别。这是默认设置。 除非未指定执行日志级别(默认),否则执行日志级别优先于任何工作流日志级别;在这种情况下,工作流日志级别适用。
        • 仅限错误:记录所有已捕获的异常;或者调用因异常而停止时。
        • 所有调用:记录对子工作流或库函数及其结果的所有调用。
        • 无日志:无调用日志记录。
      4. 如果您更新现有标签或添加新标签 让新标签生效。工作流标签包括 由工作流执行继承。如需查看执行标签,请按以下步骤操作: 使用 workflows.executions.list 方法 列出和过滤工作流执行作业
      5. 要保存更改,请点击保存。 更新后的工作流程 。
    • 要同时修改之前的字段,或者添加或更新 触发器:

      1. 点击 修改
      2. 如需修改来源,请点击下一步
      3. 如需保存更改并部署更新的工作流,请点击 部署
  4. 如果要更新服务账号的角色,请点击 权限标签页。

    1. 主账号是用户、群组、网域或服务账号。更新 现有主账号:

      1. 找到包含主账号的行。
      2. 点击 修改其中的主账号
      3. 点击 再添加一项 角色或点击 删除 角色
    2. 如果您要添加角色,请在选择角色列表中选择 适当的角色。

    3. 如需添加其他角色,请点击添加其他角色

    4. 点击保存

gcloud

  1. 打开终端。

  2. 找到您要更新的工作流的名称。如果您不知道工作流的名称,则可以输入以下命令列出所有工作流:

    gcloud workflows list
    
  3. 找到保存工作流来源的 YAML 或 JSON 文件。 例如 WORKFLOW_NAME.YAMLWORKFLOW_NAME.JSON.

  4. 您可以更新现有工作流,以更改其来源、说明、 环境变量、通话记录级别、加密密钥或其 关联的服务账号 gcloud workflows deploy 命令。

    您必须指定要更新的工作流的名称及其 来源;不过,其余标志是可选的要移除 客户管理的加密密钥 使用 --clear-kms-key 标志。

    gcloud workflows deploy WORKFLOW_NAME \
        --call-log-level=CALL_LOGGING_LEVEL \
        --description="DESCRIPTION" \
        --labels="LABEL_KEY=LABEL_VALUE" \
        --set-env-vars="ENV_KEY=ENV_VALUE" \
        --kms-key=ENCRYPT_KEY \
        --service-account=SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com \
        --source=YAML_OR_JSON_SOURCE_FILE
    

    替换以下内容:

    • WORKFLOW_NAME:必填。工作流的名称。

    • CALL_LOGGING_LEVEL:可选。级别 通话记录,以应用于 工作流。可以是以下之一:

      • none:未指定日志记录级别。这是默认设置。除非未指定执行日志级别(默认),否则执行日志级别优先于任何工作流日志级别;在这种情况下,工作流日志级别适用。
      • log-errors-only:记录所有已捕获的异常;或者调用因异常而停止时。
      • log-all-calls:记录对子工作流或库函数及其调用的所有调用。
      • log-none:无调用日志记录。
    • DESCRIPTION:可选。对 工作流。

    • LABEL_KEY=LABEL_VALUE:可选。 标签键值对列表,可帮助您整理自己的 Google Cloud 实例;例如 name=wrench。有关 请参阅 什么是标签? 工作流执行时会沿用工作流标签。查看 执行标签,请使用 workflows.executions.list 方法 列出和过滤工作流执行作业

    • ENV_KEY=ENV_VALUE:可选。列表 环境变量键值对;例如 MONTH=January。对于 请参阅 使用环境变量

    • ENCRYPT_KEY:可选。Cloud KMS 密钥,该密钥以 projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME. 如需了解详情,请参阅使用客户管理的加密密钥 (CMEK)

    • SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com:可选。您的工作流将用于访问其他 Google Cloud 服务的服务账号。如果您想更新 服务账号,请参阅 向工作流授予访问 Google Cloud 资源的权限管理对项目、文件夹和组织的访问权限

    • YAML_OR_JSON_SOURCE_FILE:必填。来源 YAML 或 JSON 格式的文件例如:myFirstWorkflow.yaml

REST

要更新现有工作流,请使用 projects.locations.workflows.patch 方法,并视需要使用 updateMask 查询参数指定列表 要更新的字段数。

在使用任何请求数据之前,请先进行以下替换:

请求 JSON 正文:

{
  "name": "WORKFLOW_NAME",
  "description": "DESCRIPTION",
  "labels": {"LABEL_KEY":"LABEL_VALUE"},
  "serviceAccount": "SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com",
  "cryptoKeyName": "ENCRYPT_KEY",
  "callLogLevel": "CALL_LOGGING_LEVEL",
  "userEnvVars": {"ENV_KEY":"ENV_VALUE"},
  "sourceContents": "SOURCE_CODE"
}

如需发送您的请求,请展开以下选项之一:

如果成功,响应正文将包含一个新创建的 Operation 实例:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.workflows.v1.OperationMetadata",
    "createTime": "2023-12-05T14:06:06.338390918Z",
    "target": "projects/PROJECT_ID/locations/LOCATION/workflows/WORKFLOW_NAME",
    "verb": "update",
    "apiVersion": "v1"
  },
  "done": false
}

如果 "done" 的值为 false,则表示操作仍在进行中。

删除工作流

您可以删除现有工作流。删除工作流会同时删除 执行,以及取消工作流的所有有效执行。

控制台

  1. 在 Google Cloud 控制台中,前往工作流页面。

    进入 Workflows

  2. 单击要删除的工作流的名称,然后单击 删除

  3. 在提示确认删除时,输入工作流名称。

  4. 点击确认

gcloud

  1. 打开终端。

  2. 找到要删除的工作流的名称。如果您不知道工作流的名称,则可以输入以下命令列出所有工作流:

    gcloud workflows list
    
  3. 使用 gcloud workflows delete 命令:

    gcloud workflows delete WORKFLOW_NAME
    

    WORKFLOW_NAME 替换为您的 工作流。

REST

要删除具有指定名称的工作流,请使用 projects.locations.workflows.delete 方法。

在使用任何请求数据之前,请先进行以下替换:

  • WORKFLOW_NAME: 要删除的工作流。
  • PROJECT_ID:您的 Google Cloud 项目 ID。
  • LOCATION: 部署工作流的 region - 例如 us-central1

如需发送您的请求,请展开以下选项之一:

如果成功,则响应正文包含一个 Operation 实例:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.workflows.v1.OperationMetadata",
    "createTime": "2023-12-05T14:06:06.338390918Z",
    "target": "projects/PROJECT_ID/locations/LOCATION/workflows/WORKFLOW_NAME",
    "verb": "delete",
    "apiVersion": "v1"
  },
  "done": false
}

如果 "done" 的值为 false,则表示操作仍在进行中。

后续步骤