【问题标题】:What is the difference between an Endpoints service and AppEngine service when they have the same URL?当 Endpoints 服务和 AppEngine 服务具有相同的 URL 时,它们之间有什么区别?
【发布时间】:2023-03-12 09:11:02
【问题描述】:

我在 GCP 的 Endpoints 中有两个服务来托管两个 API

他们是

服务A

服务 B

服务 A 的主机是 projectid.appspot.com

服务 B 的主机是 test-dot-projectid.appspot.com

当我使用 gcloud app 部署我的应用时,部署服务 A 的测试服务 appengine 我的 app.yaml 看起来像这样

runtime: go
env: flex
service: test

endpoints_api_service:
  name: projectid.appspot.com
  rollout_strategy: managed

handlers:
- url: .*  #mandatory
  secure: always  #deprecated in flex environment
  redirect_http_response_code: 301 #optional
  script: _go_app #mandatory

据我了解,该应用已部署到服务 A 的 URL projectid.appspot.com 但带有子域测试所以 test-dot-projectid.appspot.com

但是,从技术上讲,这现在不是在默认服务上部署到服务 B,即 test-dot-projectid.appspot.com

这不会干扰通过服务测试在服务 A 上进行部署吗?有什么区别?

【问题讨论】:

    标签: rest google-app-engine google-cloud-platform google-cloud-endpoints


    【解决方案1】:

    我的理解是:如果服务 A 是“projectid.appspot.com”。只有“projectid.appspot.com”会被路由到 A,而不是“test.projectid.appspot.com”。因此,您可以使用“test.projectid.appspot.com”安全地部署服务 B。但我不确定。你试过了吗?

    【讨论】:

    • 我发现如果我将服务 A 部署到 test.projectid.appspot.com(即通过启用测试服务)它使用服务 A 的配置(例如,在 A 而不是服务 B 中启用了安全密钥)。如果我在启用测试服务的同时部署到服务 B,它将使用服务 B 的配置(例如 B 上未启用安全密钥)。
    • 即使服务 A 的 URL 是“projectid.appspot.com”,我也可以在 URL 是“test.projectid.appspot.com”的测试服务上使用它。同样,服务 B 的 URL 是“test.projectid.appspot.com”,我也可以在 URL 是“test.projectid.appspot.com”的测试服务上使用它。我想看看当我将服务名称更改为 test1 并部署服务 A 和服务 B 时会发生什么,我觉得端点中的主机名几乎与 URL 无关
    【解决方案2】:

    当应用程序具有多个服务时,必须配置服务名称并且必须是唯一的。

    默认项目不需要有服务名称。当应用程序存在单个服务时,情况就是如此。

    当有多个服务(服务A,服务B)时,应用程序必须首先部署到默认服务。之后,每个服务都必须有自己的 app.yaml 文件。

    建议为每个服务配置一个唯一的服务名称,以防止误传。如果没有为每个服务配置唯一的服务名称,默认情况下,它将部署到默认服务的 URL。在您的情况下,由于默认服务 URL 和服务 A 的服务 URL 相同,因此会导致冲突。

    要部署到特定服务的服务名称,您需要指定服务名称及其 app.yaml 文件。

    更多信息请参考:

    规划你的目录结构和 app.yaml 命名: https://cloud.google.com/appengine/docs/flexible/go/configuration-files#directory_structure

    如何在多服务环境中部署到多个或特定服务: https://cloud.google.com/appengine/docs/flexible/go/testing-and-deploying-your-app#deploying_multiple_services

    【讨论】:

    • 我正在读这篇文章,但我觉得服务这个词很模糊,是指 appengine 服务还是端点服务 D:当它说多个服务时,是指多个端点服务吗?这就是服务 A 和 B 的含义
    【解决方案3】:

    App Engine 由应用程序资源组成,这些应用程序资源由一项或多项服务(以前称为模块)组成。每个服务都是代码独立的,可以运行不同的运行时,您可以部署该服务的版本。 URL 是通过用户请求或对服务的 API 调用访问您的应用程序的方式。

    更多信息请见https://cloud.google.com/appengine/docs/standard/python/microservices-on-app-engine#app_engine_services_as_microservices

    端点是 Google Cloud 提供的 Cloud Endpoints Framework 服务的一部分,用于管理、部署、维护和保护您的 API。在 App Engine 中,Endpoint 框架仅在 Python 2.7 和 Java 运行时环境中受支持。它是一个允许您为应用程序生成 REST API 和客户端库的工具。

    有关详细信息,请参阅 https://cloud.google.com/endpoints/docs/frameworks/about-cloud-endpoints-frameworks

    【讨论】:

    • 用户正在使用 Flex。它使用的是 ESP,一个基于 nginx 的代理,而不是框架。
    猜你喜欢
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 2018-01-09
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多