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。
所需的 Identity and Access Management 權限
如要取得使用 Cloud Build 部署至 Cloud Run 所需的權限,請要求管理員在預設 Cloud Build 服務帳戶中授予您下列 IAM 角色:
-
Cloud Run 開發人員 (
roles/run.developer
) -
Logs Writer (
roles/logging.logWriter
) -
Artifact Registry Writer (
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
是儲存圖片的 Google Cloud專案 ID。SERVICE_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
是儲存圖片的 Google Cloud專案 ID。SERVICE_NAME
是 Cloud Run 服務的名稱。SERVICE_REGION
是您要部署的 Cloud Run 服務所在的區域。IMAGE
是 Artifact Registry 中的映像檔名稱。
從 Git 存放區觸發時,Cloud Build 會填入
$COMMIT_SHA
替換變數。使用上一個步驟中建立的設定檔建立建構觸發條件:
開啟「觸發條件」頁面:
點選「建立觸發條件」。
在「名稱」欄位中,輸入觸發事件的名稱。
在「區域」下方,選取觸發條件的區域。
在「事件」下方,選取要啟動觸發條件的存放區事件。
在「Source」下方,選取存放區,以及啟動觸發條件的分支或標記名稱。如要進一步瞭解如何指定要自動建構的分支版本,請參閱「建立建構作業觸發條件」。
在「Configuration」(設定) 下方,選取「Cloud Build configuration file (YAML or JSON)」(Cloud Build 設定檔 (YAML 或 JSON))。
在「Cloud Build 設定檔位置」欄位中,在
/
後面輸入cloudbuild.yaml
。按一下「建立」即可儲存自動建構觸發條件。
從現在開始,當您將新程式碼推送至存放區時,Cloud Build 就會叫用建構作業,並將服務部署至 Cloud Run。
如要進一步瞭解如何建立 Cloud Build 觸發條件,請參閱「建立及管理建構觸發條件」一文。
使用最少的 IAM 權限
將映像檔部署至 Cloud Run 服務時,映像檔會使用 Cloud Run 服務的執行階段服務帳戶身分執行。因為 Cloud Build 可以自動部署新的映像檔,因此 Cloud Build 必須要能「做為」Cloud Run 服務的執行階段服務帳戶。
如要授予 Cloud Build 有限的存取權,以便部署至 Cloud Run 服務,請執行下列操作:
主控台
前往 Google Cloud 控制台的「Service accounts」頁面:
按一下 Cloud Run 服務的執行階段服務帳戶電子郵件地址 (預設為
PROJECT_NUMBER[email protected]
)。按一下「Permissions」(權限) 分頁標籤。
按一下「授予存取權」
。輸入 Cloud Build 服務帳戶 (
[email protected]
)在「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[email protected] \ --member="serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com" \ --role="roles/iam.serviceAccountUser"
將 PROJECT_NUMBER 替換為專案的數字 ID。
如果您使用 Cloud Run 搭配自訂服務身分,請將 [email protected]
替換為服務帳戶地址。
詳情請參閱「部署權限」。
程式碼範例
以下是一些範例存放區,每個存放區都包含範例應用程式和建構設定檔,可將應用程式部署至 Cloud Run:
- deploy-prebuilt:程式碼範例,說明如何將預先建立的映像檔部署至 Cloud Run。
- run-example-builddeploy:程式碼範例,說明如何建構映像檔並部署至 Cloud Run。
後續步驟
- 瞭解如何使用 Cloud Deploy 將應用程式部署至 Cloud Run。
- 瞭解如何在 GKE 上部署。
- 瞭解如何在 Cloud Run 函式上部署。
- 瞭解如何在 App Engine 上部署。
- 瞭解如何在 Firebase 上部署。
- 瞭解如何在 Compute Engine 上執行藍綠部署作業。
- 瞭解如何排解建構錯誤。