本文档介绍了创建批量作业的基础知识:如何创建和运行基于脚本或容器映像的作业,以及如何使用预定义变量和自定义变量。 如需详细了解如何创建和运行作业,请参阅作业创建和执行概览。
准备工作
- 如果您之前未使用过 Batch,请查看 Batch 使用入门,并通过完成项目和用户的前提条件来启用 Batch。
-
如需获取创建作业所需的权限,请让管理员授予您以下 IAM 角色:
-
项目的 Batch Job Editor (
roles/batch.jobsEditor
) -
作业的服务帐号上的 Service Account User (
roles/iam.serviceAccountUser
),默认为默认 Compute Engine 服务帐号
如需详细了解如何授予角色,请参阅管理访问权限。
-
项目的 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 控制台中,前往作业列表页面。
点击
创建。此时将打开创建批量作业页面。在左侧窗格中,作业详情页面处于选中状态。配置作业详情页面:
可选:在作业名称字段中,自定义作业名称。
例如,输入
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
。
配置资源规范页面:
在左侧窗格中,点击资源规范。 系统随即会打开资源规范页面。
在虚拟机预配模型部分中,为此作业的虚拟机选择预配模型,选择以下选项之一:
如果您的作业可以承受抢占,并且您需要折扣虚拟机,请选择 Spot。
否则,请选择标准。
例如,选择标准(默认)。
选择此作业的位置:
在区域字段中,选择一个区域。
例如,选择
us-central1 (Iowa)
(默认)。在可用区字段中,执行以下操作之一:
如果您想限制此作业仅在特定可用区中运行,请选择一个可用区。
否则,请选择任意。
例如,选择任意(默认)。
选择以下机器系列之一:
对于常见工作负载,请点击通用。
对于对性能要求较高的工作负载,请点击计算优化。
对于内存密集型工作负载,请点击内存优化。
例如,点击通用(默认)。
在系列字段中,为此作业的虚拟机选择一个机器系列。
例如,如果您为机器系列选择了通用,请选择 E2(默认)。
在机器类型字段中,选择此作业的虚拟机的机器类型。
例如,如果您为机器系列选择了 E2,请选择 e2-medium(2 个 vCPU、4 GB 内存)(默认)。
配置每项任务所需的虚拟机资源量:
在核心字段中,输入每个任务的 vCPUs 数量。
例如,输入
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
:每个任务运行的容器。CORES
:可选。要为每项任务分配的核心数(具体来说就是 vCPUs,它通常代表半个物理核心),以毫 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
。
使用
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
:每个任务运行的容器。CORES
:可选。要为每项任务分配的核心数(具体来说就是 vCPUs,它通常代表半个物理核心),以毫 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
是您的项目的项目 ID。
Go
Go
如需了解详情,请参阅 Batch Go API 参考文档。
如需向 Batch 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Java
Java
如需了解详情,请参阅 Batch Java API 参考文档。
如需向 Batch 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
Node.js
如需了解详情,请参阅 Batch Node.js API 参考文档。
如需向 Batch 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Python
Python
如需了解详情,请参阅 Batch Python API 参考文档。
如需向 Batch 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
C++
C++
如需了解详情,请参阅 Batch C++ API 参考文档。
如需向 Batch 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
创建基本脚本作业
您可以使用 Google Cloud 控制台、gcloud CLI、Batch API、Go、Java、Node.js、Python 或 C++ 创建基本脚本作业。
控制台
如需使用 Google Cloud 控制台创建基本脚本作业,请执行以下操作:
在 Google Cloud 控制台中,前往作业列表页面。
点击
创建。此时将打开创建批量作业页面。在左侧窗格中,作业详情页面处于选中状态。配置作业详情页面:
可选:在作业名称字段中,自定义作业名称。
例如,输入
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
。
配置资源规范页面:
在左侧窗格中,点击资源规范。 系统随即会打开资源规范页面。
在虚拟机预配模型部分中,为此作业的虚拟机选择预配模型,选择以下选项之一:
如果您的作业可以承受抢占,并且您需要折扣虚拟机,请选择 Spot。
否则,请选择标准。
例如,选择标准(默认)。
选择此作业的位置:
在区域字段中,选择一个区域。
例如,选择
us-central1 (Iowa)
(默认)。在可用区字段中,执行以下操作之一:
如果您想限制此作业仅在特定可用区中运行,请选择一个可用区。
否则,请选择任意。
例如,选择任意(默认)。
选择以下机器系列之一:
对于常见工作负载,请点击通用。
对于对性能要求较高的工作负载,请点击计算优化。
对于内存密集型工作负载,请点击内存优化。
例如,点击通用(默认)。
在系列字段中,为此作业的虚拟机选择一个机器系列。
例如,如果您为机器系列选择了通用,请选择 E2(默认)。
在机器类型字段中,选择此作业的虚拟机的机器类型。
例如,如果您为机器系列选择了 E2,请选择 e2-medium(2 个 vCPU、4 GB 内存)(默认)。
配置每项任务所需的虚拟机资源量:
在核心字段中,输入每个任务的 vCPUs 数量。
例如,输入
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
:每个任务运行的脚本。CORES
:可选。要为每项任务分配的核心数(具体来说就是 vCPUs,它通常代表半个物理核心),以毫 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
。
使用
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
:每个任务运行的脚本。CORES
:可选。要为每项任务分配的核心数(具体来说就是 vCPUs,它通常代表半个物理核心),以毫 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
是您的项目的项目 ID。
Go
Go
如需了解详情,请参阅 Batch Go API 参考文档。
如需向 Batch 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Java
Java
如需了解详情,请参阅 Batch Java API 参考文档。
如需向 Batch 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
Node.js
如需了解详情,请参阅 Batch Node.js API 参考文档。
如需向 Batch 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Python
Python
如需了解详情,请参阅 Batch Python API 参考文档。
如需向 Batch 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
C++
C++
如需了解详情,请参阅 Batch C++ API 参考文档。
如需向 Batch 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
使用环境变量
在编写您希望作业运行的容器映像或脚本时,使用环境变量。您可以使用为所有 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 密钥的加密内容,请使用密钥变量 (
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
如果您要定义一个作业,以将环境变量传递给每个任务运行的可运行对象,请参阅示例,了解如何为可运行对象定义和使用环境变量。否则,如果要定义一个作业,根据任务索引将环境变量列表传递给不同任务,请参阅示例,了解如何为每个任务定义和使用环境变量。
为可运行对象定义和使用环境变量
如需创建作业以使用 Batch 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"
}
}
]
}
}
请替换以下内容:
为每个任务定义和使用环境变量
如需使用 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" }
}
]
}
}
请替换以下内容: