從 App Engine Images 服務遷移至 Cloud Run

區域 ID

REGION_ID 是 Google 根據您在建立應用程式時選取的區域指派的縮寫代碼。這個代碼不對應國家/地區或省/市,即使某些區域 ID 可能與常用的國家/地區和省/市代碼相似。如果是 2020 年 2 月後建立的應用程式,App Engine 網址會包含 REGION_ID.r。如果是 2020 年 2 月前建立的現有應用程式,網址中的區域 ID 則為選用。

進一步瞭解區域 ID。

如要翻新現有 App Engine 應用程式中的圖片處理功能,您可以將容器化圖片轉換服務部署至 Cloud Run,並將 App Engine 圖片服務呼叫轉送至該服務。

這項遷移作業不需要大幅重寫圖片處理程式碼,也不需要在 Cloud Run 上託管 App Engine 應用程式。相反地,當您設定應用程式時,App Engine 服務 SDK 會攔截 App Engine Images 服務呼叫,並將其轉送至 Cloud Run 服務。這項服務會使用開放原始碼 Pillow 引擎,透過 gRPC 處理圖片,並將結果傳回 App Engine 應用程式。這項設定會以現代化的雲端原生解決方案,取代舊版 App Engine Images 服務後端。

限制

  • 如果使用自訂圖片處理服務,並將 APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICE 設為 true,就無法產生提供網址。叫用 get_serving_url() 方法時,App Engine 會擲回執行階段例外狀況。只有在 APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICE 設為 false 或未設定時,才能使用這個方法。這項限制可避免依賴舊版後端儲存及提供圖片。

    如要提供圖片,建議您直接從 Cloud Storage 網址提供,或使用由 Cloud CDN 支援的 Cloud Storage bucket。

    您使用舊版呼叫 get_serving_url() 方法建立的現有網址會繼續提供圖片。

  • 升級 App Engine 服務 SDK 版本時,App Engine 不會自動將呼叫轉送至 Cloud Run 服務。應用程式只有在您設定 APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICE 和 APPENGINE_IMAGES_SERVICE_ENDPOINT 環境變數後,才會套用新行為。

事前準備

  1. 確認您有權存取 App Engine 原始碼。

  2. 啟用 Cloud Run Admin API 和 Artifact Registry API:

    啟用 API

必要的角色

您可以選擇建立新的服務帳戶,或在 Cloud Run 中使用與 App Engine 相同的使用者自行管理服務帳戶。您或管理員必須將下列 IAM 角色授予部署者帳戶和 Cloud Build 服務帳戶。

按一下即可查看部署者帳戶的必要角色

如要取得從來源建構及部署所需的權限,請要求管理員授予您下列 IAM 角色:

按一下即可查看 Cloud Build 服務帳戶的必要角色

Cloud Build 會自動使用 Compute Engine 預設服務帳戶做為預設 Cloud Build 服務帳戶,建構原始碼和 Cloud Run 資源,除非您覆寫這項行為。如要讓 Cloud Build 建構來源,請要求管理員將 Cloud Run 建構工具 (roles/run.builder) 授予專案的 Compute Engine 預設服務帳戶:

  gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:PROJECT_NUMBER-compute@ \
      --role=roles/run.builder
  

將 PROJECT_NUMBER 替換為您的 Google Cloud專案編號,並將 PROJECT_ID 替換為您的 Google Cloud專案 ID。如需尋找專案 ID 和專案編號的詳細操作說明,請參閱「建立及管理專案」。

將 Cloud Run 建構工具角色授予 Compute Engine 預設服務帳戶後,需要幾分鐘的時間才能傳播。

如要查看與 Cloud Run 相關聯的 IAM 角色和權限清單,請參閱「Cloud Run IAM 角色」和「Cloud Run IAM 權限」。如果 Cloud Run 服務與Google Cloud API (例如 Cloud 用戶端程式庫) 互動,請參閱服務身分設定指南。如要進一步瞭解如何授予角色,請參閱「部署權限」和「管理存取權」。

遷移流程

這項遷移作業包含下列步驟:

  1. 在 Cloud Run 上部署圖片轉換服務,取得服務網址。
  2. 使用 Cloud Run 服務網址和轉送旗標設定 App Engine 來源檔案,然後部署或重新部署 App Engine 應用程式。
  3. 測試應用程式,檢查圖片處理功能。

在 Cloud Run 部署圖片轉換服務

如要部署圖片轉換服務,並設定 Cloud Storage 存取權,請按照下列步驟操作:

  1. 將預先建構的圖片轉換服務容器部署至 Cloud Run 服務。請務必在強制執行驗證 (--no-allow-unauthenticated) 的情況下部署。呼叫這項服務時,App Engine 服務 SDK 會處理驗證:

    gcloud run deploy image-processing-service \
        --image=us-central1-docker.pkg.dev/gae-bundled-services-images/release/image-processing-service:latest \
        --no-allow-unauthenticated \
        --region=REGION
    

    將 REGION 替換為部署 Cloud Run 服務的區域。建議您在 App Engine 服務所在的區域部署服務。

    記下已部署 Cloud Run 服務的網址,例如 https://image-processing-service-xyz-uc.a.。

  2. 將 Cloud Run 叫用者 (roles/run.invoker) 角色授予預設 App Engine 服務帳戶。這樣一來,App Engine 應用程式就能授權並轉送呼叫至私人 Cloud Run 服務:

    gcloud run services add-iam-policy-binding image-processing-service \
        --member="serviceAccount:PROJECT_ID@" \
        --role="roles/run.invoker" \
        --region=REGION
    
  3. 將 Cloud Storage 物件檢視者 (roles/storage.objectViewer) 角色授予預設的 Compute Engine 服務帳戶。這樣一來,圖片轉換服務就能讀取儲存在 Cloud Storage 中的圖片:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:PROJECT_NUMBER-compute@" \
        --role="roles/storage.objectViewer"
    

    更改下列內容:

    • PROJECT_ID:部署 Cloud Run 服務的專案 ID。
    • PROJECT_NUMBER:部署 Cloud Run 服務的專案編號。

設定來源檔案

如要設定 Python 應用程式,以便使用 Cloud Run 上的圖片轉換服務,請按照下列步驟操作:

  1. 在 requirements.txt 檔案中新增以下依附元件:

    appengine-python-standard>=3.0.2
    

    或者,如要在本機安裝依附元件,請執行:

    pip install "appengine-python-standard>=3.0.2"
    
  2. 更新 app.yaml 檔案,啟用 API Proxy 並設定必要的環境變數:

    runtime: RUNTIME  # a supported python version
    
    # List the Images service
    app_engine_bundled_services:
    - images
    
    env_variables:
      # Enable the custom gRPC Images service
      APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICE: "true"
    
      # The URL of the Cloud Run service you deployed
      APPENGINE_IMAGES_SERVICE_ENDPOINT: "RUN_SERVICE_URL"
    

    更改下列內容:

    • RUNTIME:支援的 Python 執行階段版本。
    • RUN_SERVICE_URL:已部署 Cloud Run 服務的網址。
  3. 將應用程式部署至 App Engine:

    gcloud app deploy
    

    您的 App Engine 服務已部署在 https://PROJECT_ID.REGION_ID.r.appspot.com。

  4. 啟動瀏覽器,然後執行下列指令來存取網路服務:

    gcloud app browse
    

測試應用程式

如要確認應用程式是否成功使用 Cloud Run 圖片轉換服務,請按照下列步驟操作:

  1. 在應用程式中觸發影像處理功能。
  2. 查看 App Engine 應用程式的 Logs Explorer。確認沒有與 google.appengine.api.images 呼叫相關的錯誤。
  3. 查看 Cloud Run image-processing-service 的記錄,確認 Cloud Run 已收到並處理要求。

後續步驟