Python 运行时是负责安装 Web 服务代码及其依赖项并运行 App Engine 服务的软件栈。
适用于 App Engine 标准环境的 Python 运行时在 app.yaml
文件中进行声明:
runtime: pythonVERSION
其中,VERSION 是 Python MAJOR
和 MINOR
版本号。例如,如需使用最新的 Python 版本 Python 3.12,请指定 312
。
如需了解其他受支持的 Python 版本以及 Python 版本对应的 Ubuntu 版本,请参阅运行时支持时间表。
Python 3 版本
Python 运行时使用 app.yaml
文件中指定的版本的最新稳定版。App Engine 会自动更新到新的补丁版本,但不会自动更新次要版本。
例如,您的应用可能部署在 Python 3.7.0,并在之后自动更新到 Python 3.7.1,但它不会自动更新到下一个次要版本 Python 3.8.0。
自行试用
如果您是 Google Cloud 新手,请创建一个账号来评估 App Engine 在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
免费试用 App EngineApp Engine 在容器上运行 Python 应用,并由 gVisor 通过最新的 Ubuntu Linux 发行版保护。
依赖项
在部署期间,App Engine 会使用 Python 软件包管理器 pip
来安装项目根目录下 requirements.txt
元数据文件中定义的依赖项。由于 App Engine 会执行全新安装,因此您无需上传依赖项。
目前不支持使用 Pipfile
/Pipfile.lock
标准的依赖项规范,且您的项目中不得存在这些文件。
应用启动
运行时通过运行您在 app.yaml
文件的 entrypoint
字段中指定的命令来启动应用。如果您已在 app.yaml
文件中配置 Gunicorn Web 服务器入口点,则还必须将 gunicorn
添加到 requirements.txt
文件中。
入口点应启动一个 Web 服务器以监听由 PORT
环境变量指定的端口。例如:
entrypoint: gunicorn -b :$PORT main:app
应用使用的 Web 框架负责将请求路由到应用中的相应处理程序。
如果您的应用满足以下要求,并且您未指定 entrypoint
字段,App Engine 将使用 gunicorn
Web 服务器启动您的应用:
您的应用目录根路径包含一个
main.py
文件,内附一个名为app
且与 WSGI 兼容的对象。您的应用不包含
Pipfile
或Pipfile.lock
文件。
如果您没有为 Python 3 运行时指定入口点,则 App Engine 会配置并启动默认的 Gunicorn Web 服务器。
入口点最佳做法
确保运行
app.yaml
中指定的入口点所需的 Python 模块存在于requirements.txt
文件中。仅当app.yaml
文件中明确指定了gunicorn
端点时,才将gunicorn
添加到requirements.txt
文件中。为获得最佳性能,入口点应该是轻量级的,因为每次创建应用的新实例时入口点都会运行。
您可以使用入口点字段调整应用的性能。例如,如果您使用
gunicorn
作为 Web 服务器,则可以使用入口点字段中的--workers
标志配置为您的应用提供服务的工作器的数量。您指定的工作器数量应与 App Engine 应用的实例类相匹配:
实例类 工作器 F1 2 F2 4 F4 8 F4_1G 8 B1 2 B2 4 B4 8 B4_1G 8 B8 8 如需选择工作器数量,可先查看该指南。您可能需要使用不同数量的工作器,具体取决于您的应用的性能特征。下面的示例展示了使用两个
gunicorn
工作器为应用提供服务的 App Engine 部署:entrypoint: gunicorn -b :$PORT -w 2 main:app
我们建议您将 Web 服务器配置为在
$PORT
环境变量指定的端口上侦听和响应 HTTP 请求。使用默认端口8080
可防止 App Engine 使用其 NGINX 层来压缩 HTTP 响应。请注意,如果您使用端口8080
,则有关端口8080
和 NGINX 的警告将显示在应用的日志文件中。
其他 Web 框架
除了 Django 和 Flask 之外,您还可以将其他网络框架与 App Engine 搭配使用,例如 uwsgi
和 Tornado
。以下示例展示了如何将 uwsgi
与 App Engine 搭配使用:
环境变量
以下环境变量由运行时设置:
环境变量 | 说明 |
---|---|
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 |
与您的应用关联的 Google Cloud 项目 ID。 |
PORT |
接收 HTTP 请求的端口。 |
NODE_ENV (仅在 Node.js 运行时中可用) |
当服务已部署时,将其设置为 production 。 |
您可以在 app.yaml
文件中定义其他环境变量,但不能替换上述值(NODE_ENV
除外)。
HTTPS 和转发代理
App Engine 在负载均衡器上终止 HTTPS 连接,并将请求转发到您的应用。某些应用需要确定原始请求 IP 地址和协议。用户的 IP 地址可在标准 X-Forwarded-For
标头中获取。对于需要此信息的应用,应将其 Web 框架配置为信任代理。
文件系统
运行时包含一个完整的文件系统。该文件系统是只读的,但位置 /tmp
除外(该位置是在 App Engine 实例的 RAM 中存储数据的虚拟磁盘)。
元数据服务器
应用的每个实例都可以使用 App Engine 元数据服务器来查询有关实例和项目的信息。
您可以通过以下端点访问元数据服务器:
http://metadata
http://metadata.google.internal
发送到元数据服务器的请求必须包含请求标头 Metadata-Flavor: Google
。此标头表明请求是为了检索元数据值而发出的。
下表列出了您可以针对特定元数据发出 HTTP 请求的端点:
元数据端点 | 说明 |
---|---|
/computeMetadata/v1/project/numeric-project-id |
分配给项目的项目编号。 |
/computeMetadata/v1/project/project-id |
分配给项目的项目 ID。 |
/computeMetadata/v1/instance/region |
实例运行的区域。 |
/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
发送请求。