注意:在未来的几个月内,我们将会重新整理 App Engine 文档网站,使得查找内容更轻松,并更好地与其他 Google Cloud 产品保持一致。将会提供相同的内容,但导航现在将与其余的 Cloud 产品相一致。

App Engine 错误问题排查

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

部署

如果您在使用 App Engine Admin API 部署应用时遇到问题,本页中会列出您可能会看到的错误消息,并提供了解决每个错误的建议。

调用者无权访问项目

部署应用时,系统会出现以下错误:

User EMAIL_ADDRESS does not have permission to access project PROJECT_ID (or it may not exist): The caller does not have permission

如果您用于部署应用的帐号无权为当前项目部署应用,则会发生此错误。

如需解决此问题,请向帐号授予 App Engine Deployer (roles/appengine.deployer) 角色。如需查看用于部署的帐号,请执行以下操作之一:

  • 如果您使用 Google Cloud CLI 进行部署,请运行 gcloud auth list 命令。
  • 如果您从 IDE 部署,请查看 Cloud Tools 插件的设置。

无法从注册表提取元数据

部署应用时,系统会出现以下错误:

Failed to fetch metadata from the registry, with reason: generic::permission_denied

如果您通过没有 Storage Admin (roles/storage.admin) 角色的服务帐号使用 gcloud app deploy 命令,则会发生此错误。

如需解决此问题,请向服务帐号授予 Storage Admin 角色

  • 如需查看您使用的帐号,请运行 gcloud auth list 命令。
  • 如需了解在某些情况下仅分配 App Engine Deployer (roles/appengine.deployer) 角色可能不够的原因,请参阅 App Engine 角色

服务帐号必须具备映像的权限

部署应用时,系统会出现以下错误:

The App Engine appspot and App Engine flexible environment service accounts must have permissions on the image IMAGE_NAME

发生此错误是由以下某种原因造成的:

未能创建 Cloud Build

部署应用时,系统会出现以下错误:

Failed to create cloud build: Permission denied

如果您通过没有 Cloud Build Editor (roles/cloudbuild.builds.editor) 角色的帐号使用 gcloud app deploy 命令,则会发生此错误。

如需解决此问题,请向用于部署应用的服务帐号授予 Cloud Build Editor 角色

如需查看您使用的帐号,请运行 gcloud auth list 命令。

提取应用时出现权限错误

部署应用时,系统会出现以下错误:

Permissions error fetching application apps/app_name. Please make sure you are using the correct project ID and that you have permission to view applications on the project

如果您运行的是 Google Cloud CLI 版本 328 或更高版本,则当您部署应用时,系统会出现以下错误:

Permissions error fetching application apps/app_name. Please
make sure that you have permission to view applications on the project and that
SERVICE_ACCOUNT has the App Engine Deployer (roles/appengine.deployer) role.

如果用于部署应用的帐号没有 App Engine Deployer (roles/appengine.deployer) 角色,则会发生此错误。

如需解决此问题,请确认您已向用于部署应用的服务帐号授予 App Engine Deployer 角色;如果服务帐号没有该角色,请授予该角色。如需查看用于部署的帐号,请执行以下操作之一:

  • 如果您使用 Google Cloud CLI 进行部署,请运行 gcloud auth list 命令。
  • 如果您从 IDE 部署,请查看 Cloud Tools 插件的设置。

等待应用基础架构运行状况恢复正常时超时

部署应用时,系统会出现以下错误:

Timed out waiting for the app infrastructure to become healthy

各种因素都可能会导致此错误,例如缺少权限、代码错误、CPU 或内存不足或健康检查失败。只有在 App Engine 柔性环境中才会发生该错误。

如需解决此问题,请排除以下可能的原因:

  1. 确认您已向默认 App Engine 服务帐号授予 Editor (roles/editor) 角色

  2. 检查项目的组织政策是否限制对外部 IP 地址的访问。如需了解详情,请参阅 App Engine 柔性环境已知问题

  3. 确认您已向用于运行应用的服务帐号(通常是默认服务帐号,即 app-id@appspot.gserviceaccount.com)授予以下角色:

  4. 如果此服务帐号不具有这些角色,请授予这些角色。

  5. 如果您要在共享 VPC 设置中进行部署,并在 app.yaml 中传递 instance_tag,请参阅此部分以解决问题。

使用无服务器 VPC 访问通道连接器部署服务时出现权限错误

部署应用时,系统会出现以下错误:

Please ensure you have [compute.globalOperations.get] on the service project

当尝试使用无服务器 VPC 连接器部署应用的用户或服务帐号没有所需的权限时,便会发生此错误。

要解决此问题,请确保执行部署的用户或服务帐号具有 Serverless VPC Access UserCompute Viewer IAM 角色。

在共享 VPC 设置中进行部署时出现无效值错误

部署应用时,Flex 虚拟机实例的 Cloud Logging 中会显示以下错误:

Invalid value for field 'resource.tags.items[1]': 'aef-instance'. Duplicate
tags are not allowed: aef-instance on compute.instances.insert

出现该错误的原因是设置 instance_tag 会导致系统在创建实例时出错。

要解决此问题,请从 app.yaml 中移除 instance_tag 字段并重新部署。

必需的“compute.firewalls.list”权限

在共享 VPC 网络上部署应用时,系统会出现以下错误:

Request to https://compute.googleapis.com/compute/v1/projects/projects/PROJECT_ID/global/firewalls?key failed, details: Required 'compute.firewalls.list' permission for 'projects/PROJECT_ID'

如果宿主项目的以下服务帐号没有 Compute Network User (roles/compute.networkUser) 角色,则系统会出现此错误:

如需解决此问题,请确认您是否已向宿主项目的 Google API 服务代理和 App Engine 柔性环境服务代理服务帐号授予 Compute Network User 角色;如果这些服务帐号没有该角色,请向其授予该角色。

在部署期间构建失败,但构建日志中没有错误

部署应用时会出现以下错误:

ERROR: (gcloud.app.deploy) Cloud build failed. Check logs at https://console.cloud.google.com/cloud-build/builds/BUILD_ID?project=PROJECT_NUMBER Failure status: UNKNOWN: Error Response: [2] Build failed; check build logs for details

错误消息中出现的链接表明所有构建步骤均已成功执行。但应用构建失败。

如果您使用的是 CMEK(客户管理的加密密钥),或者为 staging.PROJECT_ID.appspot.com 存储分区设置了数据保留政策,则会出现此问题。

如需解决此问题,请更改 staging.PROJECT_ID.appspot.com 存储分区的以下设置:

部署到现有柔性环境版本时出错

部署到现有 App Engine 柔性环境版本时,可能会出现以下错误:

ERROR: (gcloud.app.deploy) Error Response: [9] An internal error occurred while
processing task /app-engine-flex/flex_await_healthy/flex_await_healthy

此错误表示使用有效的 Docker 映像更新健康状况不佳的部署并不总是会产生健康状况良好的部署。结果取决于健康状况不佳的部署中的实例状态。尽管存在错误,但如果您提供了良好的 Docker 映像,则部署最终可能会正常运行。虽然允许使用新的 Docker 映像更新现有版本,但这并不是一种好的做法。

目前,如果版本失败,系统不会回滚。

服务

Nginx 无法连接到应用容器或与之进行通信

以下错误仅发生在 App Engine 柔性环境中,通常会在发生错误后立即返回 502 错误:

recv() failed (104: Connection reset by peer) while reading response header from upstream

此错误表示 nginx 反向代理 (nginx sidecar) 无法访问应用容器。在日志中,您可以将 nginx 日志中的 502 错误的关闭时间与 nginx.error 日志中的时间进行比较。在发生 nginx.error 错误后紧接着发生 502 nginx 错误可能是导致发生 nginx 502 错误的原因。

当应用的连接 keepalive 超时小于 nginx 的 keepalive 超时时,通常会发生此错误。由于 App Engine 柔性环境中的 nginx 的 keepalive_timeout 为 650 秒,因此应用需要使连接至少在此时间中保持活动状态。默认情况下,Node.js 应用的 keepAliveTimeout 为 5000 毫秒。在这种情况下,您可以将 server.keepAliveTimeout 设置为 700000 毫秒。

如需排查问题,请连接到虚拟机实例以检查应用容器中运行的代码写入的日志,并在必要时添加更多日志记录以找到根本原因。