0

我需要运行由不同项目中的多个脚本组成的数据转换管道 = Python repos。
我正在考虑在需要时使用 Compute Engine 在虚拟机中运行这些脚本,因为我可以管理所需的资源。我需要能够编排这些脚本,因为我想按顺序运行步骤,有时是异步运行。

我看到 GCP 为我们提供了一个似乎适合这种情况的 Worflows 组件。我正在考虑创建一个特定的项目来协调脚本的执行。但是,我看不到如何触发我的脚本的执行,这些脚本与编排器项目不在同一个仓库中。根据我对 GCE 的了解,VM 仅在执行脚本时创建,并且不提供要调用的持久 HTTP 端点以从其他地方触发执行。

为了说明,假设我有两个项目step_1step_2,它们包含我的数据转换管道的单独步骤。我还会有一个项目编排器,它只能在带有 GCE 的 VM 中按顺序触发step_1step_2 。该项目将无法访问这两个以前项目的代码库。

在这种情况下,最佳做法是什么?我应该为此使用 GCE 和 Worflows 以外的其他组件,还是有办法从独立的编排项目中触发 GCE 中的脚本?

4

2 回答 2

1

一种可能的解决方案是不使用 GCE(Google Compute Engines),而是创建包含您的任务步骤的 Docker 容器。然后这些将在 Cloud Run 中注册。Cloud Run 会按需启动 docker 容器,并仅按您处理请求所花费的时间向您收费。当请求结束时,您不再需要付费,因此您会以最佳方式消耗资源。各种事件都可能导致 Cloud Run 中的请求,但最常见的是 REST 调用。考虑到这一点,现在假设您的 Python 代码现在打包在由 REST 服务器(例如 Flask)触发的容器中。实际上,您已经创建了“微服务”。然后,这些服务可以由 Cloud Workflows 进行编排。这些微服务的调用是通过 REST 端点进行的,这些端点可以是具有授权的 Internet 地址。这将允许微服务(任务/步骤)位于单独的 GCP 项目中,并且编排器会将它们视为不同的可调用端点。

其他潜在的解决方案是 GKE (Kubernetes) 和 Cloud Composer (Apache Airflow)。

如果您确实希望继续使用 Compute Engines,您仍然可以使用共享 VPC 来做到这一点。共享 VPC 将允许不同的项目在彼此之间建立网络连接,您可以使用Private Catalog让 GCE 实例相互通告。然后,您可以有一个 GCE 实例编排,或者再次通过 Cloud Workflows 编排。我们必须检查 Cloud Workflows 是否支持并行项目......我不相信截至本文发布时它支持。

于 2021-10-13T21:15:20.550 回答
0

这是一个常见的要求,将自动化组织到它自己的项目中。您可以设置跨多个项目的服务帐户。

在此处查看教程:https ://gtseres.medium.com/using-service-accounts-across-projects-in-gcp-cf9473fef8f0

最重要的是,您还可以考虑在编排器和子级项目中都有工作流。这样编排器工作流可以调用另一个工作流。所以作业可以很方便的运行,并且也封装在有代码+工作流体的项目下,只有触发来自于其他项目。

于 2021-10-31T20:11:38.113 回答