区域 ID
REGION_ID
是 Google 根据您在创建应用时选择的区域分配的缩写代码。此代码不对应于国家/地区或省,尽管某些区域 ID 可能类似于常用国家/地区代码和省代码。对于 2020 年 2 月以后创建的应用,REGION_ID.r
包含在 App Engine 网址中。对于在此日期之前创建的现有应用,网址中的区域 ID 是可选的。
详细了解区域 ID。
了解如何在本地运行您的应用,以及如何在 App Engine 上部署和测试应用。
在本地运行
如需在部署之前测试应用的功能,请用您经常使用的开发工具在本地环境中运行应用。
如需了解详情(包括如何根据您的插件使用特定的命令),请参阅 Java 8/Jetty 9 运行时的本地测试或 Java 8 运行时的本地测试。部署应用
准备工作
在部署应用之前,请做好以下准备:
Cloud 项目的 Owner 必须启用 App Engine。
确保您的用户帐号具备所需的权限。
部署服务
您可以使用任何受支持的工具,将 Java 应用部署到 App Engine 柔性环境。对于命令行部署,请使用 gcloud CLI 中的 gcloud app deploy
,或者使用 Maven 或 Gradle 插件。如果使用 IDE 进行部署,可使用 IntelliJ 或 Eclipse 插件。如需以编程方式部署应用,请使用 Admin API。
忽略文件
您可以使用 .gcloudignore
文件指定在部署服务时不要上传到 Google Cloud 的文件和目录。如果要忽略不需要随部署上传的构建工件和其他文件,该文件非常实用。
如需详细了解 .gcloudignore
文件的语法,请参阅 gcloud
参考文档。
手动构建容器以进行部署
如需在 Google Cloud Platform 之外构建容器映像,您必须先将映像上传到容器映像存储区中,然后才能使用 gcloud app deploy
命令将映像部署到 App Engine。
例如,如果您使用 Docker 在本地构建容器映像,可以将这些映像推送到 Google Container Registry,然后在命令的 --image-url
标志中指定映像的网址:
gcloud app deploy src/main/appengine/app.yaml --image-url gcr.io/YOUR_PROJECT_ID/YOUR_CONTAINER_IMAGE
使用自动连续部署流水线
您可以使用 Cloud Build 在连续部署流水线中自动执行部署。如需了解详情,请参阅 Cloud Build 文档中的部署工件和使用构建触发器自动构建。
适用于 Java 的 Docker 基础映像
如果您想从头开始构建 Java 自定义运行时应用,请在 Dockerfile 文件中使用提供的基础映像:
运行时 | Docker 命令 |
---|---|
Java 8 | FROM gcr.io/google_appengine/openjdk |
Java 8/Jetty 9 | FROM gcr.io/google-appengine/jetty |
查看应用
将应用部署到 App Engine 之后,您可以运行以下命令来启动浏览器,然后访问 https://PROJECT_ID.REGION_ID.r.appspot.com
来查看该应用:
gcloud app browse
在 App Engine 上执行测试
在配置新版本以接收流量之前,您可以在 App Engine 上测试新版本。例如,要测试 default
服务的新版本,请执行以下操作:
部署新版本,其中将
promote
参数设置为false
:- 使用 Maven,在
pom.xml
文件中设置promote
参数。 - 使用 Gradle,在
gradle.build
文件中设置promote
参数。
- 使用 Maven,在
转到以下网址以访问新版本:
https://VERSION_ID-dot-default-dot-PROJECT_ID.REGION_ID.r.appspot.com
现在,您可以在 App Engine 运行时环境中测试新版本。如需对应用进行调试,您可以在 Google Cloud Console 的日志浏览器中查看其日志。如需了解详情,请参阅写入应用日志。
发送到
https://PROJECT_ID.REGION_ID.r.appspot.com
的请求仍将路由到先前配置为接收流量的版本。如需将流量发送到新版本,请使用 Google Cloud 控制台迁移流量:
选择刚部署的版本,然后点击迁移流量。
如需使用相同的流程来测试其他服务的新版本,您可以将网址中的 default
替换要测试的服务的名称:
问题排查
下面是部署应用时您可能遇到的常见错误消息:
PERMISSION_DENIED: Operation not allowed
The "appengine.applications.create" permission is required.
- 如果 Cloud 项目不包含所需的 App Engine 应用,则
gcloud app deploy
命令在尝试运行gcloud app create
命令时可能会失败。只有拥有 Owner 角色的帐号才具备创建 App Engine 应用所需的权限。 502 Bad Gateway
- 如果
app.yaml
配置错误,Cloud 项目无法启动。检查应用日志,了解更详细的错误消息。 [13] An internal error occurred while creating a Cloud Storage bucket.
App Engine 将代表您在应用创建的同一区域中创建默认的 Cloud Storage 多区域存储桶。此存储桶是存储应用内容所必需的。无法创建此存储桶时,在以下情况下会返回此错误:
默认 App Engine 柔性环境服务代理在项目中不存在,或者没有
App Engine flexible environment Service Agent
角色。您可以通过向代理的服务帐号授予正确的 IAM 权限,在项目中重新添加该服务帐号。您的项目中不存在 App Engine 服务帐号。如果 App Engine 服务帐号已在删除后 30 天内移除,您可以将其恢复。
您的项目隶属于执行
constraints/gcp.resourceLocations
政策的组织,并且该组织不允许在创建您的 App Engine 的同一区域上创建资源。您将需要替换针对您的项目强制执行的constraints/gcp.resourceLocations
政策,并允许在创建您的 App Engine 应用的同一区域中使用多区域位置。
[13] An internal error occurred.
如果您使用共享 VPC 设置部署具有网络配置的服务,则可能会发生此错误。确保您的 App Engine 柔性环境满足此配置的所有要求。接下来,请确保您的项目中存在为此设置配置的服务帐号,否则,您必须恢复帐号。请注意,共享 VPC 宿主项目中子网的区域必须与创建 App Engine 环境的位置相匹配。
如果在确保
app.yaml
配置有效后此问题仍然存在,请使用 Google Cloud SDK 重新部署您的服务,添加--verbosity=debug
标志,然后联系 GCP 支持并提供该命令的输出。IP space of {USER_SUBNETWORK_NAME} is exhausted and needs to be expanded.
如果部署失败并显示此错误消息,则表示为 App Engine 服务配置的网络没有剩余地址可分配给服务的新实例。您可以通过在针对 App Engine 柔性环境服务配置的子网上扩展 VPC 范围来解决此问题。