当前位置: 首页 > 知识库问答 >
问题:

使用App Engine和云功能的基于Python的GCP项目的推荐项目结构

陆正德
2023-03-14

我继承了一个使用Python作为主要语言的GCP项目。这是我第一次接触GCP,我担心就最佳实践而言,该项目的结构可能不合理。

该项目由应用引擎(标准)组成,用于公开几个供web应用使用的HTTPendpoint,以及几个“触发”云函数,这些函数被部署用于处理需要后端处理的各种情况,例如:对象上传到bucket。目前,项目代码库包含应用程序引擎代码和云功能代码。

代码结构如下:

project/
├── main.py
└── common-ftns/
    ├── __init__.py
    └── initialize-app.py
    └── utils.py
└── cloud-ftns/
    └── cloud_ftn-1.py
    └── cloud_ftn-2.py
└── services/
    └── service-1-routes.py
    └── service-1.py
    └── service-2-routes.py
    └── service-2.py

我们正在使用GCP Cloud Build部署整个解决方案,一切都很好。然而,我关心的是main的常见用法。应用程序引擎和云功能的py。GAE和Cloud函数似乎都需要根级别的main。py文件来初始化应用程序(包括Flask)以及声明云函数入口点。这让我感到困扰,因为云功能和应用引擎似乎不需要一个共同的起点,更不用说触发处理云功能不需要有烧瓶,因为它们没有使用烧瓶。

我的问题是:这种类型的结构在GCP/Python世界中被认为是“最佳实践”吗?如果没有,那么有没有更好的方法来利用main.py使得云函数和GAE不必运行完全相同的启动脚本?

共有2个答案

堵毅然
2023-03-14

这个项目似乎以一种理想的方式构建,可以在应用引擎应用程序和一个或多个云功能之间共享一个公共代码库,而无需管理私有子依赖项或复杂的构建步骤。

徐峰
2023-03-14

你可以拥有一个monorepo项目,并将其用于生产。当您执行此操作时,如果您希望部署某些部分而不是全部,则需要对CI脚本进行更多的工作,但这是可行的。这一切都取决于你的要求和你的工作方式。

所以,我的建议是为每个服务创建子目录

  • 一个用于AppEngine服务

部署时,转到正确的目录并执行服务部署。app.yaml在App Engine目录中,函数不关心它。

对于这些功能,每个功能都有不同的要求。txt文件。这就是为什么把它们分成目录很重要。在这里,再次进入正确的目录,并部署该函数。

问题来自于函数和应用引擎(您的“公共”包)之间共享的公共文件。有两种方法:

  • 要么构建一个包,然后将其导入到依赖项中

 类似资料:
  • 我是Spring靴的初学者。我参与了一个项目的开始,在这个项目中,我们将使用Spring引导构建Rest服务。当构建一个只公开其余服务的项目时,您能建议遵循推荐的目录结构吗?

  • 我正在尝试将一个大型代码库从Java 8迁移到模块化(JPMS) Java 11,我遇到了巨大的困难,并且很难找到关于项目结构以及如何将模块信息文件用于实际生产项目的一致建议。 有问题的项目遵循源文件和测试文件的传统分级结构: 我有一个文件在,这是正确的位置吗?模块化java的快速入门,这似乎与此相矛盾;然而,其他资源像我一样做。 尝试运行如下所示的单元测试时: 我得到: 这表明我需要在我的< c

  • 我正在尝试创建一个类似于以下内容的项目结构: 此外,我们希望避免使用require将所有函数拉到一个index.js文件中。

  • 我查看了文档,没有找到这样做的方法。有没有办法告诉gradle idea任务创建目录项目结构()而不是项目/模块文件()?

  • 上面提到的构建文件中有默认的文件夹结构。Gradle 遵循约定优先于配置的概念,在尽可能的情况下提供合理的默认配置参数。最基本的项目有两个 “source sets” 组件,分别存放应用代码及测试代码。它们分别位于: src/main/ src/androidTest/ 里面每个存在的文件夹对应相应的源组件。对于 Java plugin 和 Android plugin 来说,它们的 Java 代

  • Python 的练手项目有哪些值得推荐?