從舊版套裝組合服務遷移

舊版套裝服務提供的大部分功能,現在都由 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 執行階段中執行時使用,請按照下列步驟操作:

  1. 建立目錄以儲存第三方程式庫,例如 lib/

  2. app.yaml 檔案所在的資料夾中建立 requirements.txt 檔案,然後加入用戶端程式庫的名稱。

    舉例來說,下列檔案可用於安裝 Pub/Sub 和 Cloud Tasks 的程式庫:

    google-cloud-pubsub
    google-cloud-tasks
    
  3. 使用 pip install 將程式庫安裝到您建立的資料夾。例如:

    pip install -t lib -r requirements.txt
  4. 在應用程式的 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 錯誤。

  5. 如果還沒有 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')
  6. 部署應用程式

App Engine 會將您在 appengine_config.py 檔案中指定的目錄內所有程式庫,上傳至 Python 2 執行階段。

為 Python 3 應用程式安裝程式庫

如要安裝程式庫,供應用程式在 Python 3 執行階段執行時使用,請按照下列步驟操作:

  1. 將程式庫名稱新增至應用程式的 requirements.txt 檔案。例如:

    google-cloud-ndb
    
  2. 部署應用程式

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 中查看記錄、下載記錄、依嚴重程度篩選訊息,以及將應用程式訊息與特定要求建立關聯。或者,如果您偏好簡單而非資料準確度,可以將結構化記錄寫入 stdoutstderr。詳情請參閱「寫入及查看記錄」 和「遷移至 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 APIoauth2.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 為基礎的驗證機制。