创建作业

本页面介绍如何通过现有容器映像创建和更新现有 Cloud Run 作业。与监听和处理请求的 Cloud Run 服务不同,Cloud Run 作业仅会运行其任务并在完成后退出。作业不会监听或处理请求。

创建或更新作业后,您可以执行以下操作:

您可以将作业构建为单个任务或多个可并行执行的独立任务(最多 10000 个任务)。每个任务都运行一个容器实例,并且可以配置为在发生故障时重试。每个任务都知道其存储在 CLOUD_RUN_TASK_INDEX 环境变量中的索引。任务的总数存储在 CLOUD_RUN_TASK_COUNT 环境变量中。如果您并行处理数据,则代码负责确定哪个任务处理数据的子集。

您可以设置任务的超时,并指定在任务失败的情况下的重试次数。如果任何任务超过其重试次数上限,则该任务将被标记为失败,并且作业执行也会在所有任务都运行后被标记为失败

默认情况下,每个任务最长运行 10 分钟:您可以将其更改为更短或更长(最长 24 小时)的时间。为此,您可以更改任务超时设置

作业执行没有显式超时限制:所有任务都完成后,作业执行结束。

作业使用第二代执行环境

创建和执行所需的 IAM 权限

如需使用 Cloud Run 作业,您需要具有以下角色之一:

  • Cloud Run Admin,拥有创建/更新/删除和运行作业的完整权限
  • Cloud Run Invoker,可运行作业
  • Cloud Run Viewer,可查看和列出作业

如果要配置自定义角色,请使用以下权限:

  • run.jobs.{create/update/run/delete/get/list/getIamPolicy/setIamPolicy}
  • run.executions.{get/list/delete}
  • run.tasks.{get/list}

run.jobs.run 允许用户运行作业,从而启动新的执行。没有单独的 run.executions.create 权限:创建执行的唯一方法是运行作业。

支持的容器存储库和映像

您可以使用已存储在 Artifact RegistryContainer Registry已弃用)或 Docker Hub 中的容器映像。Google 建议使用 Artifact Registry。

您只能使用以下类型的容器映像:

您应仅考虑使用 Docker Hub 部署常用的容器映像,例如 Docker 官方映像Docker 赞助的 OSS 映像。为了获得更高的可用性,Google 建议您通过 Artifact Registry 远程制品库部署这些 Docker Hub 映像。

如果您将容器映像存储在其他类型的 Container Registry 中,请按照从不支持的注册表部署映像中的说明进行操作。

创建新作业

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

控制台

如需创建新作业,请执行以下操作:

  1. 转到 Cloud Run

  2. 点击作业标签页。

  3. 点击创建作业,以显示“创建作业”表单。

    1. 在该表单中,指定包含作业代码的容器映像,或从之前部署的容器列表中选择容器映像。
    2. 作业名称是系统根据容器映像自动生成的。您可以根据需要修改或更改作业名称。创建作业后,便无法再更改作业名称。
    3. 选择作业所在的区域。区域选择器会突出显示碳影响最低的区域。
    4. 指定要在作业中运行的任务的数量。所有任务都必须成功完成,这样作业才能成功完成。默认情况下,这些任务是并行执行的。
  4. 点击容器、卷、网络、安全性以设置其他作业属性。

    • 在“任务容量”下,执行以下操作:
    1. 在“内存”下拉菜单中,指定所需的内存量。默认值为所需的最小值,即 512 MiB。
    2. 在 CPU 下拉菜单中,指定所需的 CPU 数量。默认值为所需的最小值,即 1 个 CPU。
    3. 在“任务超时”下,指定任务可运行的时长上限(以秒为单位),最长为 24 小时。 每个任务都必须在此时间段内完成。默认值为 10 分钟(600 秒)。

    4. 每个失败任务的重试次数下,指定任务失败时的重试次数。默认值为 3 次重试。

    • 在“并行”下:

      1. 在大多数情况下,您可以选择尽可能多地运行并发任务
      2. 如果您因作业访问的资源存在扩缩限制而需要设置更小的限值,请选择限制并发任务数上限,然后在自定义并行限制文本框中指定并发任务的数量。
  5. (可选)在相应的标签页中配置其他设置:

  6. 配置完作业后,点击创建以在 Cloud Run 中创建作业。

  7. 如需执行作业,请参阅执行作业按计划执行作业

命令行

如需使用命令行,您需要先设置 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;最大值为 10000。每个任务都提供环境变量 CLOUD_RUN_TASK_INDEX(其值介于 0 到任务数减去 1 之间)和 CLOUD_RUN_TASK_COUNT(即任务数)
      --max-retries 失败任务的重试次数。如果有任何任务的失败次数超过此限制,则整个作业会被标记为失败。例如,如果设置为 1,系统将重试失败的任务一次,即总共尝试两次。默认值为 3。接受 0 到 10 的整数。
      --task-timeout 接受类似于“2s”的时长。默认值为 10 分钟;最长为 24 小时。
      --parallelism 可以并行执行的任务的数量上限。默认情况下,任务会尽快并行启动。如需了解值范围,请参阅并行性
      --execute-now 如果设置了此标志,则在创建作业后立即启动作业执行。等同于依次调用 gcloud run jobs creategcloud 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 命令

如需创建新的 Cloud Run 作业,请使用 google_cloud_run_v2_job 资源并修改 main.tf 文件,如以下代码段所示。

resource "google_cloud_run_v2_job" "default" {
  provider     = google-beta
  name         = "cloud-run-job"
  location     = "us-central1"
  launch_stage = "BETA"

  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_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 价格

  • africa-south1(约翰内斯堡)
  • asia-east2(香港)
  • asia-northeast3(韩国首尔)
  • asia-southeast1(新加坡)
  • asia-southeast2 (雅加达)
  • asia-south1(印度孟买)
  • 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 更新现有作业。

控制台

如需更新现有作业,请执行以下操作:

  1. 转到 Cloud Run

  2. 点击作业标签页以显示作业列表。

  3. 点击所需的作业,以显示作业详情页面。

  4. 点击修改

  5. 如果更改了作业代码,请指定新的容器映像摘要

  6. (可选)根据需要更改作业中的任务数量。

  7. (可选)点击容器、卷、网络、安全性以根据需要更新任何其他作业属性:

    • 在“任务容量”下,执行以下操作:
    1. 在“内存”下拉菜单中,指定所需的内存量。默认值为所需的最小值,即 512 MiB。
    2. 在 CPU 下拉菜单中,指定所需的 CPU 数量。默认值为所需的最小值,即 1 个 CPU。
    3. 在“任务超时”下,指定任务可运行的时长上限(以秒为单位),最长为 24 小时。每个任务都必须在此时间段内完成。默认值为 10 分钟(600 秒)。
    4. 每个失败任务的重试次数下,指定任务失败时的重试次数。默认值为 3 次重试。
    • 在“并行”下:

      1. 在大多数情况下,您可以选择尽可能多地运行并发任务
      2. 如果您因作业访问的资源存在扩缩限制而需要设置更小的限值,请选择限制并发任务的数量,然后在自定义并行限制文本框中指定并发任务数上限。
  8. (可选)在相应的标签页中配置其他设置:

  9. 配置完作业后,点击保存以在 Cloud Run 中创建作业,然后等待作业创建完成。

  10. 如需执行作业,请参阅执行作业按计划执行作业

命令行

  1. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  2. 运行以下命令:

    gcloud run jobs update JOB_NAME

    替换

    • JOB_NAME 替换为您要更新的作业的名称。
    • (可选)将 OPTIONS 替换为以下选项:

      选项 说明
      --tasks 接受不小于 1 的整数。默认为 1;最大值为 10000。每个任务都提供环境变量 CLOUD_RUN_TASK_INDEX(其值介于 0 到任务数减去 1 之间)和 CLOUD_RUN_TASK_COUNT(即任务数)
      --max-retries 失败任务的重试次数。如果有任何任务的失败次数超过此限制,则整个作业会被标记为失败。例如,如果设置为 1,系统将重试失败的任务一次,即总共尝试两次。默认值为 3。 接受 0 到 10 的整数。
      --task-timeout 接受类似于“2s”的时长。默认值为 10 分钟;最长为 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

如需更新作业,请向 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_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。

示例代码

如需查看显示简单作业的代码示例,请参阅特定语言的快速入门

后续步骤

创建或更新作业后,您可以执行以下操作: