建立工作

本頁說明如何從現有容器映像檔建立及更新 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 相關聯的 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 映像檔的公開映像檔最多會快取一小時。

如要使用其他公開或私人登錄檔 (例如 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 控制台、gcloud CLI、YAML、Terraform、用戶端程式庫或 REST API 建立新工作:

控制台

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

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

    前往 Cloud Run jobs

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

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

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

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

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

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

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

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

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

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

  10. 在「平行處理」下方,選取「盡可能同時執行多項工作」, 以便因工作存取的資源受到調度限制而設定下限, 或選取「限制同時執行的工作數量上限」, 並在「自訂平行處理工作數量上限」 欄位中指定同時執行的工作數量。

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

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

gcloud

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

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

  1. 執行下列指令:

    gcloud run jobs create JOB --image IMAGE_URL OPTIONS
    或者,使用部署指令:
    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,逾時時間上限為 1 小時。
      --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

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

更改下列內容:

  • 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 (雅加達) <0x0
  • asia-south2 (印度德里)
  • australia-southeast1 (雪梨) <0x0A
  • australia-southeast2 (墨爾本) <0x0
  • europe-central2 (波蘭華沙) 節能綠葉圖示 低二氧化碳2
  • europe-west10 (柏林) <0x0A
  • europe-west12 (杜林) 節能綠葉圖示 低二氧化碳排放2
  • europe-west2 (英國倫敦) 節能綠葉圖示 低二氧化碳排放2
  • europe-west3 (德國法蘭克福)
  • europe-west6 (瑞士蘇黎世) 節能綠葉圖示 低二氧化碳2
  • me-central1 (杜哈) <0x0A
  • me-central2 (達曼) <0x0A
  • northamerica-northeast1 (蒙特婁) 節能綠葉圖示 低二氧化碳排放2
  • northamerica-northeast2 (多倫多) 節能綠葉圖示 低二氧化碳排放
  • southamerica-east1 (巴西聖保羅) 節能綠葉圖示 低二氧化碳排放2
  • southamerica-west1 (智利聖地牙哥) 節能綠葉圖示 低二氧化碳排放2
  • us-west2 (洛杉磯)
  • us-west3 (鹽湖城)
  • us-west4 (拉斯維加斯) <0x

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

建立新工作時,Cloud Run 服務代理必須能夠存取容器,預設情況下即是如此。

更新現有工作

變更任何設定時,您都必須更新工作,即使容器映像檔沒有變更也一樣。請注意,任何未變更的設定都會繼續使用先前的設定。

您可以使用 Google Cloud 控制台、gcloud CLI、YAML、Terraform、用戶端程式庫或 REST API 更新現有工作:

控制台

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

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

    前往 Cloud Run jobs

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

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

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

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

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

    1. 在「工作逾時」欄位中,以秒為單位指定工作可執行的最長時間,最多 168 小時 (7 天)。如果工作使用 GPU,逾時時間上限為 1 小時。每項工作都必須在這個時間內完成。預設值為 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. 設定完畢後,請按一下「更新」,在 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 接受「2 秒」等時間長度。預設為 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

如要更新作業,請將 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

更改下列內容:

  • 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 的常見用途如下:

  • 使用 Prometheus 或 Opentelemetry 等收集器代理程式,從 Cloud Run 作業擷取自訂指標,並傳送至您選擇的指定後端。
  • 讓未內建 Hashicorp Vault 邏輯的應用程式,使用 Vault Sidecar 從 Vault 取得靜態和動態密碼。

部署含有邊車容器的工作

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

控制台

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

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

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

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

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

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

  6. 按一下「新增容器」,然後設定要與主要工作容器一併新增的邊車容器。如果 Sidecar 依附於服務中的另一個容器,請在「容器啟動順序」下拉式選單中指出這點。針對要部署的每個邊車容器,重複執行這個步驟。

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

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:對 Sidecar 容器映像檔的參照。

    如要在部署指令中設定每個容器,請在 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:邊車容器映像檔的參照。
  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 容器映像檔的參照。

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

如果部署作業有多個容器,且您有需要先啟動某些容器的依附元件,可以指定部署作業中的容器啟動順序。

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

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

限制

如果您的工作使用 Cloud Run 的內建功能連線至 Cloud SQL 執行個體,請參閱「內建 Cloud SQL 連線」一文中的已知問題。

後續步驟

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