调用 Cloud Run 函数或 Cloud Run

调用或调用 Google Cloud 服务,例如 Cloud Run 函数 或者是 Workflows 中的 Cloud Run 请求。最常见的 HTTP 请求方法具有调用快捷方式(例如 http.gethttp.post),但您可以发出任何类型的 HTTP 请求,方法是将 call 字段设置为 http.request 并使用 method 字段指定请求类型。如需了解详情,请参阅发出 HTTP 请求

如需发送经过身份验证的请求,请执行以下操作:

  • 您的工作流必须与具有一个或多个包含所需权限的 Identity and Access Management (IAM) 角色的服务账号相关联。

  • 您必须向工作流定义明确添加身份验证信息。默认情况下,出于安全原因,HTTP 请求不包含身份或访问令牌。

如需了解详情,请参阅向工作流授予访问 Google Cloud 资源的权限

何时调用服务

如何确定何时使用 Workflows 创建 YAML 或 JSON 格式的步骤 或何时创建服务(例如,Cloud Run 服务) 或 Cloud Run 函数来代替自己完成此工作?

使用 Workflows 从工作流本身调用服务并处理结果,以及执行发出 HTTP 调用等简单任务。工作流可以调用服务、解析响应以及为其他连接的服务构建输入。调用服务可以避免产生额外调用、额外依赖项和调用服务的服务复杂性。

创建服务来完成任何对 Workflows 来说过于复杂的工作;例如,实现 Workflows 表达式及其标准库不支持的可重用业务逻辑、复杂计算或转换。与使用 YAML 或 JSON 和 Workflows 语法相比,在代码中实现复杂情况通常更容易。

调用受限于内部入站流量的服务

Workflows 可以调用同一个 Google Cloud 项目中入站流量受限于内部流量的 Cloud Run 函数或 Cloud Run 服务。使用此配置时,您的服务无法通过互联网访问,但可以通过 Workflows 访问。

如需应用这些限制,您必须调整服务或函数的入站流量设置。请注意,Cloud Run 服务必须通过其 run.app 网址访问,而不是通过自定义网域访问。如需更多信息 请参阅限制入站流量(适用于 Cloud Run) 和配置网络设置 (适用于 Cloud Run 函数)。您的工作流无需进行其他更改。

使用具有所需权限的服务账号

向其他 Google Cloud 服务发出请求时,您的工作流必须与具有正确权限能够访问所请求资源的服务账号相关联。如需了解与现有工作流关联的服务账号,请参阅验证工作流的关联服务账号

设置服务账号时,将请求身份与您要授予访问权限的资源相关联(将请求身份设为资源的主账号),然后为其分配适当的角色。该角色可定义身份在资源上下文中具有的权限。

例如,配置接收 Cloud Run 函数 特定调用函数或服务发出的请求,则需要将 调用方的服务账号作为接收函数的主账号,并授予该账号 主账号是 Cloud Run Functions Invoker (roles/cloudfunctions.invoker) 角色。同样,如需为 Cloud Run 设置服务账号,请向该服务账号授予 Cloud Run Invoker (roles/run.invoker) 角色。如需了解详情,请参阅 Cloud Run 函数的身份验证信息Cloud Run 身份验证概览

调用 Cloud Run 函数(第 2 代)

在 Cloud Run 函数(第 2 代)中,可通过管理 运行底层 Cloud Run 服务如果您的工作流正在调用 Cloud Run 函数(第 2 代)服务,则无需向调用方的服务账号授予 Cloud Run 函数 Invoker (roles/cloudfunctions.invoker) 角色。相反,您必须将 Cloud Run Invoker (roles/run.invoker) 角色。

如需了解详情,请参阅 Cloud Run 函数版本比较

向工作流添加身份验证信息

向 Cloud Run 函数或 Cloud Run 发出请求时, 请使用 OIDC 进行身份验证。

如需使用 OIDC 发出 HTTP 请求,请在指定网址后,将 auth 部分添加到工作流定义的 args 部分。在此示例中, 请求来调用 Cloud Run 函数:

YAML

  - step_A:
      call: http.get
      args:
          url: https://us-central1-project.cloudfunctions.net/functionA
          query:
              firstNumber: 4
              secondNumber: 6
              operation: sum
          auth:
              type: OIDC
              audience: OIDC_AUDIENCE
    

JSON

    [
      {
        "step_A": {
          "call": "http.get",
          "args": {
            "url": "https://us-central1-project.cloudfunctions.net/functionA",
            "query": {
              "firstNumber": 4,
              "secondNumber": 6,
              "operation": "sum"
            },
            "auth": {
              "type": "OIDC",
              "audience": "OIDC_AUDIENCE"
            }
          }
        }
      }
    ]
      
audience 参数可用于为令牌指定 OIDC 目标设备。默认情况下,它设置为与 url 相同的值:但是,它应该设置为服务的根网址。例如:https://region-project.cloudfunctions.net/hello_world

指定响应数据的媒体类型

如果响应的 Content-Type 标头指定 application/json 媒体类型,即存储在 变量会自动转换为可访问的映射。

如有必要,请修改正在调用的 API 以指定 Content-Typeapplication/json媒体类型 响应标头。或者,您可以使用 json.decodetext.encode 函数来 将响应正文转换为映射。例如:

json.decode(text.encode(RESPONSE_FROM_API))

如需了解详情,请参阅 访问保存在变量中的 HTTP 响应数据

执行 Cloud Run 作业

与 Cloud Run 服务不同,Cloud Run 作业不会监听或传送 HTTP 请求。如需通过工作流执行 Cloud Run 作业,请执行以下操作: 使用 Cloud Run Admin API 连接器

如需查看执行 Cloud Run 作业以处理作为环境变量传递到该作业的数据的端到端示例,请参阅使用 Workflows 执行 Cloud Run 作业

有关执行 Cloud Run 作业的端到端示例, 可处理存储在 Cloud Storage 存储桶中的数据,让您可以 使用客户管理的加密密钥 (CMEK) 对数据进行加密,请参阅 执行用于处理 Cloud Storage 中的事件数据的 Cloud Run 作业

后续步骤