如何将新服务部署到 Google App Engine 中的现有应用程序?

Posted

技术标签:

【中文标题】如何将新服务部署到 Google App Engine 中的现有应用程序?【英文标题】:How can I deploy new service to the existing app in Google App Engine? 【发布时间】:2020-01-22 23:10:01 【问题描述】:

我想在 Google Cloud Platform 的 App-engine 中创建新服务并将其部署到现有应用。

可以通过 URL test.appspot.com 访问该应用

我想创建一个带有简单网页的新服务,该网页可以使用应用引擎中的 URL my-service.test.appspot.com 进行访问。

我知道我需要创建 app.yaml 并进行部署,但我不确定是否需要使用之前已经部署的现有 app.yaml,或者我可以使用新服务创建新 app.yaml命名并部署它。

使用新的 app.yaml 进行部署会覆盖应用程序和现有服务,还是只是在 App-engine 中创建我的新服务?

在 App-engine 中将新服务部署到现有应用程序需要遵循哪些步骤?

【问题讨论】:

【参考方案1】:

虽然可能可以通过指定不同的部署命令参数来使用现有的app.yaml 来部署新服务,但我不推荐它,因为恕我直言,它太脆弱了,你会冒险现有应用程序的影响(技术上是您现有单服务应用程序的default 服务)。您也不太可能希望在新服务中部署完全相同的代码(正在部署的代码是来自 .yaml 文件所在目录的代码)。

我强烈建议(重新)构建您的应用,同时考虑您的服务:

应用的***目录包含应用级别的配置文件,而不是服务级别的文件 每个服务在应用程序的***目录下都有自己的子目录,每个都有自己的代码和.yaml 文件(甚至不必称为app.yaml 服务将独立部署,每个服务都来自自己的子目录

从单一服务应用程序目录到达那里相对简单:只需创建一个子目录(用于default 服务)并将现有的app.yaml 和代码移动到其中,检查功能是否不受影响,并且从新位置重新部署。然后为其他服务及其代码创建子目录。

另见:

Configuration Files:

通常,您为每个服务创建一个目录,其中包含 服务的 YAML 文件和相关的源代码。可选的 应用程序级配置文件 (dispatch.yaml, cron.yaml, index.yaml 和 queue.yaml) 包含在***应用程序中 目录。下面的示例显示了三个服务。在service1service2,源文件与 YAML 文件处于同一级别。 在service3 中,有两个版本的 YAML 文件。

Can a default service/module in a Google App Engine app be a sibling of a non-default one in terms of folder structure?)

【讨论】:

【参考方案2】:

Appengine 旨在考虑“微服务”。每个服务都是隔离的,因此每个服务都有自己的源代码和配置。顺便说一句,你可以混合标准和灵活的版本,你可以混合语言、静态和动态资源,...

顺便说一下,部署您的微服务并使用调度将查询路由到正确的部署。

但是 1 条建议:保持服务一致。我的意思是,不要部署没有关系的 2 个应用程序,更愿意创建 2 个项目,原因如下:

如果一个应用程序增长,您将受到辅助服务的干扰,其后果是: dispatch.yaml 文件限制为 20 条规则 一个专门的团队可能会受到此应用的影响,角色和授权必须在每个应用中分开 在 AppEngine 标准中,您每天可以免费使用 28 小时的默认实例 (F1)。拆分您的应用以获得更多免费配额!

【讨论】:

【参考方案3】:

从@Dan 的回答开始,然后按照这个:

您必须使用指令service: service_name 在每个 .yaml 文件中命名您的服务

例如,适用于 php,但也适用于其他语言: Documentation。寻找“服务”元素。

部署是这样进行的:(针对 Windows 给出的示例,因此是反斜杠)

app_leveldir> gcloud app deploy dir1\service1.yaml dir2\service2.yaml [dirn\servicen.yaml]

确保每个 <servicei>.yaml 包含: service: myservice-name

最后,请注意,每个(微服务)都将在 URL 中提供: https://SERVICE-dot-PROJECT_ID.REGION_ID.r.appspot.com/

知道还有一个更进一步的粒度级别,包括版本: https://VERSION-dot-SERVICE-dot-PROJECT_ID.REGION_ID.r.appspot.com/

在上面的 URL 中,-dot- 实际上是那个符号,而不是 '.'

【讨论】:

以上是关于如何将新服务部署到 Google App Engine 中的现有应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何将laravel项目从本地部署到服务器

如何将 socket.io 部署到 Google App Engine?

如何减少 Google App Engine 部署的 ktor App 文件大小

Google App Engine检查更新

将应用程序部署到Google App Engine时出现超时错误

如何在 Google App Engine 上设置暂存环境