如何将新服务部署到 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:Can a default service/module in a Google App Engine app be a sibling of a non-default one in terms of folder structure?)通常,您为每个服务创建一个目录,其中包含 服务的 YAML 文件和相关的源代码。可选的 应用程序级配置文件 (
dispatch.yaml
,cron.yaml
,index.yaml
和 queue.yaml
) 包含在***应用程序中 目录。下面的示例显示了三个服务。在service1
和service2
,源文件与 YAML 文件处于同一级别。 在service3
中,有两个版本的 YAML 文件。
【讨论】:
【参考方案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 中的现有应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 socket.io 部署到 Google App Engine?
如何减少 Google App Engine 部署的 ktor App 文件大小