旧版捆绑服务提供的大多数功能现在由 Cloud 客户端库提供。如需了解详情,请参阅下面列出的建议替代方案。
如果您的项目无法迁移到未捆绑的解决方案,则您可以继续 在 Python 3 应用中使用旧版捆绑服务作为备用。这种方法可让您灵活地在迁移周期的后期迁移到未捆绑的服务。
从旧版捆绑服务迁移后,您可以继续使用 App Engine 或迁移到 Cloud Run。Cloud Run 整合了标准环境和柔性环境中的许多最佳功能,在 App Engine 体验的基础上加以改进。如需比较功能并了解迁移方式,请参阅 App Engine 和 Cloud Run 比较指南。
Google Cloud 提供了一些单独的产品,其功能与 Python 2 运行时中的某些捆绑服务类似。对于在 Google Cloud中不能作为单独产品(如图片处理,搜索和消息传递)提供的捆绑服务,本指南建议第三方提供商或其他解决方法。
本页面介绍了每项捆绑服务的迁移路径。
了解 Google Cloud 权限
由于您迁移的应用及其使用的 Google Cloud 服务不再在同一“沙盒”环境中运行,因此您的应用需要获得授权才能访问各项服务。例如,如需与 Datastore 模式的 Firestore (Datastore) 或 Cloud Tasks 进行交互,您的应用需要提供有权访问这些服务的账号的凭据。
默认情况下,App Engine 标准运行时中的应用会提供 App Engine 默认服务账号的凭据,该账号有权访问该应用所在项目中的数据库。
如果满足以下任何条件,则您需要使用明确提供凭据的备用身份验证技术:
您的应用和 Memorystore 数据库位于不同的Google Cloud 项目中。
您已更改分配给默认 App Engine 服务账号的角色。
如需了解备用身份验证技术,请参阅为服务器到服务器的生产应用设置身份验证。
本地开发的身份验证
要在本地开发或测试您的应用,建议创建并使用服务账号。请勿使用 App Engine 默认服务账号,因为它对项目中的所有内容都具有较高级别的权限。 而是应创建并使用具有特定开发和测试任务所需的最低权限级别的服务账号。
如需了解如何设置服务账号并将其与应用关联,请参阅手动获取和提供服务账号凭据。
安装客户端库
从 Python 应用使用 Google Cloud 服务的最简单方法是安装该服务的 Python 客户端库。 Google Cloud 服务还提供 JSON REST 和其他接口。对于 Python 2 应用和 Python 3 应用,将客户端库安装到 App Engine 运行时的步骤有所不同。
为 Python 2 应用安装库
要安装应用在 Python 2 运行时中运行时要使用的库,请执行以下操作:
创建一个用于存储第三方库的目录,如
lib/
。在
app.yaml
文件所在的文件夹中创建requirements.txt
文件,并添加客户端库的名称。例如,以下文件可用于为 Pub/Sub 和 Cloud Tasks 安装库:
google-cloud-pubsub google-cloud-tasks
使用
pip install
将库安装到您创建的文件夹中。 例如:pip install -t lib -r requirements.txt
在应用的
app.yaml
文件的libraries
部分中指定所需的 Google RPC 和setuptools
库以及可选 SSL 库:libraries: - name: grpcio version: 1.0.0 - name: setuptools version: 36.6.0 - name: ssl version: latest
某些客户端库不需要 SSL 库。如果您没有为需要 SSL 库的客户端库添加 SSL 库,当您的应用收到请求时,您会在日志浏览器中看到 SSL 错误。
如果您还没有
appengine_config.py
文件,请在app.yaml
文件所在的文件夹中创建此文件。将以下内容添加到appengine_config.py
文件:# appengine_config.py import pkg_resources from google.appengine.ext import vendor # Set path to your libraries folder. path = 'lib' # Add libraries installed in the path folder. vendor.add(path) # Add libraries to pkg_resources working set to find the distribution. pkg_resources.working_set.add_entry(path)
请务必使用
pkg_resources
模块,该模块确保您的应用会使用正确的客户端库发布版本。上例中的
appengine_config.py
文件假定lib
文件夹位于当前工作目录中。如果您无法保证lib
始终位于当前工作目录中,请指定lib
文件夹的完整路径。例如:import os path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
在您部署应用时,App Engine 会将您在 appengine_config.py
文件中指定的目录中的所有库上传到 Python 2。
为 Python 3 应用安装库
要安装应用在 Python 3 运行时中运行时要使用的库,请执行以下操作:
将库名称添加到应用的
requirements.txt
文件中。例如:google-cloud-ndb
App Engine 会自动将 requirements.txt
文件中列出的所有库上传到 Python 3 运行时。
App Engine 捆绑式服务的迁移路径
Blobstore
如需存储和检索数据,请通过 Google Cloud 客户端库使用 Cloud Storage。 如需开始使用,请参阅使用 Cloud Storage ,以及 从 Blobstore 迁移到 Cloud Storage 指南。如需模拟此迁移,请在示例应用中添加 Blobstore 的使用并迁移到 Cloud Storage。
Datastore
如果 Python 2 应用使用 NDB 与 Datastore 进行交互,请迁移到 Cloud NDB 库。 Cloud NDB 主要用作迁移 Python 2 应用的转换工具。我们建议 Python 3 应用使用 Datastore 模式客户端库。
如需了解详情,请参阅迁移到 Cloud NDB。如需使用示例应用模拟此迁移,请参阅从 App Engine ndb 迁移到 Cloud NDB。
图片
您可以从 Cloud Storage 传送图片,直接传送图片或使用第三方内容分发网络 (CDN)。
如需调整图片大小、转换和处理图片,请使用图片处理库(例如 Pillow),或者 ImageMagick 的 Python 接口。
如需使用某个第三方库,请将该库添加为依赖项,并更新代码以调用该库的 API。
App Engine Images 服务还通过使用传送网址处理图片大小调整来避免向应用发出动态请求。如果您想实现类似功能,可以提前重新调整图片大小,并将其上传到 Cloud Storage 以供传送。或者,您也可以使用具有调整图片大小功能的第三方内容分发网络 (CDN) 服务。
日志记录
我们建议您更新应用以使用 Cloud Logging,它支持以下功能,例如在日志浏览器中查看日志、下载日志、按严重程度过滤消息以及将应用消息与特定请求相关联。或者,如果您更喜欢简单而不是数据准确性,则可以将结构化日志写入 stdout
或 stderr
。如需了解详情,请参阅写入和查看日志 以及迁移到 Cloud Logging。
邮件
如需发送电子邮件,请使用第三方邮件提供程序,例如 SendGrid、Mailgun 或 Mailjet。所有这些服务都提供用于从应用发送电子邮件的 API。 目前没有推荐的第三方入站消息传递替代方案。
Memcache
如需缓存应用数据,请使用 Memorystore for Redis。
有关详情,请参阅将 Memcache 迁移到 Memorystore。如需模拟此迁移,请在示例应用中添加 Memcache 的使用并迁移到 Memorystore for Redis。
对于仅使用 Memcache 来减少 NDB(或 Cloud NDB)请求的延迟时间的应用,请使用 Cloud NDB 对 Redis 的内置支持,而不是 Memcache 或 Memorystore for Redis。
模块
要获取信息并修改应用正在运行的服务,请结合使用环境变量和 App Engine Admin API:
服务信息 | 访问方式 |
---|---|
当前应用 ID | GAE_APPLICATION 环境变量 |
当前项目 ID | GOOGLE_CLOUD_PROJECT 环境变量 |
当前服务名称 | GAE_SERVICE 环境变量 |
当前服务版本 | GAE_VERSION 环境变量 |
当前实例 ID | GAE_INSTANCE 环境变量 |
默认主机名 | Admin API apps.get 方法 |
服务列表 | Admin API apps.services.list 方法 |
服务版本的列表 | Admin API apps.services.versions.list 方法 |
默认的服务版本,包括流量拆分设置(如果有) | Admin API apps.services.get 方法 |
正在运行的某版本实例的列表 | Admin API apps.services.versions.instances.list 方法 |
如需详细了解应用正在运行的服务的可用数据,请参阅 Python 3 运行时环境。
命名空间
借助 Namespaces API,多租户应用只需为每个租户指定唯一的命名空间字符串,即可跨租户划分数据。
Datastore 直接支持多租户,但其他 Google Cloud服务不支持。如果您的多租户应用使用其他 Google Cloud服务,则需要手动处理多租户。要实现完全隔离的服务实例,您可以使用 Cloud Resource Manager API 以编程方式创建新项目,并访问不同项目的资源。
OAuth
请使用 OAuth 2.0 API 的 oauth2.tokeninfo
方法,而不是使用 App Engine OAuth 服务来验证 OAuth 2.0 令牌。
搜索
您可以托管任何全文搜索数据库,例如 Compute Engine 上的 Elasticsearch,并通过您的服务访问该数据库。
任务队列
App Engine Task Queue 服务以两种不同的模式提供。从这两种模式迁移会指向两个不同的独立 Cloud 产品。
推送任务
请使用 Cloud Tasks 客户端库(以 Python 3 标准环境端点作为目标),而不是使用 App Engine Task Queue 推送任务服务来执行异步代码。如需了解详情,请参阅将推送队列迁移到 Cloud Tasks。
如需使用示例应用模拟此迁移,请参阅如何在 Flask 应用中使用 App Engine 推送队列和迁移到 Cloud Tasks。
拉取任务
如果您使用 Task Queue 拉取任务服务(例如由不同工作器处理的排队任务或消息),则 Cloud Pub/Sub 是一个不错的替代方案。它提供类似的功能和交付保证。与其他 Cloud 服务一样,Pub/Sub 提供便捷的客户端库来访问服务。如需了解详情,请参阅编写和响应 Pub/Sub 消息和将 Task Queue 拉取任务迁移到 Pub/Sub 迁移指南。
如需使用示例应用模拟此迁移,请参阅如何使用 App Engine 拉取任务以及迁移到 Pub/Sub。
URL Fetch
默认情况下,Python 2.7 运行时使用 URL Fetch 服务处理出站 HTTP(S) 请求,即使您使用标准 Python 库发出这些请求也是如此。
如果应用直接使用 URL Fetch API(例如,发出异步请求),我们建议您迁移到 Requests 库等标准 Python 库。
如需了解详情,请参阅迁移出站请求。
用户身份验证
如需替代 Users API,请使用用户身份验证页面上说明的任何基于 HTTP 的身份验证机制。