建立工作

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

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

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

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

根據預設,每項工作最多執行 10 分鐘。您可以變更工作逾時設定來修改預設值,最長可達 168 小時 (7 天)。如果工作使用 GPU,逾時時間上限為 12 小時。

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

工作會使用第二代執行環境。

必要的角色

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

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

支援的 Container Registry 和映像檔

您可以直接使用儲存在 Artifact Registry 中的容器映像檔,或 Docker Hub 或 GitHub Container Registry 中的公開映像檔。Google 建議使用 Artifact Registry。GitHub Container Registry 的公開映像檔和 Docker Hub 映像檔最多會快取一小時。

您可以設定 Artifact Registry 遠端存放區,使用其他公開或私人註冊資料庫 (例如 JFrog Artifactory 或 Nexus) 的容器映像檔,或 GitHub Container 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 控制台、gcloud CLI、YAML、Terraform、用戶端程式庫或 REST API 建立新工作:

控制台

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

  1. 前往 Google Cloud 控制台的「Cloud Run jobs」(Cloud Run 工作) 頁面:

    前往「Cloud Run jobs」(Cloud Run 工作)

  2. 按一下「Deploy container」(部署容器),顯示「Create job」(建立工作) 表單。

  3. 在表單中,指定含有工作程式碼的容器映像檔,或從先前部署的容器清單中選取。

  4. 系統會根據容器映像檔自動產生工作名稱。您可以視需要在表單上編輯工作名稱。提交表單後,就無法編輯工作名稱。

  5. 在「Region」(區域) 欄位中, 選取工作所在的區域。區域選取器會醒目顯示碳影響最低的區域。

  6. 指定要在工作中執行的任務數量。所有任務都必須成功,工作才會成功。根據預設,工作會並行執行。

  7. 按一下「容器、網路、安全性」,設定其他工作屬性。

  8. 在「Edit container」(編輯容器) 部分,視需要在適當的分頁中進行下列設定:

  9. 在「Task capacity」(工作容量) 部分,指定下列項目:

    1. 在「Task timeout」(工作逾時) 欄位中,指定工作可執行的時間長度上限 (以秒為單位),最多 168 小時 (7 天)。使用 GPU 的工作,逾時時間上限為 12 小時。每項工作都必須在這段時間內完成。預設值為 10 分鐘。

    2. 在「Number of retries per failed task」(每項失敗任務的重試次數) 欄位中,指定任務失敗時的重試次數。預設為重試 3 次。

  10. 在「Parallelism」(平行處理) 下方,如果因工作存取的資源有擴充限制,而需要設定較低的限制,請選取「Run as many tasks concurrently as possible」(同時執行盡可能多的工作),或選取「Limit the maximum number of concurrent tasks」(限制並行工作的數量上限),並在「Custom parallelism limit」(自訂平行處理限制) 欄位中指定並行工作的數量。

  11. 完成工作設定後,按一下「Create」(建立),在 Cloud Run 中建立工作。

  12. 如要執行工作,請參閱「執行工作」或「依排程執行工作」。

gcloud

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

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

  1. 執行下列指令:

    gcloud run jobs create JOB --image IMAGE_URL OPTIONS
    或者,您也可以使用 deploy 指令:
    gcloud run jobs deploy JOB --image IMAGE_URL OPTIONS

    更改下列內容:

    • JOB:Cloud Run 工作名稱。
    • 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 的工作,逾時時間上限為 12 小時。
      --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_URL

    更改下列內容:

    • JOB:Cloud Run 工作名稱。
    • IMAGE_URL:容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/job:latest。

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

  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

如要建立工作,請向 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

更改下列內容:

  • ACCESS_TOKEN:帳戶的有效存取權杖,該帳戶必須具備建立工作的 IAM 權限。舉例來說,如果您已登入 gcloud,可以使用 gcloud auth print-access-token 擷取存取權杖。在 Cloud Run 容器執行個體中,您可以使用容器執行個體中繼資料伺服器擷取存取權杖。
  • IMAGE_URL:容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/job:latest。
  • PROJECT_ID: Google Cloud 專案 ID。
  • REGION:工作的 Google Cloud 區域。
  • JOB:要建立的工作名稱。

Cloud Run 位置

Cloud Run 具有區域性,這表示執行 Cloud Run 服務的基礎架構位於特定區域,並由 Google 負責管理,實現該區域內所有可用區之間的備援可用性。

選擇執行 Cloud Run 服務的區域時,主要考量重點在於滿足延遲時間、可用性或耐用性需求。原則上可以選擇距離使用者最近的區域,但也應考慮 Cloud Run 服務所用其他 Google Cloud產品的位置。在多個位置搭配使用 Google Cloud 產品,可能會影響服務的延遲時間和費用。

Cloud Run 可在下列地區使用:

採用級別 1 定價

採用級別 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 控制台、gcloud CLI、YAML、Terraform、用戶端程式庫或 REST API 更新現有工作:

控制台

如要更新現有工作,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Cloud Run jobs」(Cloud Run 工作) 頁面:

    前往「Cloud Run jobs」(Cloud Run 工作)

  2. 按一下工作,顯示「Job details」(工作詳細資料) 頁面。

  3. 按一下「查看及編輯工作設定」。

  4. 選用:視需要變更工作中的任務數量。

  5. 選用:按一下「容器、網路、安全性」,更新其他工作屬性:

  6. 在「Task capacity」(工作容量) 部分,指定下列項目:

    1. 在「Task timeout」(工作逾時) 欄位中,指定工作可執行的時間長度上限 (以秒為單位),最多 168 小時 (7 天)。使用 GPU 的工作,逾時時間上限為 12 小時。每項工作都必須在這段時間內完成。預設值為 10 分鐘。

    2. 在「Number of retries per failed task」(每項失敗任務的重試次數) 欄位中,指定任務失敗時的重試次數。預設為重試 3 次。

  7. 在「Parallelism」(平行處理) 下方,如果因工作存取的資源有擴充限制,而需要設定較低的限制,請選取「Run as many tasks concurrently as possible」(同時執行盡可能多的工作),或選取「Limit the maximum number of concurrent tasks」(限制同時執行的工作數量上限),並在「Custom parallelism limit」(自訂平行處理限制) 欄位中指定同時執行的工作數量。

  8. 完成工作設定後,請按一下「Update」(更新),在 Cloud Run 中修改工作,並等待工作建立完成。

  9. 如要執行工作,請參閱「執行工作」或「依排程執行工作」。

gcloud

  1. 在 Google Cloud 控制台啟用 Cloud Shell。

    啟用 Cloud Shell

    Google Cloud 控制台底部會開啟 Cloud Shell 工作階段,並顯示指令列提示。Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已設定適用於您目前專案的值。工作階段可能要幾秒鐘的時間才能初始化。

  2. 請執行下列指令:

    gcloud run jobs update JOB

    更改下列內容:

    • JOB:Cloud Run 工作名稱。
    • 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 指令列說明文件。

  3. 等待工作更新完成。成功完成後,系統會顯示類似以下的成功訊息:

    Job [JOB] has been successfully updated.
    View details about this job by running `gcloud run jobs describe JOB`.
    See logs for this execution at: https://console.cloud.google.com/logs/viewer?project=PROJECT_ID&resource=cloud_run_revision/service_name/JOB
  4. 如要執行工作,請參閱「執行工作」或「依排程執行工作」。

YAML

  1. 如要下載或查看現有工作的設定,請執行下列指令,將結果儲存至 YAML 檔案:

    gcloud run jobs describe JOB --format export > job.yaml
  2. 視需要修改任何 spec.template 子項屬性,然後執行下列指令重新部署:

    gcloud run jobs replace job.yaml

    gcloud run jobs replace 指令預設會使用 job.yaml 檔案 (如有)。

  3. 如要執行工作,請參閱「執行工作」或「依排程執行工作」。

Terraform

使用 terraform apply 指令,在 main.tf 檔案中變更工作設定。如需詳細的 Terraform 操作說明,請參閱:

詳情請參閱 terraform apply 指令列選項。

用戶端程式庫

如要透過程式碼更新現有工作,請按照下列步驟操作:

REST API

如要更新工作,請向 Cloud Run Admin API jobs 端點傳送 PATCH HTTP 要求。

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

更改下列內容:

  • ACCESS_TOKEN:帳戶的有效存取權杖,該帳戶必須具備更新工作的 IAM 權限。舉例來說,如果您已登入 gcloud,可以使用 gcloud auth print-access-token 擷取存取權杖。在 Cloud Run 容器執行個體中,您可以使用容器執行個體中繼資料伺服器擷取存取權杖。
  • IMAGE_URL:容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/job:latest。
  • PROJECT_ID: Google Cloud 專案 ID。
  • REGION:工作的 Google Cloud 區域。
  • JOB:要更新的工作名稱。

程式碼範例

如需顯示工作的程式碼範例,請參閱特定語言的快速入門導覽課程。

將多個容器部署至工作 (sidecar)

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

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

用途

Sidecar 通常用於下列用途:

  • 從 Cloud Run 工作擷取自訂指標,並使用 Prometheus 或 Opentelemetry 等收集器代理程式,將指標傳送至您指定的後端。
  • 讓未內建 Hashicorp Vault 邏輯的應用程式,使用 Vault sidecar 存取 Vault 中的靜態和動態 Secret。

部署含有邊車容器的工作

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

控制台

  1. 前往 Google Cloud 控制台的「Cloud Run jobs」(Cloud Run 工作) 頁面:

    前往「Cloud Run jobs」(Cloud Run 工作)

  2. 如要部署至現有工作,請按一下「Jobs」(工作)。在工作清單中找到工作,然後按一下開啟。然後按一下「View and edit configuration」(查看及編輯設定),顯示編輯工作表單。

  3. 如要建立新工作,請按一下「Deploy container」(部署容器)。提供容器映像檔網址和工作名稱。

  4. 按一下「容器、網路、安全性」

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

  6. 按一下「Add container」(新增容器),然後設定要與主要工作容器一併新增的邊車容器。如果 sidecar 依附於服務中的其他容器,請在「Container start-up order」(容器啟動順序) 下拉式選單中指明。為要部署的每個邊車容器重複這個步驟。

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

gcloud

  1. 在 Google Cloud 控制台啟用 Cloud Shell。

    啟用 Cloud Shell

    Google Cloud 控制台底部會開啟 Cloud Shell 工作階段,並顯示指令列提示。Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已設定適用於您目前專案的值。工作階段可能要幾秒鐘的時間才能初始化。

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

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

    更改下列內容:

    • JOB:Cloud Run 工作名稱。
    • JOB_CONTAINER_NAME:主要工作容器的名稱。
    • IMAGE_URL:容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/job:latest。
    • SIDECAR_CONTAINER_NAME:邊車容器的名稱,例如 sidecar。
    • SIDECAR_IMAGE:邊車容器映像檔的參照。

    如要在 deploy 指令中設定每個容器,請在 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
  3. 等待工作部署作業完成。成功完成後,系統會顯示成功訊息。

YAML

  1. 如果您要建立新工作,請略過這個步驟。如要更新現有工作,請下載其 YAML 設定:

    gcloud run jobs describe JOB --format export > job.yaml
  2. 更新 containers: 屬性:

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

    更改下列內容:

    • JOB:Cloud Run 工作名稱。
    • IMAGE_URL:容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/job:latest。
    • SIDECAR_IMAGE:sidecar 容器映像檔的參照。
  3. 使用下列指令建立或更新工作:

    gcloud run jobs replace job.yaml

    gcloud run jobs replace 指令預設會使用 job.yaml 檔案 (如有)。

Terraform

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

在 Terraform 設定中,將下列內容新增至 google_cloud_run_v2_job 資源:
resource "google_cloud_run_v2_job" "default" {
  name     = "JOB"
  location = "europe-west1"

  template {
    template {
      containers {
        name = "CONTAINER_NAME"
        image = "IMAGE_URL"
      }
      containers {
        name = "SIDECAR_CONTAINER_NAME"
        image = "SIDECAR_IMAGE_URL"
      }
    }
  }
}

更改下列內容:

  • JOB: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 連線的已知問題。

後續步驟

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