將標準環境中的 App Engine 應用程式部署至 Cloud Run

區域 ID

REGION_ID 是 Google 根據您在建立應用程式時選取的地區所指派的縮寫代碼。此代碼不對應至國家/地區或省份,即使部分區域 ID 可能與常用的國家/地區和省份代碼相似。如果是 2020 年 2 月後建立的應用程式,App Engine 網址會包含 REGION_ID.r。如果是這段時間前建立的現有應用程式,網址可選擇是否包含地區 ID。

進一步瞭解區域 ID

本指南說明如何使用 Google Cloud CLI,將標準環境中的應用程式部署至 Cloud Run。這些操作說明適用於第二代執行階段,且不使用 App Engine 舊版套裝服務。

Cloud Run 使用的基礎架構與 App Engine 標準環境大致相同,因此這兩個平台有許多相似之處。如要進一步瞭解 App Engine 和 Cloud Run 的相似之處和差異,包括遷移至 Cloud Run 的優點,請參閱比較摘要

如要使用 gcloud beta app migrate 指令部署至 Cloud Run,請選擇下列其中一種策略:

事前準備

  1. 確認您有權存取 App Engine 原始碼,且 App Engine 應用程式執行時不會發生錯誤。

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

    啟用 API

  3. 使用下列指令設定專案和區域:

    gcloud auth login
    gcloud config set project PROJECT_ID
    gcloud config set run/region REGION
    gcloud components update
    

    更改下列內容:

    • PROJECT_ID 替換為 Google Cloud 專案 ID。
    • REGION 改成您使用的地區。
  4. 請先檢查應用程式中不相容的功能,然後移除這些功能,再遷移至 Cloud Run。如果現有應用程式有不相容的功能,遷移程序就會停止,並列出不相容項目。

  5. 請注意下列 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 中使用與 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@developer.gserviceaccount.com \
      --role=roles/run.builder
  

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

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

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

使用 app.yaml 檔案

執行下列指令,將 App Engine app.yaml 檔案轉換為 Cloud Run 服務:

gcloud beta app migrate-to-run --appyaml=PATH --entrypoint=ENTRYPOINT

更改下列內容:

  • PATH 替換為 app.yaml 檔案的路徑。
  • ENTRYPOINT,並輸入應用程式的進入點指令。

如果您位於專案目錄中,PATHENTRYPOINT 引數都是選用引數。

如要進一步瞭解可搭配 gcloud beta app migrate-to-run 指令使用的引數,請參閱 gcloud beta app migrate-to-run

部署現有的 App Engine 應用程式

執行下列指令,直接將現有的 App Engine 應用程式部署至 Cloud Run:

gcloud beta app migrate-to-run --service=SERVICE --version=VERSION --entrypoint=ENTRYPOINT

這項指令會提示您指定原始碼目錄的相對路徑。

更改下列內容:

  • SERVICE 改為您的 App Engine 服務名稱。
  • VERSION 換成服務的版本 ID。
  • ENTRYPOINT,並使用應用程式的進入點指令。如果您位於專案目錄中,這個引數為選用項目。

如要進一步瞭解可搭配 gcloud beta app migrate 指令使用的引數,請參閱 gcloud beta app migrate-to-run

不相容的功能

如果 app.yaml 檔案包含下列任何不支援的設定,遷移指令就會失敗:

  • 連入服務:

    inbound_services:
    - warmup
    
  • 自訂錯誤頁面:

    error_handlers:
    - file: default_error.html
    - error_code: over_quota
      file: over_quota.html
    
  • 第二代執行階段的套裝組合服務:

    app_engine_apis: true
    
  • 建構環境變數:

    build_env_variables:
      Foo: Bar
    
  • 第一代執行階段:

    runtime: python27
    

後續步驟