將服務從標準環境遷移至彈性環境

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 彈性環境就無法使用 App Engine SystemProperty API。但您可以在 app.yaml 中設定環境變數,並使用 System.env 來取得值,如定義環境變數一節所述。

如要進一步瞭解環境變數,請參閱執行階段總覽頁面或 app.yaml 參考頁面

背景執行緒

由於彈性環境沒有沙箱限制,因此您可以將執行緒或程序任意建立於要求環境之外。您通常只需使用語言內建的執行緒或多重處理工具,不需要任何其他工具。

Blobstore

標準與彈性環境中的 Blobstore 服務用途大多已由 Cloud Storage 取代,使用 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 存放區

雖然 Cloud NDB 和 Datastore 用戶端程式庫都支援 Python 2 和 3,並且適用於 App Engine 標準環境或彈性環境,以及非 App Engine 應用程式,但它們的主要目的是協助 Python 2 開發人員捨棄 App Engine ndb 等已整合的舊服務。Cloud NDB 的另一個目標是保留 NDB 使用者體驗。

詳情請參閱「使用 Datastore」。

圖片

Images 服務只在標準環境中提供,但您可以直接透過應用程式或 Cloud Storage 輕鬆提供圖片功能。

如果您需要進行圖片處理作業,可以安裝並使用任何圖片處理程式庫,例如:

Images 服務也可透過服務網址來處理圖片大小調整作業,藉此避免對應用程式發出動態要求。如需類似功能,您可以提前產生經重新調整大小的圖片,並將其上傳至 Cloud Storage 以提供使用。或者,您也可以使用第三方內容傳遞聯播網 (CDN) 服務來調整圖片大小。

如需更多資源,請參閱下列指南:

記錄

與標準環境類似,記錄服務在彈性環境中也屬於自動處理的作業,只是收集記錄的格式有所不同。記錄不會依要求綑綁在一起,且 stdoutstderr 的記錄會分開收集。

如要進一步控管應用程式的記錄功能、將記錄分組的能力,以及記錄其他中繼資料的能力,您可以直接將 Cloud Logging API 與 Google Cloud 用戶端程式庫搭配使用。

詳情請參閱「寫入應用程式記錄」一文。

郵件

App Engine Mail 服務只在標準環境中提供,您需要使用 SendGridMailgunMailjet 等第三方電子郵件服務供應商來傳送電子郵件。這些服務均提供 API,可讓您透過在任何位置執行的應用程式傳送電子郵件。

詳情請參閱「利用第三方服務傳送訊息」。

Memcache

App Engine 彈性環境不提供 Memcache 服務。如要快取應用程式資料,請使用 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 APIoauth2.tokeninfo 方法。

遠端

Remote API 服務不適用於彈性環境,大多數可以在彈性環境中存取的後端支援服務 (如 Datastore),都能從任意位置存取。

Search 服務目前只在彈性環境中提供,您可以在 Compute Engine 上託管任何全文搜尋資料庫 (例如 Apache Solr) 或 Elastic Cloud 上的 Elasticsearch 服務,並且從標準環境和彈性環境存取該資料庫。

通訊端

彈性環境沒有沙箱限制,因此您可以照常開啟及使用傳出通訊端。

工作佇列

如要在第一代標準環境以外的環境中使用推送工作佇列服務,請使用 Google Tasks

在許多情況下,當您需要使用提取佇列時 (例如將個別工作提取及處理的工作或訊息排入佇列),Pub/Sub 可以提供類似的功能與傳遞保證,因此是不錯的替代方案。

網址擷取

彈性環境不提供網址擷取服務,但由於沒有沙箱限制,因此應用程式可以使用任何 HTTP 程式庫取得網址擷取功能。

如果您使用 Python,建議您使用 Requests。如果您使用的是 Java,建議您使用 Java 專用 Google HTTP 用戶端程式庫OkHttp

使用者

Users 服務只在標準環境中提供,您可以在彈性環境中使用任何以 HTTP 為基礎的驗證機制,例如:

請注意,由於未提供 Users 服務,因此無法使用 appengine-web.xml (適用於 Java) 或 app.yaml (適用於其他執行階段),將網址設為僅可由管理員存取。您必須在應用程式中處理這個邏輯。

後續步驟

如要瞭解彈性環境與標準環境之間的主要差異,以及同時使用這兩種環境的應用程式指南,請參閱 App Engine 標準環境使用者適用的 App Engine 彈性環境一文。