本頁說明如何從現有容器映像檔建立及更新 Cloud Run 作業。與監聽和處理請求的 Cloud Run 服務不同,Cloud Run 作業只執行其任務,完成後即退出。工作不會監聽或處理要求。
建立或更新職位後,您可以執行以下操作:
- 執行工作 (單次)、 依排程,或做為工作流程的一部分。
- 執行工作時,覆寫為工作設定的參數。
- 管理個別執行作業,並查看執行記錄。
您可以將工作架構為單一工作,或多個可平行執行的獨立工作 (最多 10,000 個工作)。每個工作都會執行一個容器執行個體,且可設定在失敗時重試。每項工作都會知道自己的索引,並儲存在 CLOUD_RUN_TASK_INDEX 環境變數中。工作總數會儲存在 CLOUD_RUN_TASK_COUNT 環境變數中。如果您要平行處理資料,程式碼必須負責判斷哪個工作處理哪個資料子集。
您可以設定任務逾時時間,並指定任務失敗時的重試次數。如果任何任務超過其最大重試次數,則該任務將被標記為 失敗。如果任何工作失敗,Cloud Run 嘗試執行所有工作後,工作執行作業會標示為「失敗」。
根據預設,每項工作最多執行 10 分鐘。您可以變更工作逾時設定,修改預設值,最長可達 168 小時 (7 天)。如為使用 GPU 的工作,逾時時間上限為 1 小時。
工作執行沒有明確的逾時時間:所有工作完成後,工作執行就會完成。
作業會使用第二代執行環境。
必要的角色
若要取得建立 Cloud Run 作業所需的權限,請管理員授予您下列 IAM 角色:
- Cloud Run 開發人員 (
roles/run.developer) 在 Cloud Run 工作上 - 服務身分上的服務帳戶使用者 (
roles/iam.serviceAccountUser) - 作業容器鏡像的 Artifact Registry 儲存庫上的 Artifact Registry Reader (
roles/artifactregistry.reader)
如需與 Cloud Run 相關聯的 IAM 角色和權限清單,請參閱「Cloud Run IAM 角色」和「Cloud Run IAM 權限」。如果 Cloud Run 作業與Google Cloud API (例如 Cloud 用戶端程式庫) 介接,請參閱服務身分設定指南。如要進一步瞭解如何授予角色,請參閱「部署權限」和「管理存取權」。
支援的容器登錄和映像檔
您可以直接使用儲存在 Artifact Registry 的容器映像檔,或是來自 Docker Hub 或 GitHub Container Registry 的公開映像檔。Google 建議使用 Artifact Registry。 GitHub Container Registry 和 Docker Hub 映像檔的公開映像檔最多會快取一小時。
如要使用其他公開或私人註冊資料庫 (例如 JFrog Artifactory 或 Nexus) 的容器映像檔,或是 GitHub Container Registry 的私人映像檔,請設定 Artifact Registry 遠端存放區。
只有在部署熱門容器映像檔 (例如 Docker 官方映像檔或 Docker 贊助的 OSS 映像檔) 時,才應考慮使用 Docker Hub。如要提高可用性,Google 建議使用 Artifact Registry 遠端存放區部署這些 Docker Hub 或 GitHub Container Registry 映像檔。
從 Docker Hub 或 Artifact Registry 遠端存放區 (使用外部登錄檔) 部署時,Cloud Run 不支援大於 9.9 GB 的容器映像檔層。
建立新工作
您可以使用 Google Cloud 控制台、Google Cloud CLI、YAML 或 Terraform 建立新工作。
控制台
如要建立新工作,請按照下列步驟操作:
前往 Google Cloud 控制台的 Cloud Run 頁面:
從 Cloud Run 導覽功能表中選擇 Jobs,然後按一下 Deploy container 以顯示 Create job 表單。
按一下「容器、網路、安全性」,設定其他工作屬性。
在「Edit container」(編輯容器) 部分中,視需要在適當的分頁中設定下列設定:
在「任務負荷能力」下方:
在「工作逾時」下方,以秒為單位指定工作可執行的最長時間,最多 168 小時 (7 天)。對於使用 GPU 的任務,最大可用逾時時間為 1 小時。每項工作都必須在這個時間內完成。預設值為 10 分鐘。
在「每項失敗工作的重試次數」下方,指定工作失敗時的重試次數。預設值為 3 次重試。
在「平行處理」下方:
- 在大多數情況下,您可以選取「盡可能並行執行更多工作」。
- 如果因為工作存取資源的調度限制,需要設定下限,請選取「限制並行工作數上限」,並在「自訂平行處理限制」欄位中指定並行工作數。
設定完工作後,請按一下「建立」,在 Cloud Run 中建立工作。
gcloud
要使用指令列,您需要先準備好相應的軟體。設定 gcloud CLI 。
如要建立新工作,請按照下列步驟操作:
執行下列指令:
或者,使用部署指令:gcloud run jobs create JOB_NAME --image IMAGE_URL OPTIONS
gcloud run jobs deploy JOB_NAME --image IMAGE_URL OPTIONS
更改下列內容:
JOB_NAME:要建立的工作名稱。如果省略這個參數,系統會在您執行指令時提示輸入工作名稱。IMAGE_URL:容器映像檔的參照,例如us-docker.pkg.dev/cloudrun/container/job:latest。(可選)將
OPTIONS替換為以下任選項:選項 說明 --tasks接受大於或等於 1 的整數。預設值為 1,上限為 10,000。每個任務都配備了環境變數。 CLOUD_RUN_TASK_INDEX取值範圍為 0 到任務數減 1,以及CLOUD_RUN_TASK_COUNT即任務數量--max-retries失敗工作的重試次數。如果任何工作失敗次數超過此限制,整個工作就會標示為「失敗」。舉例來說,如果設為 1,失敗的工作會重試一次,總共嘗試兩次。預設值為 3。接受 0 到 10 之間的整數。 --task-timeout接受「2s」等時間長度。預設為 10 分鐘,最長為 168 小時 (7 天)。如果工作使用 GPU,逾時時間上限為 1 小時。 --parallelism可平行執行的工作數量上限。預設情況下,任務將以最快的速度並行啟動。如需值範圍,請參閱「平行處理」。 --execute-now如果設定此選項,系統會在工作建立後立即啟動工作執行程序。等同於先呼叫 gcloud run jobs create,再呼叫gcloud run jobs execute。除了上述選項,您也可以指定更多設定,例如環境變數或記憶體上限。
如需建立工作時可用的完整選項清單,請參閱 gcloud run jobs create 指令列說明文件。
等待工作建立完成。完成後,您會看到成功訊息。
YAML
您可以將工作規格儲存在 YAML 檔案中,然後使用 gcloud CLI 部署。
建立新的
job.yaml檔案,並加入以下內容:apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB spec: template: spec: template: spec: containers: - image: IMAGE_URL
更改下列內容:
- JOB:Cloud Run 工作名稱。工作名稱不得超過 49 個半形字元,且每個區域和專案的工作名稱不得重複。
IMAGE_URL:容器映像檔的參照,例如us-docker.pkg.dev/cloudrun/container/job:latest。
您也可以指定更多設定,例如環境變數或記憶體限制。
使用下列指令部署新工作:
gcloud run jobs replace job.yaml
如果存在
job.yaml檔案,gcloud run jobs replace指令預設會使用該檔案。
Terraform
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
在 Terraform 設定的google_cloud_run_v2_job 資源中新增下列項目:用戶端程式庫
如何透過程式碼建立工作:
REST API
如要建立工作,請向 Cloud Run Admin API jobs 端點傳送 POST HTTP 要求。
例如使用 curl:
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -X POST \ -d '{template: {template: {containers: [{image: "IMAGE_URL"}]}}}' \ https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/jobs?jobId=JOB_NAME
更改下列內容:
- ACCESS_TOKEN:帳戶的有效存取權杖,該帳戶具有建立工作的 IAM 權限。舉例來說,如果您已登入 gcloud,可以使用
gcloud auth print-access-token擷取存取權杖。在 Cloud Run 容器執行個體中,您可以使用容器執行個體中繼資料伺服器擷取存取權杖。 - JOB_NAME:要建立的工作名稱。
IMAGE_URL:容器映像檔的參照,例如us-docker.pkg.dev/cloudrun/container/job:latest。- REGION:作業的 Google Cloud 區域。
- PROJECT_ID: Google Cloud 專案 ID。
Cloud Run 位置
Cloud Run 具有「地區性」,這表示執行 Cloud Run 服務的基礎架構位於特定地區,並由 Google 代管,可為該地區內所有區域提供備援功能。
選擇 Cloud Run 服務的執行地區時,請將延遲時間、可用性或耐用性需求做為主要考量。一般而言,您可以選擇最靠近使用者的區域,但您應考量 Cloud Run 服務所使用的其他 Google Cloud產品位置。使用分散在不同位置的 Google Cloud 產品,可能會影響服務的延遲時間和費用。
Cloud Run 可在下列地區使用:
採用級別 1 定價
asia-east1(臺灣)asia-northeast1(東京)asia-northeast2(大阪)asia-south1(印度孟買)asia-southeast3(曼谷)europe-north1(芬蘭)低二氧化碳排放2
europe-north2(斯德哥爾摩)二氧化碳排放量低
europe-southwest1(馬德里)二氧化碳排放量低
europe-west1(比利時)二氧化碳排放量低
europe-west4(荷蘭)二氧化碳排放量低
europe-west8(米蘭)europe-west9(巴黎)低二氧化碳排放2
me-west1(特拉維夫)northamerica-south1(墨西哥)us-central1(愛荷華州)二氧化碳排放量低
us-east1(南卡羅來納州)us-east4(北維吉尼亞州)us-east5(哥倫布)us-south1(達拉斯)二氧化碳排放量低
us-west1(奧勒岡州)二氧化碳排放量低
採用級別 2 定價
africa-south1(約翰尼斯堡)asia-east2(香港)asia-northeast3(韓國首爾)asia-southeast1(新加坡)asia-southeast2(雅加達)asia-south2(印度德里)australia-southeast1(雪梨)australia-southeast2(墨爾本)europe-central2(波蘭華沙)europe-west10(柏林)europe-west12(杜林)europe-west2(英國倫敦)二氧化碳排放量低
europe-west3(德國法蘭克福)europe-west6(瑞士蘇黎世)二氧化碳排放量低
me-central1(杜哈)me-central2(達曼)northamerica-northeast1(蒙特婁)二氧化碳排放量低
northamerica-northeast2(多倫多)二氧化碳排放量低
southamerica-east1(巴西聖保羅)二氧化碳排放量低
southamerica-west1(智利聖地牙哥)二氧化碳排放量低
us-west2(洛杉磯)us-west3(鹽湖城)us-west4(拉斯維加斯)
如果您已建立 Cloud Run 服務,即可在 Google Cloud 控制台的 Cloud Run 資訊主頁中查看區域。
建立新工作時,Cloud Run 服務代理程式必須能夠存取容器 (預設情況下可以)。
更新現有職缺
即使容器映像檔沒有發生任何變化,更改任何配置設定也需要更新作業。請注意,對於任何未更改的設置,將繼續使用先前的設置。
您可以使用 Google Cloud 控制台、Google Cloud CLI、YAML 或 Terraform 更新現有作業。
控制台
更新現有職位:
前往 Google Cloud 控制台的 Cloud Run 頁面:
按一下 Cloud Run 導覽選單中的「工作」,即可顯示工作清單。
點選職位以顯示職位詳情頁面。
按一下 [編輯]。
如果您對作業代碼進行了更改,請指定新的容器 image digest。
如果需要,可以更改作業中的任務數量。
視需要按一下「容器、網路、安全性」,更新任何其他工作屬性:
在「任務負荷能力」下方:
- 在「工作逾時」下方,以秒為單位指定工作可執行的最長時間,最多 168 小時 (7 天)。每項任務都必須在規定時間內完成。預設值為 10 分鐘 (600 秒)。
- 在「每項失敗工作的重試次數」下方,指定工作失敗時的重試次數。預設值為 3 次重試。
在 平行性 下:
- 在大多數情況下,您可以選取「盡可能並行執行更多工作」。
- 如果因工作存取資源的調度限制,需要設定下限,請選取「限制並行工作數量」,並在「自訂平行處理量限制」欄位中指定並行工作數量上限。
設定完畢後,請按一下「更新」,修改 Cloud Run 中的工作,並等待工作建立完成。
gcloud
-
在 Google Cloud 控制台中啟用 Cloud Shell。
控制台底部會開啟 Cloud Shell 工作階段,並顯示指令列提示。 Google Cloud Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已針對您目前的專案設定好相關值。工作階段可能要幾秒鐘的時間才能初始化。
執行下列指令:
gcloud run jobs update JOB_NAME
更改下列內容:
JOB_NAME:要更新的工作名稱。(選用) 請使用下列選項取代
OPTIONS:選項 說明 --tasks接受大於或等於 1 的整數。預設值為 1,上限為 10,000。每個工作都會取得環境變數 CLOUD_RUN_TASK_INDEX,其值介於 0 和工作數減 1 之間,以及CLOUD_RUN_TASK_COUNT,也就是工作數--max-retries失敗工作的重試次數。如果任何工作失敗次數超過此限制,整個工作就會標示為「失敗」。舉例來說,如果設為 1,失敗的工作會重試一次,總共嘗試兩次。預設值為 3。接受 0 到 10 之間的整數。--task-timeout接受「2s」等時間長度。預設為 10 分鐘,最長為 168 小時 (7 天)。 --parallelism可平行執行的工作數量上限。預設情況下,任務將以最快的速度並行啟動。如需值範圍,請參閱「平行處理」。
除了上述選項,您還可以設定其他選用設定:
如需建立工作時可用的完整選項清單,請參閱 gcloud run jobs create 指令列說明文件。
等待工作更新完成。成功完成時,畫面會顯示成功訊息,如下所示:
Job [JOB_NAME] has been successfully updated. View details about this job by running `gcloud run jobs describe JOB_NAME`. See logs for this execution at: https://console.cloud.google.com/logs/viewer?project=PROJECT_ID&resource=cloud_run_revision/service_name/JOB_NAME
YAML
如要下載或查看現有工作的設定,請使用下列指令將結果儲存至 YAML 檔案:
gcloud run jobs describe JOB --format export > job.yaml
從工作設定 YAML 檔案中,視需要修改任何 spec.template 子項屬性,更新設定,然後重新部署:
Terraform
使用 terraform apply 指令在 main.tf 檔案中變更作業配置。詳細的 Terraform 使用說明請參閱:
詳情請參閱 terraform apply 指令列選項。
用戶端程式庫
如要透過程式碼更新現有工作:
REST API
如要更新作業,請將 PATCH HTTP 要求傳送至 Cloud Run Admin API jobs 端點。
例如使用 curl:
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -X PATCH \ -d '{template: {template: {containers: [{image: "IMAGE_URL"}]}}}' \ https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/jobs/JOB_NAME
更改下列內容:
- ACCESS_TOKEN:帳戶的有效存取權杖,該帳戶具有更新工作的 IAM 權限。舉例來說,如果您已登入 gcloud,可以使用
gcloud auth print-access-token擷取存取權杖。在 Cloud Run 容器執行個體中,您可以使用容器執行個體中繼資料伺服器擷取存取權杖。 - JOB_NAME:要更新的工作名稱。
IMAGE_URL:容器映像檔的參照,例如us-docker.pkg.dev/cloudrun/container/job:latest。- REGION:作業的 Google Cloud 區域。
- PROJECT_ID: Google Cloud 專案 ID。
程式碼範例
如需顯示職缺的程式碼範例,請參閱特定語言的快速入門導覽課程。
將多個容器部署至工作 (Sidecar)
在部署多個容器 (側車) 的 Cloud Run 工作時,會有一個封裝工作設定的主要工作容器,以及一或多個側車容器。
每個執行個體最多可部署 10 個容器,包括主要工作容器。執行個體中的所有容器共用相同的網路命名空間,並可使用記憶體內共用磁碟區共用檔案。
用途
Sidecar 的常見用途如下:
- 使用 Prometheus 或 Opentelemetry 等收集器代理程式,從 Cloud Run 作業擷取自訂指標,並傳送至您選擇的指定後端。
- 允許沒有內建 Hashicorp Vault 邏輯的應用程式使用從 Vault 取得的靜態和動態金鑰,使用 Vault sidecar。
部署含有 Sidecar 容器的工作
您可以使用Google Cloud 控制台、Google Cloud CLI 或 YAML 將多個 sidecar 部署到 Cloud Run 作業。
按一下分頁標籤,瞭解如何使用自選工具。
控制台
前往 Google Cloud 控制台的 Cloud Run 頁面:
如要部署至現有工作,請按一下「工作」,在工作清單中找出工作,然後按一下開啟,再按一下「查看及編輯設定」,顯示編輯工作表單。
如要建立新工作,請依序點選「Deploy container」(部署容器) 和「Job」(工作)。提供工作名稱,以及要部署的主要工作容器映像檔網址。
按一下「容器、網路、安全性」
在「編輯容器」資訊卡中,視需要設定主要工作容器。
按一下「新增容器」,然後設定要與主要工作容器一起新增的邊車容器。如果邊車 依賴於服務 中的另一個容器,請在 容器啟動順序 下拉選單中指示這一點。針對您部署的每個邊車容器重複執行這個步驟。
按一下 建立 建立新服務,或按 更新 更新現有作業,然後等待部署完成。
gcloud
-
在 Google Cloud 控制台中啟用 Cloud Shell。
控制台底部會開啟 Cloud Shell 工作階段,並顯示指令列提示。 Google Cloud Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已針對您目前的專案設定好相關值。工作階段可能要幾秒鐘的時間才能初始化。
如要將多個容器部署至工作,請執行下列指令:
gcloud run jobs create JOB \ --container JOB_CONTAINER_NAME \ --image='IMAGE_URL' \ --container SIDECAR_CONTAINER_NAME \ --image='SIDECAR_IMAGE'
更改下列內容:
- JOB:要部署至的工作名稱。您可以完全省略這個參數,這樣系統會提示您輸入工作名稱。
- JOB_CONTAINER_NAME:主要工作容器的名稱。
IMAGE_URL:容器映像檔的參照,例如us-docker.pkg.dev/cloudrun/container/job:latest。- SIDECAR_CONTAINER_NAME:Sidecar 容器的名稱,例如
sidecar。 - SIDECAR_IMAGE: 對邊車容器映像檔的引用。
如要在部署指令中設定每個容器,請在
container參數後提供每個容器的設定,例如:gcloud run jobs create JOB \ --container CONTAINER_1_NAME \ --image='IMAGE_URL' \ --set-env-vars=KEY=VALUE \ --container SIDECAR_CONTAINER_NAME \ --image='SIDECAR_IMAGE' \ --set-env-vars=KEY_N=VALUE_N
等待作業部署完成。成功完成時,畫面會顯示成功訊息。
YAML
這些說明展示了帶有 sidecar 的 Cloud Run 作業的基本 YAML 檔案。
建立名為 job.yaml 的檔案,並在當中加入下列內容:
apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB spec: template: spec: containers: - image: IMAGE_URL - image: SIDECAR_IMAGE
更改下列內容:
- JOB 加上您的 Cloud Run 主作業容器的名稱。 職位名稱必須少於或等於 49 個字元。
IMAGE_URL:容器映像檔的參照,例如us-docker.pkg.dev/cloudrun/container/job:latest。SIDECAR_IMAGE:補充容器映像檔的參照。
更新 YAML 以納入 Ingress 和 Sidecar 容器後,請使用下列指令部署至 Cloud Run:
gcloud run jobs replace job.yaml如果存在 job.yaml 檔案,gcloud run jobs replace 指令預設會使用該檔案。
Terraform
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
在 Terraform 設定中,將下列內容新增至google_cloud_run_v2_job 資源:resource "google_cloud_run_v2_job" "default" {
name = "JOB_NAME"
location = "europe-west1"
template {
template {
containers {
name = "CONTAINER_NAME"
image = "IMAGE_URL"
}
containers {
name = "SIDECAR_CONTAINER_NAME"
image = "SIDECAR_IMAGE_URL"
}
}
}
}
更改下列內容:
- JOB_NAME:Cloud Run 工作名稱。
- CONTAINER_NAME:容器名稱。
IMAGE_URL:容器映像檔的參照,例如us-docker.pkg.dev/cloudrun/container/job:latest。- SIDECAR_CONTAINER_NAME:邊車容器的名稱。
- SIDECAR_IMAGE_URL: 對邊車容器影像的引用。
可供部署作業使用的 Sidecar 功能
如果部署作業有多個容器,且您有相依性,需要先啟動某些容器,才能啟動部署作業中的其他容器,則可以指定容器啟動順序。
如果容器依附於其他容器,您必須在部署作業中使用啟動健康狀態檢查。如果您使用健康檢查,Cloud Run 會按照容器啟動順序檢查每個容器的健康狀態,確保每個容器都順利通過檢查,才會啟動下一個容器。如果您未使用健康狀態檢查,即使容器所依附的容器未執行,健康狀態良好的容器仍會啟動。
單一執行個體中的多個容器可以存取共用的記憶體內磁碟區,每個容器都能透過您建立的掛接點存取該磁碟區。
限制
如果您的作業使用 Cloud Run 的內建功能連線至 Cloud SQL 執行個體,請參閱「內建 Cloud SQL 連線」一文中的已知問題。
後續步驟
建立或更新職位後,您可以執行以下操作: