本页面介绍如何通过现有容器映像创建和更新现有 Cloud Run 作业。与监听和处理请求的 Cloud Run 服务不同,Cloud Run 作业仅会运行其任务并在完成后退出。作业不会监听或处理请求。
创建或更新作业后,您可以执行以下操作:
- 作为一次性作业、按计划或作为工作流的一部分执行作业。
- 您可以在执行作业时替换针对作业配置的参数。
- 您可以管理各项作业执行并查看执行日志。
您可以将作业构建为单个任务或多个可并行执行的独立任务(最多 10000 个任务)。每个任务都运行一个容器实例,并且可以配置为在发生故障时重试。每个任务都知道其存储在 CLOUD_RUN_TASK_INDEX
环境变量中的索引。任务的总数存储在 CLOUD_RUN_TASK_COUNT
环境变量中。如果您并行处理数据,则代码负责确定哪个任务处理数据的子集。
您可以设置任务的超时,并指定在任务失败的情况下的重试次数。如果任何任务超过其重试次数上限,则该任务将被标记为失败,并且作业执行也会在所有任务都运行后被标记为失败。
默认情况下,每个任务最长运行 10 分钟:您可以将其更改为更短或更长(最长 24 小时)的时间。为此,您可以更改任务超时设置。
作业执行没有显式超时限制:所有任务都完成后,作业执行结束。
作业使用第二代执行环境。
所需的角色
如需获得创建 Cloud Run 作业所需的权限,请让管理员向您授予以下 IAM 角色:
-
Cloud Run 作业的 Cloud Run Developer (
roles/run.developer
) 角色 -
服务身份的 Service Account User (
roles/iam.serviceAccountUser
) 角色
如需查看与 Cloud Run 关联的 IAM 角色和权限的列表,请参阅 Cloud Run IAM 角色和 Cloud Run IAM 权限。如果您的 Cloud Run 作业与 Google Cloud API(例如 Cloud 客户端库)进行交互,请参阅服务身份配置指南。如需详细了解如何授予角色,请参阅部署权限和管理访问权限。
支持的容器存储库和映像
您可以直接使用已存储在 Artifact Registry 或 Docker Hub 中的容器映像。Google 建议使用 Artifact Registry。
您可以通过设置 Artifact Registry 远程代码库,使用其他公共或私有注册表(如 JFrog Artifactory、Nexus 或 GitHub Container Registry)中的容器映像。
您应仅考虑使用 Docker Hub 部署常用的容器映像,例如 Docker 官方映像或 Docker 赞助的 OSS 映像。为了获得更高的可用性,Google 建议您通过 Artifact Registry 远程代码库部署这些 Docker Hub 映像。
创建新作业
您可以使用 Google Cloud 控制台、Google Cloud CLI、YAML 或 Terraform 创建新作业。
控制台
如需创建新作业,请执行以下操作:
在 Google Cloud 控制台中,前往 Cloud Run 页面:
点击部署容器,然后选择作业以显示创建作业表单。
点击容器、卷、网络、安全性以设置其他作业属性。
- 在“任务容量”下,执行以下操作:
- 在内存菜单中,指定所需的内存量。默认值为所需的最小值,即 512 MiB。
- 在 CPU 菜单中,指定所需的 CPU 数量。默认值为所需的最小值,即 1 个 CPU。
在“任务超时”下,指定任务可运行的时长上限(以秒为单位),最长为 24 小时。 每个任务都必须在此时间段内完成。默认值为 10 分钟(600 秒)。
在每个失败任务的重试次数下,指定任务失败时的重试次数。默认值为 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;最大值为 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 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
您需要进行如下替换
- 将 JOB 替换为 Cloud Run 作业的名称。 作业名称不得超过 49 个字符,并且在每个区域和项目中必须是唯一的。
- 将 IMAGE 替换为作业容器映像的网址。
您还可以指定更多配置,例如环境变量或内存限制。
使用以下命令部署新作业:
gcloud run jobs replace job.yaml
Terraform
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
如需创建新的 Cloud Run 作业,请使用 google_cloud_run_v2_job
资源并修改 main.tf
文件,如以下代码段所示。
客户端库
通过以下代码创建作业:
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
(大阪)europe-north1
(芬兰) 二氧化碳排放量低europe-southwest1
(马德里) 二氧化碳排放量低europe-west1
(比利时) 二氧化碳排放量低europe-west4
(荷兰) 二氧化碳排放量低europe-west8
(米兰)europe-west9
(巴黎) 二氧化碳排放量低me-west1
(特拉维夫)us-central1
(爱荷华) 二氧化碳排放量低us-east1
(南卡罗来纳)us-east4
(北弗吉尼亚)us-east5
(哥伦布)us-south1
(达拉斯) 二氧化碳排放量低us-west1
(俄勒冈) 二氧化碳排放量低
基于层级 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 更新现有作业。
控制台
如需更新现有作业,请执行以下操作:
在 Google Cloud 控制台中,前往 Cloud Run 页面:
点击作业标签页以显示作业列表。
点击该作业以显示作业详情页面。
点击修改。
如果更改了作业代码,请指定新的容器映像摘要。
(可选)根据需要更改作业中的任务数量。
酌情点击容器、卷、网络、安全性以更新任何其他作业属性:
- 在“任务容量”下,执行以下操作:
- 在内存菜单中,指定所需的内存量。默认值为所需的最小值,即 512 MiB。
- 在 CPU 菜单中,指定所需的 CPU 数量。默认值为所需的最小值,即 1 个 CPU。
- 在“任务超时”下,指定任务可运行的时长上限(以秒为单位),最长为 24 小时。每个任务都必须在此时间段内完成。默认值为 10 分钟(600 秒)。
- 在每个失败任务的重试次数下,指定任务失败时的重试次数。默认值为 3 次重试。
在“并行”下:
- 在大多数情况下,您可以选择尽可能多地运行并发任务。
- 如果您因作业访问的资源存在扩缩限制而需要设置更小的限值,请选择限制并发任务的数量,然后在自定义并行限制字段中指定并发任务数上限。
(可选)在相应的标签页中配置其他设置:
配置完作业后,点击保存以在 Cloud Run 中创建作业,然后等待作业创建完成。
gcloud
-
In the Google Cloud console, 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.
运行以下命令:
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 命令行文档。
- 将
等待更新作业的操作完成。成功完成后,系统会显示一条成功消息,如下所示:
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
如需更新作业,请向 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。
示例代码
如需查看展示简单作业的代码示例,请参阅特定于语言的快速入门。
后续步骤
创建或更新作业后,您可以执行以下操作: