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

區域 ID

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

進一步瞭解區域 ID

本指南說明如何將彈性環境中的現有應用程式部署至 Cloud Run

本指南所述步驟不會影響現有 App Engine 應用程式的功能或流量。新建立的 Cloud Run 服務是 App Engine 服務的副本,您可以獨立測試。

App Engine 彈性環境和 Cloud Run 都是全代管的容器原生應用程式平台,但兩者的結構不同。如要進一步瞭解 App Engine 和 Cloud Run 的相似之處和差異,包括遷移至 Cloud Run 的優點,請參閱比較摘要

如要部署至 Cloud Run,請選擇下列其中一種策略:

  • 使用 app.yaml 檔案的本機設定 (建議): 選擇這個選項,直接從本機原始碼建構容器映像檔,並部署至 Cloud Run。確保新部署作業包含程式碼或設定的任何近期本機修改內容。

  • 使用先前建構的圖片: 如果您無法存取原始碼,這個選項就非常實用。選擇這個選項可部署已在 App Engine 上執行的版本副本,不必重建容器映像檔。如果您想在不變更程式碼的情況下,驗證有效部署作業的行為,這個選項就非常實用。

事前準備

  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:要部署 Cloud Run 服務的區域。
  4. 檢查應用程式中不相容的功能,並在遷移至 Cloud Run 前移除這些功能。如要在不執行遷移或部署作業的情況下,檢查應用程式是否不相容,請執行下列指令:

    gcloud beta app migrate-to-run --dry-run
    

    查看相容性檢查結果,並視需要進行建議的變更。

  5. 請注意下列 Cloud Run 差異:

    • Cloud Run 使用「Revision」一詞,而非「Version」,代表您每次將變更部署至特定服務。首次將應用程式部署至 Cloud Run 服務時,系統會建立第一個修訂版本。後續每次部署服務時,系統都會建立另一個修訂版本。進一步瞭解如何部署至 Cloud Run

    • 您可以使用 gcloud CLI 將原始碼部署至 Cloud Run,並設定及管理應用程式設定。Cloud Run 不需要以檔案為基礎的設定,但支援 YAML 設定

    • 部署至 Cloud Run 的每項服務都會使用網址中的run.app網域,公開存取服務。

    • 與預設為公開的 App Engine 服務不同,Cloud Run 服務預設為私有,您必須設定服務,才能公開 (未經驗證) 存取。

必要的角色

您可以選擇建立新的服務帳戶,或是在 Cloud Run 中使用與彈性環境相同的服務帳戶。您或管理員必須將下列 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 替換為您的 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 檔案的本機設定

如要使用現有 App Engine 設定的本機 app.yaml 檔案部署 Cloud Run 服務,請按照下列步驟操作:

  1. 在終端機中,切換至 app.yaml 檔案所在的來源目錄。

  2. 執行下列指令,將服務部署至 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。
  3. 在網路瀏覽器中開啟服務網址,以造訪您所部署的 Cloud Run 服務。

    選用:

    • 如果 app.yaml 檔案位於其他目錄,請使用 --appyaml 旗標指定路徑:

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

      PATH 替換為 app.yaml 檔案的路徑。

    • 如要產生及匯出 Cloud Run service.yaml設定,但不要部署服務,請執行下列指令:

      gcloud beta app migrate-to-run --export-only=EXPORT_PATH
      

      EXPORT_PATH 替換為要儲存 service.yaml 檔案的目錄或路徑。

使用先前建構的映像檔

如要使用已部署 App Engine 版本中先前建構的容器映像檔進行部署,而不是從本機 app.yaml 檔案重建容器映像檔,請按照下列步驟操作:

這次部署不需要應用程式的原始碼。

  1. 執行下列指令,將服務部署至 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。
  2. 在網路瀏覽器中開啟服務網址,以造訪您所部署的 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 會使用容器進入點暖機執行個體,因此您不需要設定暖機要求。如要在處理流量前執行初始化程式碼,請將服務設定為在啟動時執行該程式碼,然後再接聽要求,或使用啟動探查。您也可以設定執行個體數量下限,讓執行個體維持在暖機狀態。

後續步驟