舊版套裝服務提供的大部分功能,現在由 Cloud 用戶端程式庫提供。詳情請參閱下方的建議替代方案。
如果專案無法遷移至未綁定的解決方案,您或許可以繼續在 Python 3 應用程式中使用舊版綁定服務,做為備用方案。這個做法可讓您在遷移週期稍後,彈性改用未綁定的服務。
從舊版套裝服務遷移後,您可以繼續使用 App Engine,或遷移至 Cloud Run。Cloud Run 結合了標準環境和彈性環境的多項優質功能,可以改良 App Engine 服務。如要比較功能及瞭解如何遷移,請參閱 App Engine 和 Cloud Run 比較指南。
Google Cloud 獨立產品提供的功能與 Python 執行階段中的某些舊版服務套裝組合相似。對於 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 服務也提供 REST API 和其他介面。
如要為 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)。
如要調整圖片大小、轉換圖片格式及處理圖片,請使用圖片處理程式庫,例如 Pillow 或 ImageMagick 的 Python 介面。
如要使用這些第三方程式庫,請將程式庫新增為依附元件,並更新程式碼來呼叫程式庫的 API。
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 為基礎的驗證機制。