本文档介绍了创建批量作业的基础知识:如何创建和运行基于脚本或容器映像的作业,以及如何使用预定义和自定义变量。如需详细了解如何创建和运行作业,请参阅作业创建和执行概览。
准备工作
- 如果您之前未使用过批处理功能,请参阅开始使用批处理,并完成适用于项目和用户的前提条件,以启用批处理功能。
-
如需获得创建作业所需的权限,请让您的管理员为您授予以下 IAM 角色:
-
项目的 Batch Job Editor (
roles/batch.jobsEditor
) -
作业的服务账号(默认是默认的 Compute Engine 服务账号)上的 Service Account User (
roles/iam.serviceAccountUser
)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
-
项目的 Batch Job Editor (
-
每次创建作业时,请确保作业具有有效的网络配置。
- 如果您对工作负载或项目没有任何具体的网络要求,并且未修改项目的默认网络,则无需执行任何操作。
- 否则,您需要在创建作业时配置网络。在创建基本作业之前,请先了解如何为作业配置网络,以便修改以下示例以满足您的网络要求。
-
每次创建作业时,请确保该作业具有有效的虚拟机操作系统 (OS) 环境。
- 如果您对工作负载或项目没有任何特定的虚拟机操作系统映像或启动磁盘要求,则无需执行任何操作。
- 否则,您需要准备有效的虚拟机操作系统环境选项。在创建基本作业之前,请允许虚拟机操作系统环境的默认配置,或者了解如何自定义虚拟机操作系统环境,以便修改以下示例以满足您的要求。
创建基本作业
如需了解您可以为作业指定的所有字段,请参阅 projects.locations.jobs
REST 资源的参考文档。总而言之,作业由一个或多个任务组成的数组组成,这些任务都运行一个或多个可运行对象,即作业的可执行脚本和/或容器。为介绍基础知识,本部分将介绍如何仅使用一个可运行对象(脚本或容器映像)创建示例作业:
这两种类型作业的示例作业都包含一个包含 4 个任务的任务组。每个任务都会将消息及其编号输出到标准输出和 Cloud Logging。此作业的定义指定了并行度为 2,这表示该作业应在 2 个虚拟机上运行,以允许同时运行 2 个任务。
创建基本容器作业
您可以选择或创建容器映像,以提供代码和依赖项,以便作业在任何计算环境中运行。如需了解详情,请参阅使用容器映像和在虚拟机实例上运行容器。
您可以使用 Google Cloud 控制台、gcloud CLI、Batch API、Go、Java、Node.js、Python 或 C++ 创建基本容器作业。
控制台
如需使用 Google Cloud 控制台创建基本容器作业,请执行以下操作:
在 Google Cloud 控制台中,前往 Job list(作业列表)页面。
点击
创建。系统随即会打开创建批处理作业页面。在左侧窗格中,选择作业详情页面。配置作业详情页面:
可选:在作业名称字段中,自定义作业名称。
例如,输入
example-basic-job
。配置任务详情部分:
在新建可运行作业窗口中,添加至少一个脚本或容器以便此作业运行。
例如,如需添加一个容器,请执行以下操作:
选择容器映像网址(默认)。
在容器映像网址字段中,输入您希望为此作业中的每个任务运行的容器映像的网址。
例如,如需使用
busybox
Docker 容器映像,请输入以下网址:gcr.io/google-containers/busybox
可选:如需替换容器映像的
ENTRYPOINT
命令,请在入口点字段中输入命令。例如,输入以下内容:
/bin/sh
可选:如需替换容器映像的
CMD
命令,请执行以下操作:选中替换容器映像的 CMD 命令复选框。系统随即会显示一个字段。
在该字段中,输入一个或多个命令,并用新行将各个命令分隔开来。
例如,输入以下命令:
-c echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks.
点击完成。
在任务数量字段中,输入此作业的任务数量。该值必须介于
1
和每个任务组的任务数上限之间的整数。例如,输入
4
。在并行度字段中,输入要并发运行的任务数量。该值不得大于任务总数,并且必须介于
1
和每个作业的并行任务数上限之间的整数。例如,输入
2
。
配置 Resource specifications 页面:
在左侧窗格中,点击资源规范。 系统随即会打开资源规范页面。
在虚拟机预配模型部分中,为此作业的虚拟机选择以下预配模型选项之一:
如果您的作业可以承受抢占,并且您希望使用折扣虚拟机,请选择 Spot。
否则,请选择标准。
例如,选择标准(默认值)。
选择此作业的位置:
在区域字段中,选择一个区域。
例如,选择
us-central1 (Iowa)
(默认)。在区域字段中,执行以下操作之一:
如果您想限制此作业仅在特定可用区运行,请选择一个可用区。
否则,请选择不限。
例如,选择任意(默认)。
选择以下某个机器系列:
对于常见工作负载,请点击通用。
对于需要高性能的工作负载,请点击计算优化。
对于内存密集型工作负载,请点击内存优化。
对于加速器优化型工作负载,请点击 GPU。如需了解详情,请参阅创建和运行使用 GPU 的作业。
例如,点击通用(默认)。
在系列字段中,为此作业的虚拟机选择一个机器系列。
例如,如果您为机器系列选择了通用,请选择 E2(默认)。
在机器类型字段中,为此作业的虚拟机选择机器类型。
例如,如果您为机器系列选择了 E2,请选择 e2-medium(2 个 vCPU、4 GB 内存)(默认)。
配置每项任务所需的虚拟机资源量:
在核心数字段中,输入每个任务的 vCPU 数量。
例如,输入
1
(默认值)。在内存字段中,输入每个任务的 RAM 用量(以 GB 为单位)。
例如,输入
0.5
(默认值)。
可选:如需查看作业配置,请在左侧窗格中点击预览。
点击创建。
作业详情页面会显示您创建的作业。
gcloud
如需使用 gcloud CLI 创建基本容器作业,请执行以下操作:
创建一个 JSON 文件,用于指定作业的配置详细信息。例如,如需创建基本容器作业,请创建一个包含以下内容的 JSON 文件。如需详细了解您可以为作业指定的所有字段,请参阅
projects.locations.jobs
REST 资源的参考文档。{ "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { CONTAINER } } ], "computeResource": { "cpuMilli": CORES, "memoryMib": MEMORY }, "maxRetryCount": MAX_RETRY_COUNT, "maxRunDuration": "MAX_RUN_DURATION" }, "taskCount": TASK_COUNT, "parallelism": PARALLELISM } ] }
替换以下内容:
CONTAINER
:每个任务运行的容器。容器至少必须在imageUri
子字段中指定图片,但可能还需要其他子字段。如需了解详情,请参阅此部分中的container
子字段和示例容器作业。CORES
:可选。为每项任务分配的核心数量(具体而言是 vCPU,通常表示物理核心的一半),以 milliCPU 为单位。如果未指定cpuMilli
字段,则值将设置为2000
(2 个 vCPU)。MEMORY
:可选。要为每个任务分配的内存量(以 MB 为单位)。如果未指定memoryMib
字段,则值将设置为2000
(2 GB)。MAX_RETRY_COUNT
:可选。任务的重试次数上限。该值必须是0
到10
之间的整数。如果未指定maxRetryCount
字段,则值会设置为0
,这表示不重试任务。如需详细了解maxRetryCount
字段,请参阅自动重试任务。MAX_RUN_DURATION
:可选。任务在重试或失败之前允许的运行时长上限,格式为以秒为单位的值后跟s
,例如3600s
表示 1 小时。如果未指定maxRunDuration
字段,则值将设置为作业的最长运行时间。如需详细了解maxRunDuration
字段,请参阅使用超时限制任务和可运行对象的运行时间。TASK_COUNT
:可选。作业的任务数量。该值必须介于1
和每个任务组的任务数上限之间的整数。如果未指定taskCount
字段,则值将设置为1
。PARALLELISM
:可选。作业并发运行的任务数。该值不得大于任务数,并且必须介于1
和每个作业的并行任务数上限之间的整数。如果未指定parallelism
字段,则值将设置为1
。
使用
gcloud batch jobs submit
命令创建作业。gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
替换以下内容:
JOB_NAME
:作业的名称。LOCATION
:作业的位置。JSON_CONFIGURATION_FILE
:包含作业配置详细信息的 JSON 文件的路径。
例如,若要创建使用 busybox
Docker 容器映像运行任务的作业,请执行以下操作:
在当前目录中创建一个名为
hello-world-container.json
的 JSON 文件,其中包含以下内容:{ "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { "imageUri": "gcr.io/google-containers/busybox", "entrypoint": "/bin/sh", "commands": [ "-c", "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks." ] } } ], "computeResource": { "cpuMilli": 2000, "memoryMib": 16 }, "maxRetryCount": 2, "maxRunDuration": "3600s" }, "taskCount": 4, "parallelism": 2 } ], "allocationPolicy": { "instances": [ { "policy": { "machineType": "e2-standard-4" } } ] }, "labels": { "department": "finance", "env": "testing" }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }
运行以下命令:
gcloud batch jobs submit example-container-job \ --location us-central1 \ --config hello-world-container.json
API
如需使用 Batch API 创建基本容器作业,请使用 jobs.create
方法。如需详细了解您可以为作业指定的所有字段,请参阅 projects.locations.jobs
REST 资源的参考文档。
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"container": {
CONTAINER
}
}
],
"computeResource": {
"cpuMilli": CORES,
"memoryMib": MEMORY
},
"maxRetryCount": MAX_RETRY_COUNT,
"maxRunDuration": "MAX_RUN_DURATION"
},
"taskCount": TASK_COUNT,
"parallelism": PARALLELISM
}
]
}
替换以下内容:
PROJECT_ID
:您的项目的项目 ID。LOCATION
:作业的位置。JOB_NAME
:作业的名称。CONTAINER
:每个任务运行的容器。容器至少必须在imageUri
子字段中指定图片,但可能还需要其他子字段。如需了解详情,请参阅此部分中的container
子字段和示例容器作业。CORES
:可选。为每项任务分配的核心数量(具体而言是 vCPU,通常表示物理核心的一半),以毫 CPU 为单位。如果未指定cpuMilli
字段,则将值设为2000
(2 个 vCPU)。MEMORY
:可选。要为每个任务分配的内存量(以 MB 为单位)。如果未指定memoryMib
字段,则值将设置为2000
(2 GB)。MAX_RETRY_COUNT
:可选。任务的重试次数上限。该值必须是0
到10
之间的整数。如果未指定maxRetryCount
字段,则值会设置为0
,这表示不重试任务。如需详细了解maxRetryCount
字段,请参阅自动重试任务。MAX_RUN_DURATION
:可选。任务在重试或失败之前允许的运行时长上限,格式为以秒为单位的值后跟s
,例如3600s
表示 1 小时。如果未指定maxRunDuration
字段,则值将设置为作业的最长运行时间。如需详细了解maxRunDuration
字段,请参阅使用超时限制任务和可运行对象的运行时间。TASK_COUNT
:可选。作业的任务数量,必须是介于1
和每个任务组的任务数上限之间的整数。如果未指定taskCount
字段,则值将设置为1
。PARALLELISM
:可选。作业并发运行的任务数。该值不得大于任务数,并且必须介于1
和每个作业的并行任务数上限之间的整数。如果未指定parallelism
字段,则值将设置为1
。
例如,如需创建使用 busybox
Docker 容器映像运行任务的作业,请使用以下请求:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/jobs?job_id=example-container-job
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"container": {
"imageUri": "gcr.io/google-containers/busybox",
"entrypoint": "/bin/sh",
"commands": [
"-c",
"echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
]
}
}
],
"computeResource": {
"cpuMilli": 2000,
"memoryMib": 16
},
"maxRetryCount": 2,
"maxRunDuration": "3600s"
},
"taskCount": 4,
"parallelism": 2
}
],
"allocationPolicy": {
"instances": [
{
"policy": { "machineType": "e2-standard-4" }
}
]
},
"labels": {
"department": "finance",
"env": "testing"
},
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
其中,PROJECT_ID
是项目的 project ID。
Go
Go
如需了解详情,请参阅 批处理 Go API 参考文档。
如需向 Batch 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
Java
如需了解详情,请参阅 批处理 Java API 参考文档。
如需向 Batch 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
Node.js
如需了解详情,请参阅 批处理 Node.js API 参考文档。
如需向 Batch 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
Python
如需了解详情,请参阅 批处理 Python API 参考文档。
如需向 Batch 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
C++
C++
如需了解详情,请参阅 批处理 C++ API 参考文档。
如需向 Batch 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
创建基本脚本作业
您可以使用 Google Cloud 控制台、gcloud CLI、Batch API、Go、Java、Node.js、Python 或 C++ 创建基本脚本作业。
控制台
如需使用 Google Cloud 控制台创建基本脚本作业,请执行以下操作:
在 Google Cloud 控制台中,前往 Job list(作业列表)页面。
点击
创建。系统随即会打开创建批处理作业页面。在左侧窗格中,选择作业详情页面。配置作业详情页面:
可选:在作业名称字段中,自定义作业名称。
例如,输入
example-basic-job
。配置任务详情部分:
在新建可运行作业窗口中,添加至少一个脚本或容器以便此作业运行。
例如,如需添加一个脚本,请执行以下操作:
选择脚本。系统随即会显示一个字段。
在此字段中,输入您要针对此作业中的每个任务运行的脚本。
例如,输入以下脚本:
echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks.
点击完成。
在任务数字段中,输入此作业的任务数量。该值必须介于
1
和每个任务组的任务数上限之间的整数。例如,输入
4
。在并行度字段中,输入要并发运行的任务数量。该值不得大于任务总数,并且必须介于
1
和每个作业的并行任务数上限之间的整数。例如,输入
2
。
配置 Resource specifications 页面:
在左侧窗格中,点击资源规范。 系统随即会打开资源规范页面。
在虚拟机预配模型部分中,为此作业的虚拟机选择以下预配模型选项之一:
如果您的作业可以承受抢占,并且您希望使用折扣虚拟机,请选择 Spot。
否则,请选择标准。
例如,选择标准(默认值)。
选择此作业的位置:
在区域字段中,选择一个区域。
例如,选择
us-central1 (Iowa)
(默认)。在区域字段中,执行以下操作之一:
如果您想将此作业限制为仅在特定可用区运行,请选择一个可用区。
否则,请选择不限。
例如,选择任意(默认)。
选择以下某个机器系列:
对于常见工作负载,请点击通用。
对于需要高性能的工作负载,请点击计算优化。
对于内存密集型工作负载,请点击内存优化。
对于加速器优化型工作负载,请点击 GPU。如需了解详情,请参阅创建和运行使用 GPU 的作业。
例如,点击通用(默认)。
在系列字段中,为此作业的虚拟机选择一个机器系列。
例如,如果您为机器系列选择了通用,请选择 E2(默认)。
在机器类型字段中,为此作业的虚拟机选择机器类型。
例如,如果您为机器系列选择了 E2,请选择 e2-medium(2 个 vCPU、4 GB 内存)(默认)。
配置每项任务所需的虚拟机资源量:
在核心数字段中,输入每个任务的 vCPU 数量。
例如,输入
1
(默认值)。在内存字段中,输入每个任务的 RAM 用量(以 GB 为单位)。
例如,输入
0.5
(默认值)。
可选:如需查看作业配置,请在左侧窗格中点击预览。
点击创建。
作业详情页面会显示您创建的作业。
gcloud
如需使用 gcloud CLI 创建基本脚本作业,请执行以下操作:
创建一个 JSON 文件,用于指定作业的配置详细信息。例如,如需创建基本脚本作业,请创建一个包含以下内容的 JSON 文件。如需详细了解您可以为作业指定的所有字段,请参阅
projects.locations.jobs
REST 资源的参考文档。{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { SCRIPT } } ], "computeResource": { "cpuMilli": CORES, "memoryMib": MEMORY }, "maxRetryCount": MAX_RETRY_COUNT, "maxRunDuration": "MAX_RUN_DURATION" }, "taskCount": TASK_COUNT, "parallelism": PARALLELISM } ] }
替换以下内容:
SCRIPT
:每个任务运行的脚本。脚本必须使用text
子字段定义为文本,或者使用path
子字段定义为可访问文件的路径。如需了解详情,请参阅本部分中的script
子字段和示例脚本作业。CORES
:可选。为每项任务分配的核心数量(具体而言是 vCPU,通常表示物理核心的一半),以 milliCPU 为单位。如果未指定cpuMilli
字段,则值将设置为2000
(2 个 vCPU)。MEMORY
:可选。要为每个任务分配的内存量(以 MB 为单位)。如果未指定memoryMib
字段,则值将设置为2000
(2 GB)。MAX_RETRY_COUNT
:可选。任务的重试次数上限。该值必须是0
到10
之间的整数。如果未指定maxRetryCount
字段,则值会设置为0
,这表示不重试任务。如需详细了解maxRetryCount
字段,请参阅自动重试任务。MAX_RUN_DURATION
:可选。任务在重试或失败之前允许的运行时长上限,格式为以秒为单位的值后跟s
,例如3600s
表示 1 小时。如果未指定maxRunDuration
字段,则值将设置为作业的最长运行时间。如需详细了解maxRunDuration
字段,请参阅使用超时限制任务和可运行对象的运行时间。TASK_COUNT
:可选。作业的任务数量。该值必须介于1
和每个任务组的任务数上限之间的整数。如果未指定taskCount
字段,则值将设置为1
。PARALLELISM
:可选。作业并发运行的任务数。该值不得大于任务数,并且必须介于1
和每个作业的并行任务数上限之间的整数。如果未指定parallelism
字段,则值将设置为1
。
使用
gcloud batch jobs submit
命令创建作业。gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
替换以下内容:
JOB_NAME
:作业的名称。LOCATION
:作业的位置。JSON_CONFIGURATION_FILE
:包含作业配置详细信息的 JSON 文件的路径。
例如,如需创建使用脚本运行任务的作业,请执行以下操作:
在当前目录中创建一个名为
hello-world-script.json
的 JSON 文件,其中包含以下内容:{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks." } } ], "computeResource": { "cpuMilli": 2000, "memoryMib": 16 }, "maxRetryCount": 2, "maxRunDuration": "3600s" }, "taskCount": 4, "parallelism": 2 } ], "allocationPolicy": { "instances": [ { "policy": { "machineType": "e2-standard-4" } } ] }, "labels": { "department": "finance", "env": "testing" }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }
运行以下命令:
gcloud batch jobs submit example-script-job \ --location us-central1 \ --config hello-world-script.json
API
如需使用 Batch API 创建基本脚本作业,请使用 jobs.create
方法。如需详细了解您可以为作业指定的所有字段,请参阅 projects.locations.jobs
REST 资源的参考文档。
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
SCRIPT
}
}
],
"computeResource": {
"cpuMilli": CORES,
"memoryMib": MEMORY
},
"maxRetryCount": MAX_RETRY_COUNT,
"maxRunDuration": "MAX_RUN_DURATION"
},
"taskCount": TASK_COUNT,
"parallelism": PARALLELISM
}
]
}
替换以下内容:
PROJECT_ID
:您的项目的项目 ID。LOCATION
:作业的位置。JOB_NAME
:作业的名称。SCRIPT
:每个任务运行的脚本。脚本必须使用text
子字段定义为文本,或者使用path
子字段定义为可访问文件的路径。如需了解详情,请参阅本部分中的script
子字段和示例脚本作业。CORES
:可选。为每项任务分配的核心数量(具体而言是 vCPU,通常表示物理核心的一半),以毫 CPU 为单位。如果未指定cpuMilli
字段,则将值设为2000
(2 个 vCPU)。MEMORY
:可选。要为每个任务分配的内存量(以 MB 为单位)。如果未指定memoryMib
字段,则值将设置为2000
(2 GB)。MAX_RETRY_COUNT
:可选。任务的重试次数上限。该值必须是0
到10
之间的整数。如果未指定maxRetryCount
字段,则值会设置为0
,这表示不重试任务。如需详细了解maxRetryCount
字段,请参阅自动重试任务。MAX_RUN_DURATION
:可选。任务在重试或失败之前允许的运行时长上限,格式为以秒为单位的值后跟s
,例如3600s
表示 1 小时。如果未指定maxRunDuration
字段,则值将设置为作业的最长运行时间。如需详细了解maxRunDuration
字段,请参阅使用超时限制任务和可运行对象的运行时间。TASK_COUNT
:可选。作业的任务数量。该值必须介于1
和每个任务组的任务数上限之间的整数。如果未指定taskCount
字段,则值将设置为1
。PARALLELISM
:可选。作业并发运行的任务数。该值不得大于任务数,并且必须介于1
和每个作业的并行任务数上限之间的整数。如果未指定parallelism
字段,则值将设置为1
。
例如,如需创建使用脚本运行任务的作业,请使用以下请求:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/jobs?job_id=example-script-job
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
}
}
],
"computeResource": {
"cpuMilli": 2000,
"memoryMib": 16
},
"maxRetryCount": 2,
"maxRunDuration": "3600s"
},
"taskCount": 4,
"parallelism": 2
}
],
"allocationPolicy": {
"instances": [
{
"policy": { "machineType": "e2-standard-4" }
}
]
},
"labels": {
"department": "finance",
"env": "testing"
},
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
其中,PROJECT_ID
是项目的 project ID。
Go
Go
如需了解详情,请参阅 批处理 Go API 参考文档。
如需向 Batch 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
Java
如需了解详情,请参阅 批处理 Java API 参考文档。
如需向 Batch 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
Node.js
如需了解详情,请参阅 批处理 Node.js API 参考文档。
如需向 Batch 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
Python
如需了解详情,请参阅 批处理 Python API 参考文档。
如需向 Batch 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
C++
C++
如需了解详情,请参阅 批处理 C++ API 参考文档。
如需向 Batch 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
使用环境变量
编写要让作业运行的容器映像或脚本时,请使用环境变量。您可以使用为所有批处理作业预定义的任何环境变量,以及您在创建作业时定义的任何自定义环境变量。
使用预定义的环境变量
默认情况下,作业中的可运行作业可以使用以下预定义环境变量:
BATCH_TASK_COUNT
:此任务组中的任务总数。BATCH_TASK_INDEX
:此任务在任务组中的索引编号。第一个任务的索引为0
,每个额外的任务的索引都会递增。BATCH_HOSTS_FILE
:列出此任务组中所有正在运行的虚拟机实例的文件的路径。如需使用此环境变量,必须将requireHostsFile
字段设置为true
。BATCH_TASK_RETRY_ATTEMPT
:此任务已经尝试的次数。在任务的第一次尝试期间,此值为0
,并会在每次后续重试时递增。允许对任务执行的重试总次数由maxRetryCount
字段的值决定,如果未定义,则为0
。如需详细了解重试,请参阅自动执行任务重试。
如需查看有关如何使用预定义环境变量的示例,请参阅本文档中创建基本作业部分之前的示例可运行作业。
定义和使用自定义环境变量
您可以选择在作业中定义一个或多个自定义环境变量。
您可以根据数据的预期范围,在特定环境中定义每个变量:
对于所有任务具有相同值的变量,请使用以下任一方法:
如果该变量对所有可运行项具有相同的值,请使用所有可运行项的环境(
taskSpec
的environment
子字段)。否则,如果该变量针对所有可运行项具有单独的值,请使用一个或多个特定可运行项的环境(
runnables[]
的environment
子字段)。
否则,对于数组变量(每个任务都有单独的值),请使用所有任务的环境 (
taskEnvironment
)。
在所选环境中,您可以使用以下环境子字段之一来定义每个变量的名称和值:
如需在作业配置 JSON 文件中直接定义变量,请使用标准变量 (
variables
) 子字段,如本部分所示。对于您不想加密的数据,建议使用此选项。如需使用加密数据定义变量,您可以使用 Secret Manager 或 Cloud Key Management Service:
如需使用现有 Secret Manager Secret 的加密内容,请使用Secret 变量 (
secretVariables
) 子字段。如需详细了解如何在作业中使用 Secret,请参阅使用 Secret Manager 保护敏感数据。如需使用现有 Cloud Key Management Service 密钥的加密内容,请使用加密变量 (
encryptedVariables
) 子字段。如需详细了解 Cloud KMS 密钥,请参阅 Cloud Key Management Service 文档。
您可以使用 gcloud CLI 或 Batch API 为作业定义和使用自定义环境变量。以下示例介绍了如何创建两个作业来定义和使用标准变量。第一个示例作业有一个特定可运行项的变量。第二个示例作业包含一个数组变量,每个任务对应的值都不同。
gcloud
如果您想定义一个作业,以将环境变量传递给每个任务运行的可运行程序,请参阅有关如何为可运行程序定义和使用环境变量的示例。否则,如果您想定义一个作业,以便根据任务索引将环境变量列表传递给不同的任务,请参阅有关如何为每个任务定义和使用环境变量的示例。
为可运行文件定义并使用环境变量
如需创建使用 gcloud CLI 将环境变量传递给可运行文件的作业,请使用 gcloud batch jobs submit
命令,并在作业的配置文件中指定环境变量。
例如,如需创建一个脚本作业来定义环境变量并将其传递给 3 个任务的脚本,请发出以下请求:
在当前目录中创建一个名为
hello-world-environment-variables.json
的 JSON 文件,其中包含以下内容:{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello ${VARIABLE_NAME}! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks." }, "environment": { "variables": { "VARIABLE_NAME": "VARIABLE_VALUE" } } } ], "computeResource": { "cpuMilli": 2000, "memoryMib": 16 } }, "taskCount": 3, "parallelism": 1 } ], "allocationPolicy": { "instances": [ { "policy": { "machineType": "e2-standard-4" } } ] } }
替换以下内容:
运行以下命令:
gcloud batch jobs submit example-environment-variables-job \ --location us-central1 \ --config hello-world-environment-variables.json
为每个任务定义并使用环境变量
如需使用 gcloud CLI 创建一个作业,以便根据任务编号将环境变量传递给任务,请使用 gcloud batch jobs submit
命令,并在作业的配置文件中指定 taskEnvironments
数组字段。
例如,若要创建一个作业,其中包含一个包含 3 个环境变量的数组,这些环境变量具有匹配的名称和不同的值,并将这些环境变量传递给任务的脚本(其索引与数组中环境变量的索引匹配),请执行以下操作:
在当前目录中创建一个名为
hello-world-task-environment-variables.json
的 JSON 文件,其中包含以下内容:{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello ${TASK_VARIABLE_NAME}! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks." }, } ], "computeResource": { "cpuMilli": 2000, "memoryMib": 16 } }, "taskCount": 3, "taskEnvironments": [ { "variables": { "TASK_VARIABLE_NAME": "TASK_VARIABLE_VALUE_0" } }, { "variables": { "TASK_VARIABLE_NAME": "TASK_VARIABLE_VALUE_1" } }, { "variables": { "TASK_VARIABLE_NAME": "TASK_VARIABLE_VALUE_2" } } ] } ], "allocationPolicy": { "instances": [ { "policy": { "machineType": "e2-standard-4" } } ] } }
替换以下内容:
运行以下命令:
gcloud batch jobs submit example-task-environment-variables-job \ --location us-central1 \ --config hello-world-task-environment-variables.json
API
如果您想定义一个作业,以将环境变量传递给每个任务运行的可运行程序,请参阅有关如何为可运行程序定义和使用环境变量的示例。否则,如果您想定义一个作业,以便根据任务索引将环境变量列表传递给不同的任务,请参阅有关如何为每个任务定义和使用环境变量的示例。
为可运行文件定义并使用环境变量
如需创建使用批处理 API 将环境变量传递给可运行程序的作业,请使用 gcloud batch jobs submit
命令,并在 environment
字段中指定环境变量。
例如,如需创建包含环境变量并将其传递给 3 个任务的脚本的作业,请发出以下请求:
POST https://batch.googleapis.com/v1/projects/<var>PROJECT_ID</var>/locations/us-central1/jobs?job_id=example-environment-variables-job
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello ${VARIABLE_NAME}! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
},
"environment": {
"variables": {
"VARIABLE_NAME": "VARIABLE_VALUE"
}
}
}
],
"computeResource": {
"cpuMilli": 2000,
"memoryMib": 16
}
},
"taskCount": 3,
"parallelism": 1
}
],
"allocationPolicy": {
"instances": [
{
"policy": {
"machineType": "e2-standard-4"
}
}
]
}
}
替换以下内容:
PROJECT_ID
:您的项目的项目 ID。VARIABLE_NAME
:传递给每个任务的环境变量的名称。按照惯例,环境变量名称应采用大写形式。VARIABLE_VALUE
:传递给每个任务的环境变量的值。
为每个任务定义并使用环境变量
如需创建一个作业,以便使用 Batch API 根据任务编号将环境变量传递给任务,请使用 jobs.create
方法,并在 taskEnvironments
数组字段中指定环境变量。
例如,若要创建一个作业,其中包含一个包含 3 个环境变量的数组,这些环境变量具有匹配的名称和不同的值,并根据索引将环境变量传递给 3 个任务的脚本,请发出以下请求:
POST https://batch.googleapis.com/v1/projects/<var>PROJECT_ID</var>/locations/us-central1/jobs?job_id=example-task-environment-variables-job
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello ${TASK_VARIABLE_NAME}! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
},
}
],
"computeResource": {
"cpuMilli": 2000,
"memoryMib": 16
}
},
"taskCount": 3,
"taskEnvironments": [
{
"variables": {
"TASK_VARIABLE_NAME": "TASK_VARIABLE_VALUE_0"
}
},
{
"variables": {
"TASK_VARIABLE_NAME": "TASK_VARIABLE_VALUE_1"
}
},
{
"variables": {
"TASK_VARIABLE_NAME": "TASK_VARIABLE_VALUE_2"
}
}
]
}
],
"allocationPolicy": {
"instances": [
{
"policy": { "machineType": "e2-standard-4" }
}
]
}
}
替换以下内容: