本文档介绍了创建 Batch 作业的基础知识:如何创建和运行基于脚本或容器映像的作业,以及如何使用预定义变量和自定义变量。 如需详细了解如何创建和运行作业,请参阅作业创建和执行概览。
准备工作
- 如果您之前未使用过 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)
(默认)。在可用区字段中,执行以下操作之一:
如果要将此作业限制为仅在特定可用区中运行,请选择一个可用区。
否则,请选择任意。
例如,选择 any(默认)。
选择以下机器系列之一:
对于常见工作负载,请点击通用。
对于性能密集型工作负载,请点击计算优化。
对于内存密集型工作负载,请点击内存优化。
例如,点击通用(默认)。
在系列字段中,为此作业的虚拟机选择机器系列。
例如,如果您为机器系列选择了通用,请选择 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,通常代表半个物理核心),以 milliCPU 为单位。如果未指定cpuMilli
字段,则该值会设置为2000
(2 个 vCPU)。MEMORY
:可选。要为每项任务分配的内存量(以 MB 为单位)。如果未指定memoryMib
字段,则值设置为2000
(2 GB)。MAX_RETRY_COUNT
:可选。任务的最大重试次数。该值必须是介于0
到10
之间的整数。如果未指定maxRetryCount
字段,则值设置为0
,这意味着不会重试任务。MAX_RUN_DURATION
:可选。任务在重试或失败之前可以运行的最长时间,格式为值(以秒为单位),后跟s
。如果未指定maxRunDuration
字段,则该值会设置为最大值604800s
(7 天)。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,通常代表半个物理核心),以 milliCPU 为单位。如果未指定cpuMilli
字段,则该值会设置为2000
(2 个 vCPU)。MEMORY
:可选。要为每项任务分配的内存量(以 MB 为单位)。如果未指定memoryMib
字段,则该值会设置为2000
(2 GB)。MAX_RETRY_COUNT
:可选。任务的最大重试次数。该值必须是介于0
到10
之间的整数。如果未指定maxRetryCount
字段,则值设置为0
,这意味着不会重试任务。MAX_RUN_DURATION
:可选。任务在重试或失败之前可以运行的最长时间,格式为值(以秒为单位),后跟s
。如果未指定maxRunDuration
字段,则值设置为604800s
(7 天),这是最大值。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)
(默认)。在可用区字段中,执行以下操作之一:
如果要将此作业限制为仅在特定可用区中运行,请选择一个可用区。
否则,请选择任意。
例如,选择 any(默认)。
选择以下机器系列之一:
对于常见工作负载,请点击通用。
对于性能密集型工作负载,请点击计算优化。
对于内存密集型工作负载,请点击内存优化。
例如,点击通用(默认)。
在系列字段中,为此作业的虚拟机选择机器系列。
例如,如果您为机器系列选择了通用,请选择 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,通常代表半个物理核心),以 milliCPU 为单位。如果未指定cpuMilli
字段,则该值会设置为2000
(2 个 vCPU)。MEMORY
:可选。要为每项任务分配的内存量(以 MB 为单位)。如果未指定memoryMib
字段,则值设置为2000
(2 GB)。MAX_RETRY_COUNT
:可选。任务的最大重试次数。该值必须是介于0
到10
之间的整数。如果未指定maxRetryCount
字段,则值设置为0
,这意味着不会重试任务。MAX_RUN_DURATION
:可选。任务在重试或失败之前可以运行的最长时间,格式为值(以秒为单位),后跟s
。如果未指定maxRunDuration
字段,则该值会设置为最大值604800s
(7 天)。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,通常代表半个物理核心),以 milliCPU 为单位。如果未指定cpuMilli
字段,则该值会设置为2000
(2 个 vCPU)。MEMORY
:可选。要为每项任务分配的内存量(以 MB 为单位)。如果未指定memoryMib
字段,则该值会设置为2000
(2 GB)。MAX_RETRY_COUNT
:可选。任务的最大重试次数。该值必须是介于0
到10
之间的整数。如果未指定maxRetryCount
字段,则值设置为0
,这意味着不会重试任务。MAX_RUN_DURATION
:可选。任务在重试或失败之前可以运行的最长时间,格式为值(以秒为单位),后跟s
。如果未指定maxRunDuration
字段,则值设置为604800s
(7 天),这是最大值。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_TASK_COUNT
:任务组中的任务数量。BATCH_TASK_INDEX
:任务组中任务的索引编号。索引编号从0
开始。BATCH_HOSTS_FILE
:可选。列出任务组中所有正在运行的虚拟机实例的文件的路径。如需使用此环境变量,requireHostsFile
字段是必需的,并且必须设置为 true。
如需查看有关如何使用预定义环境变量的示例,请参阅本文档的创建基本作业中先前的可运行对象示例。
定义和使用自定义环境变量
(可选)您可以在作业中定义一个或多个自定义环境变量。
您可以根据所需的数据范围,在特定环境中定义每个变量:
对于所有任务均具有相同值的变量,请使用以下某个值:
如果变量的所有可运行对象都具有相同的值,请使用所有可运行对象的环境(
taskSpec
的environment
子字段)。否则,如果该变量的所有可运行对象都有单独的值,请使用一个或多个特定可运行对象的环境(
runnables[]
的environment
子字段)。
否则,对于每个任务都有单独的值的数组变量,请使用所有任务的环境 (
taskEnvironment
)。
在所选环境中,您可以使用以下某个环境子字段定义每个变量的名称和值:
如需在作业配置 JSON 文件中直接定义变量,请使用标准变量 (
variables
) 子字段,如本部分所示。对于您不想加密的数据,建议使用此选项。如需使用加密数据定义变量,您可以使用 Secret Manager 或 Cloud Key Management Service:
如需使用现有 Secret Manager 密文的加密内容,请使用 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
如果您要定义一个作业来将环境变量传递给每个任务运行的可运行对象,请参阅示例,了解如何为可运行对象定义和使用环境变量。或者,如果您要定义一个作业来根据任务索引将环境变量列表传递给不同任务,请参阅示例,了解如何为每个任务定义和使用环境变量。
为可运行对象定义和使用环境变量
如需创建使用 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" }
}
]
}
}
替换以下内容: