將 App Engine 標準環境應用程式遷移至 Cloud Run

區域 ID

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

進一步瞭解區域 ID

本指南說明如何遷移現有的 App Engine 應用程式,該應用程式透過公開 IP 連線至 Cloud SQL 執行個體。

一般而言,本指南中的步驟會說明如何在 Cloud Run 中部署相同的應用程式原始碼,然後設定該原始碼,使用相同的 Cloud SQL 資料庫使用者連線至現有的執行個體和資料庫。

本指南的步驟未包含如何使用內部私人 IP 連線,因為這需要您先修改應用程式程式碼。不過,將應用程式部署至 Cloud Run 後,您可以使用「從 Cloud Run 連線至 Cloud SQL」一文中的步驟,瞭解相關規定和如何使用私人 IP。

如要進一步瞭解 App Engine 和 Cloud Run 的相似與不同之處,包括遷移至 Cloud Run 的優點,請參閱比較摘要

事前準備

  1. 確認 Cloud Run 符合應用程式需求。請參閱 App Engine 和 Cloud Run 的比較,判斷 CPU 和記憶體等 Cloud Run 資源是否符合您的需求。

  2. 您需要存取 Cloud SQL 執行個體,包括連線應用程式的資料庫使用者名稱和密碼。Cloud Run 會使用加密技術,並透過 Cloud SQL 驗證 Proxy,使用 Unix 通訊端或 Cloud SQL 連接器連線。

  3. 啟用 Cloud Run Admin API 和 Artifact Registry API。

    啟用 API

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

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

    • 您可以使用 Google Cloud CLI 將原始碼部署至 Cloud Run,也可以透過 Google Cloud 控制台設定及管理應用程式設定。Cloud Run 不需要以檔案為基礎的設定,但支援 YAML 設定,您可以使用 app2run 工具,將現有的 App Engine 檔案轉換為 Cloud Run 檔案。

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

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

    • Cloud Run 不支援 App Engine 舊版套裝組合服務。

本指南假設您的 App Engine 應用程式可順利執行。

必要的角色

您可以選擇建立新的服務帳戶,或繼續在 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 用戶端程式庫) 介接,請參閱服務身分設定指南。 如要進一步瞭解如何授予角色,請參閱部署權限管理存取權

如要透過公開 IP 連線至 Cloud SQL,您必須具備下列其中一個角色:

將應用程式遷移至 Cloud Run

將 App Engine 應用程式部署至 Cloud Run 時,不必變更任何程式碼。

在下列步驟中,您會將應用程式部署至 Cloud Run 中的新服務,並同時設定該服務連線至 Cloud SQL。

與 App Engine 標準環境類似,Cloud Run 支援以來源為基礎的部署作業。您需要存取原始碼存放區。

Cloud Run 會在內部使用建構包Cloud Build,從您的原始碼自動建構容器映像檔,因此您不需要手動建構容器或指定 Dockerfile。不過,如果存在 Dockerfile,系統就會使用該檔案。 從來源部署 Cloud Run 服務時會使用 Artifact Registry,因此這項功能僅適用於 Artifact Registry 支援的區域。

如要部署先前部署至 App Engine 的相同原始碼:

  1. 變更為應用程式原始碼所在的來源目錄。

      cd YOUR_APPENGINE_CODE_DIR
    
  2. 部署至 Cloud Run。

    如要建構原始碼並部署應用程式,請執行 deploy 指令並加上 --source 旗標。您必須設定設定標記,才能納入 App Engine 應用程式 app.yaml 檔案中定義的相同 SQL 連線環境變數:

      gcloud run deploy run-sql --source . \
        --allow-unauthenticated \
        --add-cloudsql-instances INSTANCE_CONNECTION_NAME\
        --set-env-vars INSTANCE_UNIX_SOCKET="/cloudsql/INSTANCE_CONNECTION_NAME" \
        --set-env-vars INSTANCE_CONNECTION_NAME="INSTANCE_CONNECTION_NAME" \
        --set-env-vars DB_NAME="DB_NAME" \
        --set-env-vars DB_USER="DB_USER" \
        --set-env-vars DB_PASS="DB_PASS"
    

    INSTANCE_CONNECTION_NAME 改成 Cloud SQL 執行個體的執行個體連線名稱或連線名稱清單 (以逗號分隔)。您可以執行下列指令,找出 INSTANCE_CONNECTION_NAME

        gcloud instances describe INSTANCE_NAME
    
    • DB_NAME 替換為資料庫名稱。
    • DB_USER 改為資料庫的使用者名稱。
    • DB_PASS,並輸入資料庫使用者的密碼。
  3. 系統提示時,輸入 SERVICE 的名稱。

  4. 如果系統提示安裝必要 API,請在提示時輸入 y。這項操作只需要為專案執行一次。 等待建構及部署作業完成。完成後,系統會顯示類似以下的訊息:

    Service [my-app] revision [my-app-00000-xxx] has been deployed and is serving 100 percent of traffic. Service URL: https://sample.run.app
    

    如要進一步瞭解如何將原始碼部署至 Cloud Run,請參閱「透過原始碼部署」。

後續步驟