建立工作

本頁說明如何從現有容器映像檔建立及更新 Cloud Run 作業。Cloud Run 服務會監聽及處理要求,但 Cloud Run 工作只會執行工作,並在完成時結束。工作不會監聽或處理要求。

建立或更新工作後,您可以:

您可以將工作架構為單一工作,或多個可平行執行的獨立工作 (最多 10,000 個工作)。每個工作都會執行一個容器執行個體,並可設定在失敗時重試。每項工作都會知道自己的索引,並儲存在 CLOUD_RUN_TASK_INDEX 環境變數中。工作總數會儲存在 CLOUD_RUN_TASK_COUNT 環境變數中。如果您要平行處理資料,程式碼必須負責判斷哪個工作處理哪個資料子集。

您可以為工作設定逾時時間,並指定工作失敗時的重試次數。如果任何工作超過重試次數上限,該工作就會標示為「失敗」。如果任何工作失敗,Cloud Run 嘗試執行所有工作後,工作執行作業就會標示為「失敗」

根據預設,每項工作最多執行 10 分鐘。您可以變更工作逾時設定,修改預設值,最長可達 168 小時 (7 天)。預先發布版支援超過 24 小時的逾時。

工作執行作業沒有明確的逾時時間:所有工作完成後,工作執行作業就會完成。

作業會使用第二代執行環境

必要的角色

如要取得建立 Cloud Run 作業所需的權限,請要求管理員授予下列 IAM 角色:

如需與 Cloud Run 相關聯的 IAM 角色和權限清單,請參閱 Cloud Run IAM 角色Cloud Run IAM 權限。如果 Cloud Run 作業與Google Cloud API (例如 Cloud 用戶端程式庫) 介接,請參閱服務身分設定指南。 如要進一步瞭解如何授予角色,請參閱部署權限管理存取權

支援的容器登錄和映像檔

您可以直接使用儲存在 Artifact RegistryDocker Hub 的容器映像檔。Google 建議使用 Artifact Registry。 Docker Hub 映像檔最多會快取一小時。

如要使用其他公開或私人註冊資料庫 (例如 JFrog Artifactory、Nexus 或 GitHub Container Registry) 的容器映像檔,請設定 Artifact Registry 遠端存放區

只有在部署熱門容器映像檔 (例如 Docker 官方映像檔Docker 贊助的 OSS 映像檔) 時,才應考慮使用 Docker Hub。 如要提高可用性,Google 建議使用 Artifact Registry 遠端存放區部署這些 Docker Hub 映像檔。

從 Docker Hub 或 Artifact Registry 遠端存放區 (使用外部登錄檔) 部署時,Cloud Run 不支援大於 9.9 GB 的容器映像檔層。

建立新工作

您可以使用 Google Cloud 控制台、Google Cloud CLI、YAML 或 Terraform 建立新工作。

控制台

如要建立新工作,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的 Cloud Run 頁面:

    前往 Cloud Run

  2. 從選單中選取「Jobs」,然後按一下「Deploy container」,顯示「Create job」表單。

    1. 在表單中,指定含有工作程式碼的容器映像檔,或從先前部署的容器清單中選取。
    2. 系統會根據容器映像檔自動產生工作名稱。您可以視需要編輯或變更工作名稱。工作建立完成後,即無法變更工作名稱。
    3. 選取您要使用工作的地區。區域選取器會醒目顯示碳影響最低的區域。
    4. 指定要在工作中執行的任務數量。所有任務均須完成,工作才會視同成功。根據預設,工作會平行執行。
  3. 按一下「容器、磁碟區、網路與安全性」,設定其他工作屬性。

    • 「任務負荷能力」下方:
    1. 在「記憶體」選單中,指定所需記憶體大小。 預設值為最低需求,也就是 512 MiB。
    2. 在「CPU」選單中,指定所需的 CPU 數量。預設值為最低需求,也就是 1 個 CPU。
    3. 在「工作逾時」下方,以秒為單位指定工作可執行的時間長度上限,最多 168 小時 (7 天)。如要使用超過 24 小時的逾時時間,請使用預先發布版。每項工作都必須在這個時間內完成。預設值為 10 分鐘 (600 秒)。

    4. 在「每項失敗工作的重試次數」下方,指定工作失敗時的重試次數。預設值為 3 次重試。

    • 在「平行處理」下方:

      1. 在大多數情況下,您可以選取「盡可能並行執行更多工作」
      2. 如果因為工作存取的資源受到調度限制,而需要設定下限,請選取「限制並行任務數量上限」,並在「自訂平行處理量上限」欄位中指定並行任務數量。
  4. 視需要前往適當的分頁,設定其他選項:

  5. 設定完工作後,按一下「建立」,在 Cloud Run 中建立工作。

  6. 如要執行工作,請參閱執行工作依排程執行工作

gcloud

如要使用指令列,您必須先設定 gcloud CLI

如要建立新工作,請按照下列步驟操作:

  1. 執行下列指令:

    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 天)。如要使用超過 24 小時的逾時時間,請使用預先發布版
      --parallelism 可平行執行的工作數量上限。依預設,系統會盡快平行啟動工作。如需值範圍,請參閱「平行處理」。
      --execute-now 如果設定此屬性,系統會在建立工作後立即啟動工作執行。等同於先呼叫 gcloud run jobs create,再呼叫 gcloud run jobs execute

      除了上述選項,您也可以指定更多設定,例如環境變數或記憶體上限。

      如需建立工作時可用的完整選項清單,請參閱 gcloud run jobs create 指令列說明文件。

  2. 等待工作建立完成。成功完成後,畫面上會顯示成功訊息。

  3. 如要執行工作,請參閱執行工作依排程執行工作

YAML

您可以將工作規格儲存在 YAML 檔案中,然後使用 gcloud CLI 部署。

  1. 建立新的 job.yaml 檔案,並加入以下內容:

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: JOB
    spec:
      template:
        spec:
          template:
            spec:
              containers:
              - image: IMAGE

    取代

    • JOB 改為 Cloud Run 作業名稱。工作名稱不得超過 49 個字元,且每個區域和專案的名稱不得重複。
    • IMAGE,並提供作業容器映像檔的網址。

    您也可以指定更多設定,例如環境變數或記憶體限制。

  2. 使用下列指令部署新工作:

    gcloud run jobs replace job.yaml

Terraform

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

在 Terraform 設定中,將下列項目新增至 google_cloud_run_v2_job 資源:
resource "google_cloud_run_v2_job" "default" {
  name     = "cloud-run-job"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    template {
      containers {
        image = "us-docker.pkg.dev/cloudrun/container/job:latest"
      }
    }
  }
}

用戶端程式庫

如何透過程式碼建立工作:

REST API

如要建立工作,請將 POST HTTP 要求傳送至 Cloud Run Admin API jobs 端點

例如使用 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 定價

採用級別 2 定價

如果您已建立 Cloud Run 服務,即可在 Google Cloud 控制台的 Cloud Run 資訊主頁中查看地區。

建立新工作時,Cloud Run 服務代理程式必須能夠存取容器 (預設情況下可以)。

更新現有職缺

即使容器映像檔沒有變更,只要變更任何設定,就必須更新工作。請注意,如果設定未變更,系統會繼續使用先前的設定。

您可以使用 Google Cloud 控制台、Google Cloud CLI、YAML 或 Terraform 更新現有工作。

控制台

如要更新現有工作:

  1. 前往 Google Cloud 控制台的 Cloud Run 頁面:

    前往 Cloud Run

  2. 按一下「Jobs」(工作) 分頁標籤,即可顯示工作清單。

  3. 按一下工作,即可顯示「工作詳細資料」頁面。

  4. 按一下 [編輯]

  5. 如果變更工作程式碼,請指定新的容器映像檔摘要

  6. 視需要變更工作中的任務數量。

  7. 您也可以按一下「容器、磁碟區、網路與安全性」,更新任何其他作業屬性:

    • 「任務負荷能力」下方:
    1. 在「記憶體」選單中,指定所需記憶體大小。 預設值為最低需求,也就是 512 MiB。
    2. 在「CPU」選單中,指定所需的 CPU 數量。預設值為最低需求,也就是 1 個 CPU。
    3. 在「工作逾時」下方,以秒為單位指定工作可執行的最長時間,最多 168 小時 (7 天)。如要使用超過 24 小時的逾時時間,請使用預先發布版。每項工作都必須在這段時間內完成。預設值為 10 分鐘 (600 秒)。
    4. 在「每項失敗工作的重試次數」下方,指定工作失敗時的重試次數。預設值為 3 次重試。
    • 在「平行處理」下方:

      1. 在大多數情況下,您可以選取「盡可能並行執行更多工作」
      2. 如果因工作存取資源的調度限制,需要設定較低的上限,請選取「限制並行工作數量」,並在「自訂平行處理量上限」欄位中指定並行工作數量上限。
  8. 視需要前往適當的分頁,設定其他選項:

  9. 設定完工作後,按一下「儲存」,在 Cloud Run 中建立工作,並等待工作建立完成。

  10. 如要執行工作,請參閱執行工作依排程執行工作

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 執行下列指令:

    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 天)。如要使用超過 24 小時的逾時時間,請使用預先發布版
      --parallelism 可平行執行的工作數量上限。依預設,系統會盡快平行啟動工作。如需值範圍,請參閱「平行處理」。

    除了上述選項,您還可以設定其他選用設定:

    如需建立工作時可用的完整選項清單,請參閱 gcloud run jobs create 指令列說明文件。

  3. 等待工作更新完成。成功完成時,畫面會顯示成功訊息,類似如下:

    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
  4. 如要執行工作,請參閱執行工作依排程執行工作

YAML

如要下載或查看現有作業的設定,請使用下列指令將結果儲存至 YAML 檔案:

gcloud run jobs describe JOB --format export > job.yaml

從工作設定 YAML 檔案中,視需要修改任何 spec.template 子項屬性,更新設定,然後重新部署:

  1. 更新現有工作設定:

    gcloud run jobs replace job.yaml
  2. 如要執行工作,請參閱執行工作依排程執行工作

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)

在部署多個容器 (Sidecar) 的 Cloud Run 工作中,有一個主要工作容器會封裝工作設定,以及一或多個 Sidecar 容器。

每個執行個體最多可部署 10 個容器,包括主要工作容器。執行個體中的所有容器共用相同的網路命名空間,並可使用記憶體內共用磁碟區共用檔案。

用途

Sidecar 的常見用途如下:

  • 使用收集器代理程式 (例如 PrometheusOpentelemetry),從 Cloud Run 工作擷取自訂指標,並傳送至您選擇的指定後端。
  • 讓未內建 Hashicorp Vault 邏輯的應用程式,使用 Vault Sidecar 取得 Vault 來源的靜態和動態密鑰。

部署含有 Sidecar 容器的工作

您可以使用Google Cloud 控制台、Google Cloud CLI 或 YAML,將多個 Sidecar 部署至 Cloud Run 工作。

按一下分頁標籤,瞭解如何使用自選工具。

控制台

  1. 前往 Google Cloud 控制台的 Cloud Run 頁面:

    前往 Cloud Run

  2. 如要部署至現有工作,請按一下「工作」,在工作清單中找出工作,然後按一下開啟,再按一下「查看及編輯設定」,顯示編輯工作表單。

  3. 如要建立新工作,請依序點選「Deploy container」(部署容器) 和「Job」(工作)。提供工作名稱和要部署的主要工作容器映像檔網址。

  4. 按一下「容器、磁碟區、網路與安全性」

  5. 在「編輯容器」資訊卡中,視需要設定主要工作容器。

  6. 按一下「新增容器」,然後設定要與主要工作容器一起新增的 Sidecar 容器。如果補充資訊依附於服務中的另一個容器,請在「Container start-up order」(容器啟動順序) 下拉式選單中指出這點。針對您部署的每個 Sidecar 容器重複執行這個步驟。

  7. 按一下新服務的「建立」或現有作業的「更新」,然後等待部署完成。

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 如要將多個容器部署至 Job,請執行下列指令:

    gcloud run jobs create JOB \
     --container JOB_CONTAINER_NAME \
     --image='JOB_IMAGE' \
     --container SIDECAR_CONTAINER_NAME \
     --image='SIDECAR_IMAGE'

    取代:

    • JOB 替換成您要部署的工作名稱。您可以完全省略這個參數,這樣系統會提示您輸入工作名稱。
    • JOB_CONTAINER_NAME,並為主要工作容器命名。
    • JOB_IMAGE,並參照主要工作容器映像檔,例如 us-docker.pkg.dev/cloudrun/container/job:latest
    • SIDECAR_CONTAINER_NAME 替換為 Sidecar 容器的名稱,例如 sidecar
    • SIDECAR_IMAGE,並參照 Sidecar 容器映像檔。

    如要在部署指令中設定每個容器,請在 container 參數後提供每個容器的設定,例如:

    gcloud run jobs create JOB \
      --container CONTAINER_1_NAME \
      --image='JOB_IMAGE' \
      --set-env-vars=KEY=VALUE \
      --container SIDECAR_CONTAINER_NAME \
      --image='SIDECAR_IMAGE' \
      --set-env-vars=KEY_N=VALUE_N
  3. 等待工作部署作業完成。成功完成時,畫面會顯示成功訊息。

YAML

這些操作說明會顯示 Cloud Run 工作的基本 YAML 檔案,其中包含 Sidecar。建立名為 job.yaml 的檔案,並在當中加入下列內容:

apiVersion: run.googleapis.com/v1
kind: Job
metadata:
  name: JOB
spec:
  template:
    spec:
      containers:
      - image: JOB_IMAGE
      - image: SIDECAR_IMAGE
      

取代:

  • JOB 為 Cloud Run 主要工作容器的名稱。工作名稱不得超過 49 個字元。
  • JOB_IMAGE,並參照主要工作容器映像檔,例如 us-docker.pkg.dev/cloudrun/container/job:latest。視需要在此項目後提供任何必要的容器設定項目。
  • SIDECAR_IMAGE,並參照 Sidecar 容器映像檔。這個項目之後,您可以視需要提供任何容器設定項目。如要在 YAML 的 containers 陣列中新增更多元素,即可指定多個 Sidecar。

更新 YAML 以納入 Ingress 和 Sidecar 容器後,請使用下列指令部署至 Cloud Run:

gcloud run jobs replace job.yaml

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 容器的名稱。
  • SIDECAR_IMAGE_URL,並參照邊車容器映像檔。

可供部署作業使用的 Sidecar 功能

如果部署作業有多個容器,且您有相依性,需要先啟動某些容器,才能啟動部署作業中的其他容器,則可以指定容器啟動順序

如果容器依附於其他容器,您必須在部署作業中使用啟動健康狀態檢查。如果您使用健康狀態檢查,Cloud Run 會按照容器啟動順序檢查每個容器的健康狀態,確保每個容器都順利通過檢查,才會啟動下一個容器。如果您未使用健康狀態檢查,即使容器所依附的容器未執行,健康狀態良好的容器也會啟動。

單一執行個體中的多個容器可以存取共用的記憶體內磁碟區,每個容器都能透過您建立的掛接點存取該磁碟區。

後續步驟

建立或更新工作後,您可以執行下列操作: