Cloud Run 可讓您在無伺服器環境中執行無狀態映像檔。您可以使用 Cloud Build,將 Artifact Registry 中的映像檔部署至 Cloud Run。您可以部署現有映像檔、建構及部署映像檔,或自動部署。
事前準備
-
Enable the Cloud Build, Cloud Run, Artifact Registry, and Resource Manager APIs.
準備好應用程式原始碼。原始碼必須儲存在 GitHub 或 Bitbucket 等存放區。
如要在本頁面執行
gcloud
指令,請安裝 Google Cloud CLI。如果您使用 VPC Service Controls,請在 VPC Service Controls 範圍內設定私人集區。您也必須為 VPC Service Controls 設定 Cloud Run。
必要的「身分與存取權管理」權限
如要取得使用 Cloud Build 部署至 Cloud Run 時所需的權限,請要求管理員在預設的 Cloud Build 服務帳戶中,授予您下列 IAM 角色:
-
Cloud Run 開發人員 (
roles/run.developer
) -
記錄寫入者 (
roles/logging.logWriter
) -
Artifact Registry 寫入者 (
roles/artifactregistry.writer
) -
服務帳戶使用者 (
roles/iam.serviceAccountUser
) -
儲存空間管理員 (
roles/storage.admin
)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
建構及部署映像檔
Cloud Build 可讓您建構映像檔、將建構的映像檔儲存在 Artifact Registry 中,然後將映像檔部署至 Cloud Run。
如要建構及部署映像檔,請按照下列步驟操作:
在專案根目錄中,建立名為
cloudbuild.yaml
的設定檔。在建構設定檔中,新增
docker
建構步驟來建構映像檔並將其推送至 Artifact Registry,然後新增gcloud
建構步驟來叫用gcloud run deploy
指令,將映像檔部署至 Cloud Run:steps: # Build the image - name: 'gcr.io/cloud-builders/docker' args: ['build', '-t', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE', '.'] # Push the image to Artifact Registry - name: 'gcr.io/cloud-builders/docker' args: ['push', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE'] # Deploy image to Cloud Run - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk' entrypoint: gcloud args: ['run', 'deploy', 'SERVICE_NAME', '--image', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE', '--region', 'SERVICE_REGION'] images: - 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE'
其中:
REPOSITORY
是 Artifact Registry 存放區的名稱,您會從該處部署映像檔。LOCATION
是 Artifact Registry 存放區的位置,例如us-east1
。PROJECT_ID
是儲存圖片的專案 ID。 Google CloudSERVICE_NAME
是 Cloud Run 服務的名稱。SERVICE_REGION
是要部署的 Cloud Run 服務區域。IMAGE
是 Artifact Registry 中的映像檔名稱。
前往專案根目錄,然後執行下列指令,其中
LOCATION
是支援的建構區域之一,用於執行建構作業:gcloud builds submit --region=LOCATION
成功完成時,畫面會顯示成功訊息,還有已部署服務的網址。
持續部署
您可以建立 Cloud Build 觸發條件,自動將軟體部署至 Cloud Run。您可以設定觸發條件,在更新原始碼時建構及部署映像檔。
如要自動部署,請按照下列步驟操作:
在存放區根目錄中,新增名為
cloudbuild.yaml
的設定檔,其中包含建構映像檔、將映像檔推送至 Artifact Registry,然後叫用gcloud run deploy
指令的步驟:steps: # Build the image - name: 'gcr.io/cloud-builders/docker' args: ['build', '-t', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA', '.'] # Push the image to Artifact Registry - name: 'gcr.io/cloud-builders/docker' args: ['push', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA'] # Deploy image to Cloud Run - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk' entrypoint: gcloud args: - 'run' - 'deploy' - 'SERVICE_NAME' - '--image' - 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA' - '--region' - 'SERVICE_REGION' images: - 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA'
其中:
REPOSITORY
是 Artifact Registry 存放區的名稱,您會從該處部署映像檔。LOCATION
是 Artifact Registry 存放區的位置,例如us-east1
。PROJECT_ID
是儲存圖片的專案 ID。 Google CloudSERVICE_NAME
是 Cloud Run 服務的名稱。SERVICE_REGION
是要部署的 Cloud Run 服務區域。IMAGE
是 Artifact Registry 中的映像檔名稱。
從 Git 存放區觸發時,Cloud Build 會填入
$COMMIT_SHA
替換變數。使用上一個步驟中建立的設定檔,建立建構觸發條件:
開啟「觸發條件」頁面:
點選「建立觸發條件」。
在「Name」(名稱) 欄位中,輸入觸發條件的名稱。
在「區域」下方,選取觸發條件的區域。
在「事件」下方,選取要啟動觸發條件的存放區事件。
在「來源」下方,選取存放區和分支版本或標記名稱,以啟動觸發程序。如要進一步瞭解如何指定要自動建構的分支版本,請參閱建立建構作業觸發條件。
在「設定」下方,選取「Cloud Build 設定檔 (YAML 或 JSON)」。
在「Cloud Build 設定檔位置」欄位中,在
/
後面輸入cloudbuild.yaml
。按一下「建立」即可儲存建構觸發條件。
現在,當您將新程式碼推送到存放區時,Cloud Build 會叫用建構作業,並將服務部署至 Cloud Run。
如要進一步瞭解如何建立 Cloud Build 觸發條件,請參閱「建立及管理建構觸發條件」。
使用最低身分與存取權管理權限
將映像檔部署到 Cloud Run 服務時,映像檔會使用 Cloud Run 服務的執行階段服務帳戶身分執行。因為 Cloud Build 可以自動部署新映像檔,因此 Cloud Build 必須要能「做為」「Cloud Run 服務的執行階段服務帳戶」來執行。
如要授予 Cloud Build 有限的存取權,以便部署至 Cloud Run 服務,請按照下列步驟操作:
主控台
前往 Google Cloud 控制台的「Service accounts」(服務帳戶) 頁面:
按一下 Cloud Run 服務的執行階段服務帳戶電子郵件地址 (預設為
PROJECT_NUMBER-compute@developer.gserviceaccount.com
)。按一下「Permissions」(權限) 分頁標籤。
按一下「授予存取權」
。輸入 Cloud Build 服務帳戶 (
PROJECT_NUMBER@cloudbuild.gserviceaccount.com
)在「Select a role」(請選擇角色) 下拉式選單中,選取「Service Accounts」(服務帳戶) >「Service Account User」(服務帳戶使用者) 角色。
按一下 [儲存]。
gcloud
使用 gcloud iam service-accounts add-iam-policy-binding
指令,其中 PROJECT_NUMBER 是專案的數字 ID:
gcloud iam service-accounts add-iam-policy-binding \ PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --member="serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com" \ --role="roles/iam.serviceAccountUser"
將 PROJECT_NUMBER 替換為專案的數字 ID。
如果您使用 Cloud Run 時採用自訂服務身分,請將 PROJECT_NUMBER-compute@developer.gserviceaccount.com
替換為服務帳戶地址。
詳情請參閱部署作業權限。
程式碼範例
以下是幾個範例存放區,每個存放區都包含範例應用程式和建構設定檔,可將應用程式部署至 Cloud Run:
- deploy-prebuilt: 程式碼範例,說明如何將預先建構的映像檔部署至 Cloud Run。
- run-example-builddeploy:程式碼範例,說明如何建構映像檔並部署至 Cloud Run。
後續步驟
- 瞭解如何使用 Cloud Deploy 部署至 Cloud Run。
- 瞭解如何在 GKE 上部署。
- 瞭解如何部署至 Cloud Run functions。
- 瞭解如何部署至 App Engine。
- 瞭解如何在 Firebase 上部署。
- 瞭解如何在 Compute Engine 上執行藍綠部署。
- 瞭解如何排解建構錯誤。