區域 ID
REGION_ID 是 Google 根據您在建立應用程式時選取的地區所指派的縮寫代碼。即使部分區域 ID 看似常用的國家/地區和省份代碼,但該代碼並不對應至國家/地區或省份。如果是 2020 年 2 月後建立的應用程式,App Engine 網址會包含 REGION_ID.r。如果是這段時間前建立的現有應用程式,網址可選擇是否包含區域 ID。
進一步瞭解區域 ID。
本指南說明如何將標準環境中的現有應用程式部署至 Cloud Run。這些操作說明適用於第二代執行階段,不適用於使用 App Engine 舊版組合式服務的執行階段。
本指南所述步驟不會影響現有 App Engine 應用程式的功能或流量。新建立的 Cloud Run 服務是 App Engine 服務的副本,您可以獨立測試。
Cloud Run 與 App Engine 標準環境使用許多相同的基礎架構,因此這兩個平台有許多相似之處。如要進一步瞭解 App Engine 和 Cloud Run 的相似之處和差異,包括遷移至 Cloud Run 的優點,請參閱比較摘要。如要部署至 Cloud Run,請選擇下列其中一種策略:
使用
app.yaml檔案的本機設定 (建議): 選擇這個選項,直接從本機原始碼建構容器映像檔,並部署至 Cloud Run。確保新部署作業包含程式碼或設定的任何近期本機修改內容。使用先前建構的圖片: 如果您無法存取原始碼,這個選項就非常實用。選擇這個選項可部署已在 App Engine 上執行的版本副本,不必重建容器映像檔。如果您想在不變更程式碼的情況下,驗證有效部署作業的行為,這個選項就非常實用。
事前準備
確認 App Engine 應用程式執行是否正常。如果您選擇使用本機設定進行部署,則需要存取 App Engine 原始碼。
啟用 Cloud Run Admin API 和 Artifact Registry API:
使用下列指令設定專案和區域:
gcloud auth login gcloud config set project PROJECT_ID gcloud config set run/region REGION gcloud components update更改下列內容:
- PROJECT_ID:您的 Google Cloud 專案 ID。
- REGION:要部署 Cloud Run 服務的區域。
檢查應用程式中不相容的功能,並在遷移至 Cloud Run 前移除這些功能。如要在不執行遷移或部署作業的情況下,檢查應用程式是否不相容,請執行下列指令:
gcloud beta app migrate-to-run --dry-run查看相容性檢查結果,並視需要進行建議的變更。
請注意下列 Cloud Run 差異:
Cloud Run 使用「
Revision」一詞,而非「Version」,代表您每次將變更部署至特定服務。首次將應用程式部署至 Cloud Run 服務時,系統會建立第一個修訂版本。後續每次部署服務時,系統都會建立另一個修訂版本。進一步瞭解如何部署至 Cloud Run。您可以使用 gcloud CLI 或 Google Cloud 控制台,將原始碼部署至 Cloud Run,並設定及管理應用程式設定。Cloud Run 不需要以檔案為基礎的設定,但支援 YAML 設定。
部署至 Cloud Run 的每項服務都會使用網址中的
run.app網域,公開存取服務。與預設為公開的 App Engine 服務不同,Cloud Run 服務預設為私有,您必須設定服務,才能公開 (未經驗證) 存取。
必要的角色
您可以選擇建立新的服務帳戶,或是在 Cloud Run 中使用與標準環境相同的服務帳戶。您或管理員必須將下列 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 用戶端程式庫) 介接,請參閱服務身分設定指南。 如要進一步瞭解如何授予角色,請參閱「部署權限」和「管理存取權」。
使用 app.yaml 檔案的本機設定
使用 Google Cloud 控制台或 gcloud CLI,將本機 App Engine 設定部署至 Cloud Run。
控制台
前往 Google Cloud 控制台的「App Engine」頁面。
在導覽選單中,按一下「遷移中心」,將 App Engine 應用程式部署至 Cloud Run。您也可以在遷移中心查看 Cloud Run 的預估節省金額,取得費用估算和建議。
選取要遷移的服務,然後按一下「檢查相容性」。
選取「服務」和「版本」,即可查看相容性結果。遷移中心會執行相容性檢查工具,找出不相容的功能。
查看結果,確認應用程式與 Cloud Run 完全相容,然後按一下「繼續」,前往「檢查與部署」部分。
複製「透過 gcloud 部署」部分中的指令,然後在專案目錄中執行。
按一下「查看已部署的版本」,即可查看部署在 Cloud Run 中的 App Engine 服務。
gcloud
如要使用現有 App Engine 設定的本機 app.yaml 檔案部署 Cloud Run 服務,請按照下列步驟操作:
在終端機中,切換至
app.yaml檔案所在的來源目錄。執行下列指令,將服務部署至 Cloud Run:
gcloud beta app migrate-to-run這項指令會產生 Cloud Run 的
service.yaml檔案設定,並在本機儲存至與app.yaml檔案相同的目錄。詳情請參閱「gcloud beta app migrate-to-run」。- 系統提示時
Proceed with the deployment?,請輸入Y,從原始碼建構容器映像檔,並將服務部署至 Cloud Run。
- 系統提示時
在網路瀏覽器中開啟服務網址,以造訪您所部署的 Cloud Run 服務。
選用:
如果
app.yaml檔案位於其他目錄,請使用--appyaml旗標指定路徑:gcloud beta app migrate-to-run --appyaml=PATH將 PATH 替換為
app.yaml檔案的路徑。如要產生及匯出 Cloud Run
service.yaml設定,但不要部署服務,請使用--export-only標記:gcloud beta app migrate-to-run --export-only=EXPORT_PATH將 EXPORT_PATH 替換為要儲存
service.yaml檔案的目錄或路徑。
使用先前建構的映像檔
如要使用已部署 App Engine 版本中先前建構的容器映像檔進行部署,而不是從本機 app.yaml 檔案重建容器映像檔,請按照下列步驟操作:
這次部署不需要應用程式的原始碼。
執行下列指令,將服務部署至 Cloud Run。這項指令會使用有效 App Engine 部署作業的容器映像檔,且不會擷取本機
app.yaml檔案的近期變更,因此可能導致部署作業過時:gcloud beta app migrate-to-run --service=SERVICE --version=VERSION --from-image更改下列內容:
- SERVICE:App Engine 服務的名稱。
- VERSION:服務的版本 ID。
這項指令會擷取指定服務和版本的設定,為 Cloud Run 產生
service.yaml檔案。如要瞭解詳情,請參閱gcloud beta app migrate-to-run。- 系統顯示
Proceed with the deployment?提示時,請輸入Y,匯出現有的 App Engine 容器映像檔,並將服務部署至 Cloud Run。
在網路瀏覽器中開啟服務網址,以造訪您所部署的 Cloud Run 服務。
選用:
如要產生 Cloud Run
service.yaml設定,但不要部署服務,請執行下列指令:gcloud beta app migrate-to-run --service=SERVICE \ --version=VERSION \ --from-image \ --export-only=EXPORT_PATH請將 EXPORT_PATH 替換為要儲存
service.yaml檔案的目錄或路徑。
不相容的功能
如果app.yaml 檔案包含下列任何不支援的設定,遷移指令就會失敗:
入境服務:
inbound_services: - warmup解決方法:從
app.yaml檔案中刪除inbound_services區段。Cloud Run 會使用容器進入點暖機執行個體,因此您不需要設定暖機要求。如需在提供流量前執行初始化程式碼,請將服務設定為在啟動時執行該程式碼,然後再接聽要求,或使用啟動探查。您也可以設定執行個體數量下限,讓執行個體維持在暖機狀態。
自訂錯誤頁面:
error_handlers: - file: default_error.html - error_code: over_quota file: over_quota.html解決方法:從
app.yaml檔案中刪除error_handlers區段,並採用下列一或多種策略:- 直接在應用程式程式碼中導入錯誤處理機制。擷取標準 HTTP 錯誤代碼 (例如
404或500),並從應用程式邏輯中提供自訂 HTML 錯誤頁面。 - 如果您使用 Cloud Run 搭配 Cloud Load Balancing,請在負載平衡器層級設定自訂錯誤回應。這樣一來,您就能根據 Cloud Run 服務的回應代碼,從 Cloud Storage 提供自訂錯誤頁面。
- 直接在應用程式程式碼中導入錯誤處理機制。擷取標準 HTTP 錯誤代碼 (例如
第二代執行階段的套裝服務:
app_engine_apis: true解決方法:從
app.yaml檔案中刪除app_engine_apis設定,然後改用 Google Cloud API 或第三方替代方案。詳情請參閱「從套裝服務遷移」。第一代執行階段:
runtime: python27解決方法:將應用程式升級為支援的第二代執行階段。詳情請參閱「遷移至第二代執行階段總覽」。
後續步驟
- 瞭解如何管理 Cloud Run 服務。
- 請參閱 Cloud Run 容器執行階段合約,瞭解 Cloud Run 容器的規定和行為。
- 瞭解如何使用 Secret Manager,為需要 API 金鑰、密碼或其他機密資訊的服務儲存依附元件。