Python 3.9 现已正式发布。

Python 3 运行时环境

Python 3 运行时是负责安装 Web 服务代码及其依赖项并运行服务的软件堆栈。

适用于 App Engine 标准环境的 Python 3 运行时在 app.yaml 文件中进行声明:

Python 3 版本

Python 3 运行时支持 Python 3.7、Python 3.8 和 Python 3.9,并使用 app.yaml 文件中指定的最新稳定版本。App Engine 会自动更新到新的补丁程序版本,但不会自动更新次要版本。

例如,您的应用可能部署在 Python 3.7.0,并在之后自动更新到 Python 3.7.1,但它不会自动更新到下一个次要版本 Python 3.8.0。

亲自尝试

如果您是 Google Cloud 新手,请创建一个帐号来评估 App Engine 在实际应用场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。

免费试用 App Engine

依赖项

在部署期间,App Engine 会使用 Python 软件包管理器 pip 来安装项目根目录下 requirements.txt 元数据文件中定义的依赖项。由于 App Engine 会执行全新安装,因此您无需上传依赖项。

目前不支持使用 Pipfile/Pipfile.lock 标准的依赖项规范,且您的项目中不得存在这些文件。

应用启动

运行时通过运行您在 app.yaml 文件的 entrypoint 字段中指定的命令来启动应用。入口点应启动一个 Web 服务器以侦听由 PORT 环境变量指定的端口。例如:

entrypoint: gunicorn -b :$PORT main:app

应用使用的 Web 框架负责将请求路由到应用中的相应处理程序。

如果您的应用满足以下要求,并且您未指定 entrypoint 字段,App Engine 将使用 gunicorn Web 服务器启动您的应用:

  • 您的应用目录根路径包含一个 main.py 文件,内附一个名为 app 且与 WSGI 兼容的对象。

  • 您的应用不包含 PipfilePipfile.lock 文件。

如果您未指定 entrypoint 字段,App Engine 还会自动将 gunicorn 添加到您的 requirements.txt 文件。

入口点最佳做法

  • 请勿在 requirements.txt 文件中添加 gunicorn,除非您要指定入口点。

  • 为获得最佳性能,入口点应该是轻量级的,因为每次创建应用的新实例时入口点都会运行。

  • 您可以使用入口点字段调整应用的性能。例如,如果您使用 gunicorn 作为 Web 服务器,则可以使用入口点字段中的 --workers 标志配置为您的应用提供服务的工作器的数量。

    您指定的工作器数量应与 App Engine 应用的实例类相匹配:

    实例类 工作器
    F1 1
    F2 2
    F4 4
    F4_1G 8
    B1 1
    B2 2
    B4 4
    B4_1G 8
    B8 8

    如需选择工作器数量,可先查看该指南。您可能需要使用不同数量的工作器,具体取决于您的应用的性能特征。下面的示例展示了使用两个 gunicorn 工作器为应用提供服务的 App Engine 部署:

    entrypoint: gunicorn -b :8080 -w 2 main:app
    

其他 Web 框架

除了 Django 和 Flask 之外,您还可以将其他网络框架与 App Engine 搭配使用,例如 uwsgiTornado。以下示例展示了如何将 uwsgi 与 App Engine 搭配使用:

runtime: python39
entrypoint: uwsgi --http-socket :8080 --wsgi-file main.py --callable app --master --processes 1 --threads 2
uwsgi==2.0.19.1
flask==2.0.1

环境变量

以下环境变量由运行时设置:

环境变量 说明
GAE_APPLICATION App Engine 应用的 ID。此 ID 以“region code~”为前缀,例如“e~”(对于在欧洲部署的应用)。
GAE_DEPLOYMENT_ID 当前部署的 ID。
GAE_ENV App Engine 环境。设置为 standard
GAE_INSTANCE 当前运行您的服务的实例的 ID。
GAE_MEMORY_MB 可供应用进程使用的内存量,以 MB 为单位。
GAE_RUNTIME app.yaml 文件中指定的运行时环境。
GAE_SERVICE app.yaml 文件中指定的服务名称。如果未指定服务名称,则将其设置为 default
GAE_VERSION 服务的当前版本标签。
GOOGLE_CLOUD_PROJECT 与您的应用关联的 Cloud 项目 ID。
PORT 接收 HTTP 请求的端口。

您可以app.yaml 文件中定义其他环境变量,但不能替换上述值。

HTTPS 和转发代理

App Engine 在负载平衡器上终止 HTTPS 连接,并将请求转发到您的应用。某些应用需要确定原始请求 IP 地址和协议。用户的 IP 地址可在标准 X-Forwarded-For 标头中获取。对于需要此信息的应用,应将其 Web 框架配置为信任代理。

文件系统

运行时包含一个完整的文件系统。该文件系统是只读的,但位置 /tmp 除外(该位置是在 App Engine 实例的 RAM 中存储数据的虚拟磁盘)。

元数据服务器

应用的每个实例都可以使用 App Engine 元数据服务器来查询有关实例和项目的信息。

您可以通过以下端点访问元数据服务器:

  • http://metadata
  • http://metadata.google.internal

下表列出了您可以针对特定元数据发出 HTTP 请求的端点:

元数据端点 说明
/computeMetadata/v1/project/numeric-project-id 分配给项目的项目编号。
/computeMetadata/v1/project/project-id 分配给项目的项目 ID。
/computeMetadata/v1/instance/zone 实例运行的区域。
/computeMetadata/v1/instance/service-accounts/default/aliases
/computeMetadata/v1/instance/service-accounts/default/email 分配给项目的默认服务帐号电子邮件地址。
/computeMetadata/v1/instance/service-accounts/default/ 列出项目的所有默认服务帐号。
/computeMetadata/v1/instance/service-accounts/default/scopes 列出默认服务帐号的所有受支持范围。
/computeMetadata/v1/instance/service-accounts/default/token 返回可用于向其他 Google Cloud API 验证您的应用的身份验证令牌。

例如,要检索您的项目 ID,请向 http://metadata.google.internal/computeMetadata/v1/project/project-id 发送请求。