App Engine 柔性环境不提供 App Engine SDK 中的 API 库。如果您决定将应用从 App Engine 标准环境迁移到柔性环境,则必须更新代码,以使用所有 Google Cloud 环境通用的服务和 API。
如需了解如何将特定的旧版捆绑式服务和 API 从标准环境迁移到柔性环境,请参阅下文。
标准环境与柔性环境的区别
除此处概述的主要区别之外,具有 /_ah/
的路径在柔性环境中不会被屏蔽。如果标准环境中运行的应用使用包含 /_ah/
的路径访问特定服务,请参阅下文相应部分。
应用身份
在柔性环境中运行应用时,您可以结合使用环境变量与 Compute Engine 元数据服务来获取应用的相关信息:
应用信息 | 访问方式 |
---|---|
应用/项目 ID | 元数据服务器中的 GOOGLE_CLOUD_PROJECT 环境变量或 /project/project-id 资源 |
默认主机名 | App Engine Admin API apps.get 方法 |
服务账号名称 | 元数据服务器中的 /instance/service-accounts 资源 |
OAuth 2.0 访问令牌 | 元数据服务器中的 /instances/service-accounts 资源。请参阅 Compute Engine 的使用服务账号凭据进行身份验证文档。 |
以下功能不能直接使用:
- 项目未设置默认的 Cloud Storage 存储桶。如需在应用中使用存储桶,您可以创建 Cloud Storage 存储桶,并用项目 ID 作为存储桶名称。然后,在应用中便可使用
GOOGLE_CLOUD_PROJECT
环境变量作为存储桶名称。 - 您不能使用默认服务账号签署 blob。如需解决此问题,您可以使用 Identity and Access Management (IAM) API 或者在部署应用时为其提供服务账号私钥。
- 同样,没有内置 API 供您获取验证签名所需的公共证书。不过,每个服务账号的公共证书都可以在
https://www.googleapis.com/robot/v1/metadata/x509/{service account email}
上找到。 - 请注意,如果您使用 Java 运行时,则 App Engine SystemProperty API 将不适用于 App Engine 柔性环境。不过,您可以按照定义环境变量中的说明设置
app.yaml
中的环境变量,并使用System.env
获取值。
如需详细了解环境变量,请参阅运行时概览页面或 app.yaml
参考页面。
后台线程
由于柔性环境没有沙盒限制,所以您可以随意创建在请求环境之外执行的线程或进程。为此,通常您只需要借助所使用语言的内置线程或多进程工具。
Blobstore
无论是在标准环境还是柔性环境中,Cloud Storage 都已经基本取代了 Blobstore 服务。您可以使用 Google Cloud 客户端库在 Cloud Storage 中存储和检索数据。
如需了解详情,请参阅使用 Cloud Storage
功能
在标准环境之外,不存在与 Capabilities 服务类似的功能。
Websocket
App Engine 柔性环境支持 websocket。如需了解详情,请参阅使用 WebSocket 创建持久连接。
Datastore 模式的 Firestore (Datastore)
您可以随时随地使用 Datastore API 访问 Datastore,也可以使用 Google Cloud 客户端库在 Datastore 中存储和检索数据。
不论您是使用 App Engine 库、Google Cloud 客户端库,还是直接调用 API,所访问的都是同样的 Datastore 数据。
如果您使用的是 Python ndb
库,并且更喜欢 NDB 样式的 Datastore 访问权限,我们建议您迁移到 Cloud NDB。如需了解详情,请参阅 Cloud NDB 代码库。
虽然 Python 2 和 3 均支持 Cloud NDB 和 Datastore 客户端库,并且适用于 App Engine 标准环境或柔性环境以及非 App Engine 应用,但它们的主要的目的是帮助 Python 2 开发者弃用 App Engine ndb
等捆绑式旧式服务。
Cloud NDB 还有一个额外的目标,就是保留 NDB 用户体验。
如需了解详情,请参阅使用 Datastore。
图片
图片服务在标准环境之外不可用。 不过,您可以直接从应用或 Cloud Storage 传送图片。
如果您需要执行图片处理,可以安装并使用任意图片处理库,如:
- Pillow for Python
- Java 中的 ImageJ2、imgscalr 或 thumbnailator
- imaging(适用于 Go)
- GD 或 ImageMagick(适用于 PHP)
图片服务还可通过一个传送网址重新调整图片大小,以免应用需要处理此类动态请求。如果您想实现类似功能,可以提前重新调整图片大小,并将其上传到 Cloud Storage 以供传送。或者,您也可以使用具有调整图片大小功能的第三方内容分发网络 (CDN) 服务。
如需更多资源,请参阅以下指南:
日志记录
与标准环境一样,柔性环境也会自动进行日志记录。不过,日志会以不同的格式收集。
日志不会被请求捆绑,并且来自 stdout
和 stderr
的日志是分开收集的。
如果您想要进一步控制应用日志记录,并希望能对日志进行分组以及记录其他元数据,可以直接将 Cloud Logging API 与 Google Cloud 客户端库搭配使用。
如需了解详情,请参阅写入应用日志。
邮件
App Engine 邮件服务在标准环境之外不可用。 您将需要使用第三方邮件提供程序(例如 SendGrid、Mailgun 或 Mailjet)发送电子邮件。所有这些服务都提供可从在任意位置运行的应用发送电子邮件的 API。
如需了解详情,请参阅使用第三方服务发送消息。
Memcache
Memcache 服务在 App Engine 柔性环境中不可用。如需缓存应用数据,请使用 Memorystore for Redis。
模块
Modules API 在标准环境之外不可用。不过,您可以结合使用环境变量与 App Engine Admin API 来获取应用中正在运行的服务的相关信息并修改这些服务:
服务信息 | 访问方式 |
---|---|
当前服务名称 | GAE_SERVICE 环境变量 |
当前服务版本 | GAE_VERSION 环境变量 |
当前实例 ID | GAE_INSTANCE 环境变量 |
默认主机名 | App Engine Admin API apps.get 方法 |
服务列表 | App Engine Admin API apps.services.list 方法 |
服务版本的列表 | App Engine Admin API apps.services.versions.list 方法 |
默认的服务版本,包括流量拆分设置(如果有) | App Engine Admin API apps.services.get 方法 |
正在运行的某版本实例的列表 | App Engine Admin API apps.services.versions.instances.list 方法 |
您还可以使用 App Engine Admin API 部署和管理应用中的服务和版本。
如需详细了解环境变量,请参阅运行时概览页面或 app.yaml
参考页面。
命名空间
在标准环境之外,只有 Datastore 直接支持多租户。对于其他服务,您需要手动处理多租户。如需实现完全隔离的服务实例,您可以使用 Cloud Resource Manager API 以编程方式创建新项目,并访问不同项目的资源。
OAuth
OAuth 服务在柔性环境中不可用。如果您需要验证 OAuth 2.0 令牌,可以使用 OAuth 2.0 API 的 oauth2.tokeninfo
方法进行验证。
远程
Remote API 服务不适用于柔性环境。大多数支持性服务(如 Datastore),凡可从柔性环境访问,则也可从任何地方访问。
搜索
Search 服务目前在柔性环境之外不可用。您可以托管任何全文搜索数据库,例如 Compute Engine 上的 Apache Solr 或 Elastic Cloud 上的 Elasticsearch Service,并在标准环境和柔性环境中对其进行访问。
套接字
柔性环境没有沙盒限制,您可以正常打开和使用出站套接字。
Task Queue
如需在第一代标准环境之外使用推送 Task Queue 服务,您可以使用 Google Tasks。
在可能使用拉取队列(如由单独工作器拉取和处理的队列任务或消息)的许多情况中,您可以使用 Pub/Sub 作为备用选择,此工具能提供类似功能,保证送达。
URL Fetch
URL Fetch 服务在柔性环境中不可用。不过,由于不存在沙盒限制,因此您的应用可以使用任何 HTTP 库来实现 URL Fetch 功能。
如果您使用 Python,我们建议您使用请求。如果您使用 Java,我们建议使用 Java 版 Google HTTP 客户端库或 OkHttp。
用户
Users 服务在标准环境之外不可用。 在柔性环境中,您可以使用基于 HTTP 的任何身份验证机制,例如:
- Google Identity Platform,提供诸多 Google 用户账号身份验证和授权选项。
- Firebase 身份验证,使用用户名/密码以及 Google、Facebook、Twitter 等联合身份服务进行身份验证。
- Auth0,结合使用各家身份提供商和单点登录功能进行身份验证。
- OAuth 2.0 和 OpenID Connect,用于提供您所选提供商提供的联合身份。Google 是 OpenID Connect 身份提供商之一。您还可以在若干其他提供商之中进行选择。
请注意,由于用户服务不可用,因此无法使用 appengine-web.xml
(对于 Java)或 app.yaml
(对于其他运行时)来实现只有管理员可访问网址的设置。您需要在应用内处理此逻辑。
后续步骤
如需简要了解柔性环境与标准环境的主要区别以及针对使用这两种环境的应用的指南,请参阅适用于标准环境用户的 App Engine 柔性环境。