0

我们正在对当前架构进行少量更改,并希望实施谷歌云工作流程,以跟踪项目创建的流程。所有处理程序都放置在 Cloud Run 中。现在,如何从 Cloud Run 调用工作流中的特定端点?

我只有一个云运行 URL?我是云新手。任何帮助都感激不尽。

4

1 回答 1

0

总结一下您是否愿意 - 将工作流与 Cloud Run 和 Cloud Functions 结合使用。请看看这个 -这里

仅供参考,以下是以上面的抽象步骤为例,为您提供一个想法,您必须在其中创建一个工作流,一次连接一个服务:

  1. 部署两个 Cloud Functions 服务:第一个函数生成一个随机数,然后将该数字传递给与它相乘的第二个函数。
  2. 使用 Workflows 将两个 HTTP 函数连接在一起。执行工作流并返回结果,然后将其传递给外部 API。
  3. 使用 Workflows,连接一个返回给定数字日志的外部 HTTP API。执行工作流并返回结果,然后将其传递给 Cloud Run 服务。
  4. 部署仅允许经过身份验证的访问的 Cloud Run 服务。该服务返回给定数字的 math.floor。
  5. 使用 Workflows,连接 Cloud Run 服务,执行整个工作流,并返回最终结果。

摘录,举个例子(来自上面的参考),创建一个基于容器的 Cloud Run 服务并在 Workflows 中调用/附加它......

构建容器镜像:

export SERVICE_NAME=<your_svc_name>
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/${SERVICE_NAME}

将容器映像部署到 Cloud Run,确保它只接受经过身份验证的调用:

gcloud run deploy ${SERVICE_NAME} \
--image gcr.io/${GOOGLE_CLOUD_PROJECT}/${SERVICE_NAME} \
--platform managed \
--no-allow-unauthenticated

当您看到服务 URL时,部署完成。您需要在更新工作流定义时指定该 URL。

使用文件名创建一个文本文件,例如“workflows.yaml”,其内容如下:

- randomgen_function:
    call: http.get
    args:
        url: https://us-central1-*****.cloudfunctions.net/randomgen
    result: randomgen_result
- multiply_function:
    call: http.post
    args:
        url: https://us-central1-*****.cloudfunctions.net/multiply
        body:
            input: ${randomgen_result.body.random}
    result: multiply_result
- log_function:
    call: http.get
    args:
        url: https://api.mathjs.org/v4/
        query:
            expr: ${"log(" + string(multiply_result.body.multiplied) + ")"}
    result: log_result
- floor_function:
    call: http.post
    args:
        url: https://**service URL**
        auth:
            type: OIDC
        body:
            input: ${log_result.body}
    result: floor_result
- return_result:
    return: ${floor_result}

注意:这里您将服务 URL替换为上面生成的 Cloud Run 服务 URL。

这将连接工作流中的 Cloud Run 服务。请注意,身份验证密钥可确保在对 Cloud Run 服务的调用中传递身份验证令牌。

部署工作流,传入服务帐户:

cd ~
gcloud workflows deploy <<your_workflows_name>> \
--source=workflow.yaml \
--service-account=${SERVICE_ACCOUNT}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com

执行工作流:

gcloud workflows run <<your_workflows_name>>

输出应类似于以下内容:

result: '{"body":............;
...
startTime: '2021-05-05T14:36:48.762896438Z'
state: SUCCEEDED
于 2021-12-16T13:09:46.157 回答