测试和部署应用

区域 ID

REGION_ID 是 Google 根据您在创建应用时选择的区域分配的缩写代码。此代码不对应于国家/地区或省,尽管某些区域 ID 可能类似于常用国家/地区代码和省代码。对于 2020 年 2 月以后创建的应用,REGION_ID.r 包含在 App Engine 网址中。对于在此日期之前创建的现有应用,网址中的区域 ID 是可选的。

详细了解区域 ID

了解如何在本地运行您的应用,以及如何在 App Engine 上部署和测试应用。

在本地运行

如需在部署之前测试应用,请使用您常用的开发工具在本地环境中运行应用。

部署应用

使用 gcloud app deploy 命令将应用部署到 App Engine。

Cloud Build 服务会自动将您的部署构建到容器映像中,并将该映像部署到 App Engine 柔性环境。这个容器包含您对运行时映像所做的全部本地修改。

如需以编程方式部署应用,请使用 Admin API

准备工作

在部署应用之前,请做好以下准备:

部署服务

通过部署应用服务的各个版本及其每个配置文件,将应用部署到 App Engine。

  • 您可以通过分布定位并部署每个文件来部署服务的其他配置文件,例如:

    gcloud app deploy cron.yaml
    gcloud app deploy dispatch.yaml
    gcloud app deploy index.yaml
    
  • 要指定自定义版本 ID,请使用 --version 标志。

  • 要阻止流量自动路由到新版本,请使用 --no-promote 标志。

  • 如需部署到特定 Google Cloud 项目,请使用 --project 标志。

例如,如需将 app.yaml 定义的服务部署到特定 Google Cloud 项目,请为该服务分配一个自定义版本 ID,并阻止流量路由到新版本:

gcloud app deploy --project PROJECT_ID --version VERSION_ID --no-promote

如需了解详情,请参阅 gcloud app deploy 参考。

您可以为 gcloud CLI 设置属性,并创建和管理 SDK 配置,这样就无需在每次部署时都要指定 --project 等标志。

忽略文件

您可以使用 .gcloudignore 文件指定在部署服务时不要上传到 Google Cloud 的文件和目录。如果要忽略不需要随部署上传的构建工件和其他文件,该文件非常实用。

如需详细了解 .gcloudignore 文件的语法,请参阅 gcloud 参考文档

手动构建容器以进行部署

如需在 Google Cloud 外部构建容器映像,请执行以下操作:

  1. 将映像上传到 Artifact Registry 代码库。如需了解详情,请参阅推送和拉取映像
  2. 使用 gcloud app deploy 命令部署到 App Engine。

例如,如果您使用 Docker 在本地构建容器映像,可以将这些映像推送到 Artifact Registry,然后在命令的 --image-url 标志中指定映像的网址:

gcloud app deploy --image-url LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE

您需要进行如下替换:

  • LOCATION 替换为存储映像的代码库的位置。

  • PROJECT-ID 替换为 Google Cloud 项目 ID

  • REPOSITORY 替换为存储映像的代码库的名称。

  • IMAGE 替换为容器映像的名称。

使用自动化持续部署流水线

您可以使用 Cloud Build 在连续部署流水线中自动执行部署。如需了解详情,请参阅 Cloud Build 文档中的部署到 App Engine 以及创建和管理构建触发器

Docker 基础映像

如果您想构建自定义运行时应用,请参阅创建 Docker 文件

查看应用

将应用部署到 App Engine 之后,您可以运行以下命令来启动浏览器,然后访问 https://PROJECT_ID.REGION_ID.r.appspot.com 来查看该应用:

gcloud app browse

在 App Engine 上进行测试

在配置新版本以接收流量之前,您可以在 App Engine 上测试新版本。例如,如需测试 default 服务的新版本,请执行以下操作:

  1. 部署新版本 同时添加 --no-promote 标志:

    gcloud app deploy --no-promote

  2. 转到以下网址以访问新版本:

    https://VERSION_ID-dot-default-dot-PROJECT_ID.REGION_ID.r.appspot.com

    现在,您可以在 App Engine 运行时环境中测试新版本。如需对应用进行调试,您可以在 Google Cloud 控制台的日志浏览器中查看其日志。如需了解详情,请参阅写入应用日志

    发送到 https://PROJECT_ID.REGION_ID.r.appspot.com 的请求仍将路由到先前配置为接收流量的版本。

  3. 如需将流量发送到新版本,请使用 Google Cloud 控制台迁移流量:

    管理版本

    选择刚部署的版本,然后点击迁移流量

如需使用相同的流程来测试其他服务的新版本,您可以将网址中的 default 替换要测试的服务的名称:

https://VERSION-dot-SERVICE-dot-PROJECT_ID.REGION_ID.r.appspot.com

如需详细了解如何定位特定服务和版本,请参阅请求的路由方式

使用构建环境变量

您可以为支持 buildpack 的运行时设置构建环境变量。

构建环境变量是键值对,您可以指定这些键值对来配置用于部署应用的 buildpack。例如,您可能希望指定编译器选项。

须知事项:

  • 键必须以大写的 ASCII 字母开头,并且可以包含大写的 ASCII 字母、数字和下划线。
  • 您应该避免创建具有 GOOGLE_* 键前缀的任何变量。
  • 以下键均预留给 Google 使用:
    • GOOGLE_RUNTIME
    • GOOGLE_RUNTIME_VERSION
    • GOOGLE_ENTRYPOINT
    • GOOGLE_DEVMODE
  • 您可以使用 Buildpack 支持的任何密钥。

如需将环境变量与 Buildpack 搭配使用,请在 app.yaml 文件中指定 build_env_variables 字段。

详细了解 Buildpack。

使用 Cloud Trace

Cloud Trace 对于了解请求如何在您的应用中传播非常有用。您可以检查单个请求的详细延迟时间信息,也可以查看整个应用的总体延迟时间。

您可以查看跟踪记录详情。在 Trace 探索器中,您可以按特定 App Engine 服务和版本进行过滤。

问题排查

下面是部署应用时您可能遇到的常见错误消息:

PERMISSION_DENIED: Operation not allowed
The "appengine.applications.create" permission is required.
如果 Google Cloud 项目不包含所需的 App Engine 应用,则 gcloud app deploy 命令在尝试运行 gcloud app create 命令时可能会失败。只有拥有 Owner 角色的账号才具备创建 App Engine 应用所需的权限。
502 Bad Gateway
如果 app.yaml 配置错误,则 Google Cloud 项目可能无法启动。检查应用日志,了解更详细的错误消息。
[13] An internal error occurred while creating a Cloud Storage bucket.

App Engine 会代表您在创建应用的同一区域中创建默认的 Cloud Storage 多区域存储桶。它需要使用此存储桶来存储应用的内容。当无法创建此存储桶时,系统会返回此错误,例如在以下情况下:

例如,如果您的 App Engine 应用是在 europe-west 区域中创建的,即使该区域映射到 europe-west1 位置,您也必须修改限制条件以允许 in:eu-locations(包括所有 EU 区域)中的资源。这是必要的操作,因为 App Engine 创建的存储桶是多区域资源。如果您的 App Engine 应用是在 US 区域中创建的,您必须允许 in:us-locations;如果您的应用是在 ASIA 区域中创建的,则必须允许 in:asia-locations

[13] An internal error occurred.

如果您通过使用共享 VPC 设置的网络配置来部署服务,则可能会发生此错误。请尝试以下操作:

  1. 确保您的 app.yaml 配置有效。
  2. 确保您的 App Engine 柔性环境满足共享 VPC 设置的所有要求。请参阅在共享 VPC 网络中使用 App Engine 柔性环境
  3. 确保您的项目中存在已配置的服务账号。如果没有,您必须恢复账号。共享 VPC 宿主项目中的子网区域必须与创建 App Engine 环境的位置相匹配。

如果问题仍然存在,请使用 Google Cloud SDK 重新部署您的服务。确保添加 --verbosity=debug 标志。请联系 Google Cloud 支持团队并提供命令的输出。

IP space of {USER_SUBNETWORK_NAME} is exhausted and needs to be expanded.

如果部署失败并显示此错误消息,则表示为 App Engine 服务配置的网络没有剩余地址可分配给服务的新实例。如需解决此问题,请在为 App Engine 柔性环境服务配置的子网上扩展 VPC 范围