配置文件

服务的每个版本都在 .yaml 文件中定义,此文件提供相应服务和版本的名称。YAML 文件通常与其定义的服务同名,但这不是必需的。如果您要部署一项服务的多个版本,则可以在同一目录中创建多个 yaml 文件,每个文件对应一个版本。

通常,您可以为每项服务创建一个目录,以包含相应服务的 YAML 文件和关联的源代码。可选的应用级配置文件(dispatch.yamlcron.yamlindex.yamlqueue.yaml)包含在顶级应用目录中。以下示例展示了三项服务。在 service1service2 中,源文件与 YAML 文件处于同一级别。在 service3 中,有两个版本的 YAML 文件。

YAML 服务的层次结构图

对于小型简单项目,应用的所有文件都可以位于一个目录中:

小型 YAML 服务的层次结构图

每个 YAML 文件都必须包含版本参数。如需定义默认服务,您可以在文件中明确声明参数 service: default 或者不作声明。

每项服务的配置文件都定义了特定服务/版本的扩缩类型和实例类别。使用的扩缩参数取决于您指定的扩缩类型。如果未指定扩缩类型,则默认为自动扩缩。app.yaml 参考文档部分介绍了扩缩和实例类别设置。

对于每项服务,您还可以指定相应设置,以将网址请求映射到特定脚本以及识别静态文件,进而提高服务器效率。这些设置也包含在 yaml 文件中,并在 app.yaml 参考文档部分进行了说明。

default 服务

每个应用都有一项默认服务。您可以在 app.yaml 中使用 service: default 设置定义默认服务,但并不强制要求这样做。与服务相关的所有配置参数都可以应用于默认服务。

可选配置文件

以下配置文件可以对应用于应用中所有服务的可选功能进行控制:

  • dispatch.yaml 可以凌越路由默认规则,方法是根据网址中的路径或主机名将传入的请求发送到特定服务。
  • queue.yaml 配置推送队列和拉取队列。
  • index.yaml 指定使用 Datastore 查询时您的应用需要哪些索引。
  • cron.yaml 配置在规定的时间或按固定时间间隔运行的计划任务。

要将这些配置文件的更新部署到 App Engine,请从这些文件所在的目录中运行以下命令:

    gcloud app deploy [CONFIG_FILE]

示例

以下示例演示了如何为具有以下三项服务的应用配置 YAML 文件:处理网络请求的默认服务,以及另外两项处理移动请求和进行后端处理的服务。

首先定义一个名为 app.yaml 的配置文件,该文件将处理所有与 Web 相关的请求:

runtime: php55
api_version: 1
threadsafe: true

如果此应用的 Google Cloud 控制台项目 ID 是 simple-sample,则此配置将创建具有自动扩缩功能且公开地址为 https://simple-sample.uc.r.appspot.com 的默认服务。

接下来,假设您要创建一项服务来处理移动网络请求。考虑到移动用户的需求(在本示例中),最长等待延迟时间仅为一秒,并且我们将始终具有至少两个实例处于空闲状态。如需进行此项配置,您需要创建一个 mobile-frontend.yaml 配置文件,其中包含以下内容:

service: mobile-frontend
runtime: php55
api_version: 1
threadsafe: true

automatic_scaling:
  min_idle_instances: 2
  max_pending_latency: 1s

此文件创建的服务随后可通过 https://mobile-frontend-dot-simple-sample.uc.r.appspot.com 进行访问。

最后,添加一项名为 my-service 的服务来处理静态后端工作。这可能是一项持续作业,用于将数据从 Datastore 导出到 BigQuery。工作量相对固定,因此您在任意给定时间只需要一项常驻服务。此外,这些作业需要进行大量内存处理,因此您需要内存配置更高的服务。如需进行此项配置,您需要创建一个 my-service.yaml 配置文件,其中包含以下内容。

service: my-service
runtime: php55
api_version: 1
threadsafe: true

instance_class: B8
manual_scaling:
  instances: 1

此文件创建的服务随后可通过 https://my-service-dot-simple-sample.uc.r.appspot.com 进行访问。

请注意 manual_scaling: 设置。instances: 参数会告知 App Engine 要为此服务创建多少实例。