區域 ID
REGION_ID 是 Google 根據您在建立應用程式時選取的地區所指派的縮寫代碼。即使部分區域 ID 看似常用的國家/地區和省份代碼,但該代碼並不對應至國家/地區或省份。如果是 2020 年 2 月後建立的應用程式,App Engine 網址會包含 REGION_ID.r。如果是這段時間前建立的現有應用程式,網址可選擇是否包含區域 ID。
進一步瞭解區域 ID。
如要更新現有 App Engine 應用程式的圖片處理作業,您可以將容器化圖片轉換服務部署至 Cloud Run,並將 App Engine Images 服務呼叫作業轉送至該服務。
這項遷移作業不需要大幅重寫圖片處理程式碼,也不必在 Cloud Run 上代管 App Engine 應用程式。不過,當您設定應用程式時,App Engine 服務 SDK 會攔截 App Engine Images 服務呼叫,並將其轉送至 Cloud Run 服務。這項服務會透過 gRPC 使用開放原始碼 Pillow 引擎處理圖片,並將結果傳回 App Engine 應用程式。這項設定會以現代化的雲端原生解決方案,取代舊版 App Engine Images 服務後端。
限制
使用自訂圖片處理服務時,您無法產生放送網址。如果叫用
getServingUrl()方法,App Engine 會擲回執行階段例外狀況。這項限制可避免依賴舊版後端來儲存及放送圖片。如要提供圖片,建議您直接透過 Cloud Storage 網址提供,或是使用 Cloud CDN 支援的 Cloud Storage bucket,視應用程式需求而定。
使用舊版呼叫
getServingUrl()方法建立的現有網址,仍會繼續提供圖片。升級 App Engine 服務 SDK 版本時,App Engine 不會自動將 App Engine 呼叫作業轉送至 Cloud Run 服務。您必須先設定遷移環境變數
APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICE和APPENGINE_IMAGES_SERVICE_ENDPOINT,應用程式才會套用新行為。
事前準備
確認您有權存取 App Engine 原始碼。
啟用 Cloud Run Admin API 和 Artifact Registry API:
必要的角色
您可以選擇建立新的服務帳戶,或在 Cloud Run 中使用與 App Engine 相同的服務帳戶。您或管理員必須將下列 IAM 角色授予部署者帳戶和 Cloud Build 服務帳戶。
按一下即可查看部署者帳戶的必要角色
如要取得從來源建構及部署所需的權限,請要求管理員授予您下列 IAM 角色:
- 專案的 Cloud Run 原始碼開發人員 (
roles/run.sourceDeveloper) - 專案的服務使用情形用戶 (
roles/serviceusage.serviceUsageConsumer) - Cloud Run 服務身分上的服務帳戶使用者 (
roles/iam.serviceAccountUser)
按一下即可查看 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@developer.gserviceaccount.com \ --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 用戶端程式庫) 介接,請參閱服務身分設定指南。 如要進一步瞭解如何授予角色,請參閱「部署權限」和「管理存取權」。
遷移流程
這項遷移作業包含下列步驟:
- 在 Cloud Run 上部署圖片轉換服務,取得服務網址。
- 使用 Cloud Run 服務網址和轉送標記設定 App Engine 來源檔案,然後部署或重新部署 App Engine 應用程式。
- 測試應用程式,檢查圖片處理功能。
在 Cloud Run 上部署圖片轉換服務
如要部署圖片轉換服務並設定其 Cloud Storage 存取權,請按照下列步驟操作:
將預先建構的圖片轉換服務容器部署至 Cloud Run 服務。請務必部署時強制執行驗證 (
--no-allow-unauthenticated)。呼叫這項服務時,App Engine 服務 SDK 會處理驗證:gcloud run deploy image-processing-service \ --image=us-central1-docker.pkg.dev/gae-bundled-services-images/image-processing-service-staging/image-processing-service:public-image-d476f7ef9d1b \ --no-allow-unauthenticated \ --region=REGION將 REGION 替換為部署 Cloud Run 服務的區域。建議您在與 App Engine 服務相同的區域中部署服務。
請記下已部署 Cloud Run 服務的服務網址,例如
https://image-processing-service-xyz-uc.a.run.app。將 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@appspot.gserviceaccount.com" \ --role="roles/run.invoker" \ --region=REGION將「Cloud Storage 物件檢視者」(
roles/storage.objectViewer) 角色授予預設的 Compute Engine 服務帳戶。這樣一來,圖片轉換服務就能讀取儲存在 Cloud Storage 中的圖片:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role="roles/storage.objectViewer"更改下列內容:
- PROJECT_ID:您部署 Cloud Run 服務的專案 ID。
- PROJECT_NUMBER:部署 Cloud Run 服務的專案編號。
設定來源檔案
如要設定 Java 應用程式,以便使用 Cloud Run 上的圖片轉換服務,請按照下列步驟操作:
更新
pom.xml檔案,加入下列依附元件:新增或更新
appengine-api-1.0-sdk依附元件:<dependency> <groupId>com.google.appengine</groupId> <artifactId>appengine-api-1.0-sdk</artifactId> <version>5.0.5-beta.1</version> </dependency>新增
google-auth-library-oauth2-http依附元件,與 Cloud Run 進行安全通訊:<dependency> <groupId>com.google.auth</groupId> <artifactId>google-auth-library-oauth2-http</artifactId> <version>1.20.0</version> </dependency>
更新
appengine-web.xml檔案,設定必要的環境變數:<?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <runtime>RUNTIME</runtime> <!-- a supported Java runtime version --> <threadsafe>true</threadsafe> <!-- List the Images service --> <app-engine-bundled-services> <api>images</api> </app-engine-bundled-services> <env-variables> <!-- Enable the custom gRPC Images service --> <env-var name="APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICE" value="true" /> <!-- The URL of the Cloud Run service you deployed --> <env-var name="APPENGINE_IMAGES_SERVICE_ENDPOINT" value="RUN_SERVICE_URL" /> </env-variables> </appengine-web-app>更改下列內容:
- RUNTIME:支援的 Java 執行階段版本。
- RUN_SERVICE_URL:已部署 Cloud Run 服務的網址。
將應用程式部署至 App Engine:
mvn clean package appengine:deploy clean啟動瀏覽器,然後執行下列指令來存取網路服務:
gcloud app browse
測試應用程式
如要確認應用程式是否已成功使用 Cloud Run 圖片轉換服務,請按照下列步驟操作:
- 在已部署的 App Engine 應用程式中觸發圖片處理功能。
- 檢查 Logs Explorer 中的 App Engine 應用程式。確認沒有與
com.google.appengine.api.images呼叫相關的錯誤。 - 查看 Cloud Run
image-processing-service記錄,確認 Cloud Run 已收到並處理要求。