App Engine 柔性环境中的已知问题

区域 ID

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

详细了解区域 ID

如需查阅已知问题的完整列表或报告新问题,请参阅问题跟踪器

  • 使用 gcloud app deploy 部署应用后,您可能需要等待 1-2 分钟,应用才会开始在 https://PROJECT_ID.REGION_ID.r.appspot.com 提供服务。在此之前,您可能会看到 HTTP 503 错误。

  • 如果您的项目有限制对外部 IP 的访问权限的组织政策,您将无法部署使用外部 IP 地址的 App Engine 柔性环境应用。例如,组织政策可能如下所示:

    • constraints/compute.vmExternalIpAccess 的有效政策设置为 DENY_ALL
    • constraints/compute.vmExternalIpAccess 的有效政策设置为仅允许特定虚拟机实例。
    • 为项目停用 constraints/compute.requireOsConfig 的有效政策以防止元数据更新。

    这些限制不会被自动检测到,因此部署可能会超时并失败。您可以通过运行命令 gcloud beta resource-manager org-policies describe compute.vmExternalIpAccess --project=my-project --effective 来检查项目的组织政策。 您还可以替换特定项目的组织政策

    不过,即使设置了此类组织政策,您也可以部署仅使用其内部 IP 地址的专用 App Engine 柔性环境应用。

  • 在包含 gcloud app deploy 的 App Engine 柔性环境中部署现有服务的新版本后,App Engine 信息中心“摘要”图表中显示的“计数/秒”指标可能会大幅减少。该指标将在接下来的 5-10 分钟内逐步恢复到预期的请求计数。

    这并不意味着应用处理的请求要少。部署应用的新版本时,新版本准备好处理请求的时间与新实例的指标可用的时间之间存在延迟。

    要确保该指标不受新版本部署的影响,请执行以下操作:

    1. 使用 gcloud app deploy --no-promote 部署新版本。
    2. 部署完成后等待 15 分钟。
    3. 将流量迁移到新版本

    如果您使用 --no-promote 进行部署,但在部署完成后 15 分钟的时间段内,将流量分配给新版本,则此指标可能会受到影响。

  • 在 App Engine 柔性环境中,无法配置 app.yaml,以便您的应用自动将请求重定向到始终使用 HTTPS。这与 App Engine 标准环境不同,您可以在其中使用 secure 设置。

    作为替代方案,您可以通过解析 X-Forwarded-Proto 标头的值来处理应用代码内的重定向。您还可以鼓励客户端使用 Strict-Transport-Security 标头

  • 如果您为 App Engine 柔性环境版本分配用户管理的服务账号,则系统可能会根据前缀为 agent.googleapis.com 的指标对您的项目收取费用。这些代理指标通常不会计入您的项目。我们建议您继续使用 App Engine 默认服务账号,直到此问题得到解决。

  • 您无法使用 IAP 建立与虚拟机实例的 SSH 连接。

实例数量意外减少

  • 在极少数情况下,您的应用可能会发生由于可用区故障或整个实例组停止响应而导致实例数量意外减少。为避免这种情况,Google 建议超额预配应用,以防止系统发生低于实例数下限的情况。您可以在部署 App Engine 柔性环境应用时设置其 min_num_instances 大小。可能会影响 App Engine 柔性环境实例数下限的事件包括:

    1. 发布柔性环境实例更新
    2. 可用区性故障(缺货问题,例如您的区域已达到所选 CPU 容量等等)

    App Engine 柔性环境使用 3 个可用区分布实例,在此类配置中,我们建议预配的实例数比所需多 50%。

Cloud Load Balancing 指标不一致

App Engine 柔性环境信息中心仅显示通过柔性环境管理的后端路由的请求的所有指标。如果您将 App Engine 柔性环境与 Cloud Load Balancing 结合使用,则 App Engine 指标表中的某些指标会报告为 loadbalancing 表中的指标。如需了解详情,请参阅 HTTP(S) 负载均衡日志记录和监控

在健康检查失败期间,使用 JVM 的运行时出现 InterruptedException

如果健康检查失败,虚拟机会关停。作为应用容器健康状况不佳的症状,JVM 会以 InterruptedExceptionNullPointerException 错误作为响应。处理程序可以响应容器在关停期间发送的 SIGTERM 信号,以执行所有必要的清理或调试操作,从而防止出现异常。