从 Workflows 调用 Google Cloud 服务(例如 Cloud Run 函数或 Cloud Run)是通过 HTTP 请求完成的。最常见的 HTTP 请求方法具有调用快捷方式(例如 http.get 和 http.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 functions 或 Cloud Run 服务。使用此配置时,您的服务无法通过互联网访问,但可以通过 Workflows 访问。
如需应用这些限制,您必须调整服务或函数的入站流量设置。请注意,Cloud Run 服务必须通过其 run.app
网址访问,而不是通过自定义网域访问。如需了解详情,请参阅限制入站流量(适用于 Cloud Run)和配置网络设置(适用于 Cloud Run 函数)。您的工作流无需进行其他更改。
使用具有所需权限的服务账号
向其他 Google Cloud 服务发出请求时,您的工作流必须与具有正确权限能够访问所请求资源的服务账号相关联。如需了解与现有工作流关联的服务账号,请参阅验证工作流的关联服务账号。
设置服务账号时,将请求身份与您要授予访问权限的资源相关联(将请求身份设为资源的主账号),然后为其分配适当的角色。该角色可定义身份在资源上下文中具有的权限。
例如,如需将接收 Cloud Run 函数配置为接受来自特定调用函数或服务的请求,您需要将调用者的服务账号添加为接收函数的主账号,并向该主账号授予 Cloud Run 函数 Invoker (roles/cloudfunctions.invoker
) 角色。同样,如需为 Cloud Run 设置服务账号,请向该服务账号授予 Cloud Run Invoker (roles/run.invoker
) 角色。如需了解详情,请参阅 Cloud Run 函数的身份验证信息或 Cloud Run 身份验证概览。
调用 Cloud Run functions(第 2 代)
在 Cloud Run functions (第 2 代) 中,您可以通过管理底层 Cloud Run 服务来获取调用权限。如果您的工作流正在调用 Cloud Run 函数(第 2 代)服务,则无需向调用方的服务账号授予 Cloud Run 函数 Invoker (roles/cloudfunctions.invoker
) 角色。您必须授予 Cloud Run Invoker (roles/run.invoker
) 角色。
如需了解详情,请参阅 Cloud Run 函数版本比较。
向工作流添加身份验证信息
向 Cloud Run functions 或 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
媒体类型,则存储在变量中的 JSON 响应会自动转换为可访问的映射。
如有必要,请修改要调用的 API,为 Content-Type
响应标头指定 application/json
媒体类型。否则,您可以使用 json.decode
和 text.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 Run 作业以处理 Cloud Storage 中的事件数据。