舊版套裝服務提供的大部分功能,現在都由 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 和其他介面。將用戶端程式庫安裝到 App Engine 執行階段的步驟,會因 Python 2 和 Python 3 應用程式而異。
為 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 程式庫,但您未加入,應用程式收到要求時,Logs Explorer 會顯示 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
如要儲存及擷取資料,請透過 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)。
App Engine Images 服務也可透過服務網址來處理圖片大小調整作業,藉此避免對應用程式發出動態要求。如需類似功能,您可以提前產生經重新調整大小的圖片,並將其上傳至 Cloud Storage 以提供使用。或者,您也可以使用第三方內容傳遞聯播網 (CDN) 服務來調整圖片大小。
記錄
建議您更新應用程式,改用 Cloud Logging。這項服務支援多項功能,例如在 Logs Explorer 中查看記錄、下載記錄、依嚴重程度篩選訊息,以及將應用程式訊息與特定要求建立關聯。或者,如果您偏好簡單而非資料準確度,可以將結構化記錄寫入 stdout 或 stderr。詳情請參閱「寫入及查看記錄」 和「遷移至 Cloud Logging」。
郵件
為提升電子郵件安全性,並確保大量電子郵件能穩定送達,建議您從舊版 Mail API 遷移至以 SMTP 為基礎的電子郵件服務,例如 SendGrid、Mailgun 或 Mailjet。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 方法,驗證 OAuth 2.0 權杖,而非使用 App Engine OAuth 服務。
搜尋
您可以在 Compute Engine 上託管任何全文搜尋資料庫 (例如 Elasticsearch),並從您的服務存取該資料庫。
工作佇列
App Engine 工作佇列服務提供兩種不同模式。無論是哪種情況,都代表要遷移至兩個不同的獨立雲端產品。
推送工作
如要執行非同步程式碼,請使用 Cloud Tasks 用戶端程式庫,並以 Python 3 標準環境端點做為目標,而非使用 App Engine 工作佇列推送工作服務。詳情請參閱「將發送佇列遷移至 Cloud Tasks」。
如要使用範例應用程式模擬這項遷移作業,請參閱「如何在 Flask 應用程式中使用 App Engine 推送佇列」和「遷移至 Cloud Tasks」。
提取工作
如果您使用工作佇列提取工作服務 (例如將個別工作站會處理的工作或訊息排入佇列),Cloud Pub/Sub 會是不錯的替代方案。可提供類似的功能與傳遞保證。與其他 Cloud 服務一樣,Pub/Sub 提供便利的用戶端程式庫,方便您存取服務。詳情請參閱「編寫及回應 Pub/Sub 訊息」和「將 Task Queue 提取工作遷移至 Pub/Sub」遷移指南。
如要使用範例應用程式模擬這項遷移作業,請參閱如何使用 App Engine 提取工作,將範例應用程式遷移至 Pub/Sub。
網址擷取
根據預設,Python 2.7 執行階段會使用網址擷取服務處理傳出 HTTP(S) 要求,即使您使用標準 Python 程式庫發出這些要求也一樣。
如果您的應用程式直接使用 URL Fetch API (例如發出非同步要求),建議您遷移至標準 Python 程式庫,例如 Requests 程式庫。
詳情請參閱「遷移輸出要求」。
使用者驗證
如需 Users API 的替代方案,請使用使用者驗證頁面所述的任何以 HTTP 為基礎的驗證機制。