

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 ContainerProperties 的作业定义模板
<a name="job-definition-template"></a>

以下是一个空的作业定义模板，其中包含一个容器。您可以使用此模板创建任务定义，随后可将任务定义保存到文件并与 AWS CLI `--cli-input-json` 选项结合使用。有关这些参数的更多信息，请参阅 [JobDefinition](https://docs.aws.amazon.com/batch/latest/APIReference/API_JobDefinition.html)。

**注意**  
您可以使用以下 AWS CLI 命令生成单容器作业定义模板：  

```
$ aws batch register-job-definition --generate-cli-skeleton
```

```
{
    "jobDefinitionName": "",
    "type": "container",
    "parameters": {
        "KeyName": ""
    },
    "schedulingPriority": 0,
    "containerProperties": {
        "image": "",
        "vcpus": 0,
        "memory": 0,
        "command": [
            ""
        ],
        "jobRoleArn": "",
        "executionRoleArn": "",
        "volumes": [
            {
                "host": {
                    "sourcePath": ""
                },
                "name": "",
                "efsVolumeConfiguration": {
                    "fileSystemId": "",
                    "rootDirectory": "",
                    "transitEncryption": "ENABLED",
                    "transitEncryptionPort": 0,
                    "authorizationConfig": {
                        "accessPointId": "",
                        "iam": "DISABLED"
                    }
                }
            }
        ],
        "environment": [
            {
                "name": "",
                "value": ""
            }
        ],
        "mountPoints": [
            {
                "containerPath": "",
                "readOnly": true,
                "sourceVolume": ""
            }
        ],
        "readonlyRootFilesystem": true,
        "privileged": true,
        "ulimits": [
            {
                "hardLimit": 0,
                "name": "",
                "softLimit": 0
            }
        ],
        "user": "",
        "instanceType": "",
        "resourceRequirements": [
            {
                "value": "",
                "type": "MEMORY"
            }
        ],
        "linuxParameters": {
            "devices": [
                {
                    "hostPath": "",
                    "containerPath": "",
                    "permissions": [
                        "WRITE"
                    ]
                }
            ],
            "initProcessEnabled": true,
            "sharedMemorySize": 0,
            "tmpfs": [
                {
                    "containerPath": "",
                    "size": 0,
                    "mountOptions": [
                        ""
                    ]
                }
            ],
            "maxSwap": 0,
            "swappiness": 0
        },
        "logConfiguration": {
            "logDriver": "syslog",
            "options": {
                "KeyName": ""
            },
            "secretOptions": [
                {
                    "name": "",
                    "valueFrom": ""
                }
            ]
        },
        "secrets": [
            {
                "name": "",
                "valueFrom": ""
            }
        ],
        "networkConfiguration": {
            "assignPublicIp": "DISABLED"
        },
        "fargatePlatformConfiguration": {
            "platformVersion": ""
        }
    },
    "nodeProperties": {
        "numNodes": 0,
        "mainNode": 0,
        "nodeRangeProperties": [
            {
                "targetNodes": "",
                "container": {
                    "image": "",
                    "vcpus": 0,
                    "memory": 0,
                    "command": [
                        ""
                    ],
                    "jobRoleArn": "",
                    "executionRoleArn": "",
                    "volumes": [
                        {
                            "host": {
                                "sourcePath": ""
                            },
                            "name": "",
                            "efsVolumeConfiguration": {
                                "fileSystemId": "",
                                "rootDirectory": "",
                                "transitEncryption": "DISABLED",
                                "transitEncryptionPort": 0,
                                "authorizationConfig": {
                                    "accessPointId": "",
                                    "iam": "ENABLED"
                                }
                            }
                        }
                    ],
                    "environment": [
                        {
                            "name": "",
                            "value": ""
                        }
                    ],
                    "mountPoints": [
                        {
                            "containerPath": "",
                            "readOnly": true,
                            "sourceVolume": ""
                        }
                    ],
                    "readonlyRootFilesystem": true,
                    "privileged": true,
                    "ulimits": [
                        {
                            "hardLimit": 0,
                            "name": "",
                            "softLimit": 0
                        }
                    ],
                    "user": "",
                    "instanceType": "",
                    "resourceRequirements": [
                        {
                            "value": "",
                            "type": "MEMORY"
                        }
                    ],
                    "linuxParameters": {
                        "devices": [
                            {
                                "hostPath": "",
                                "containerPath": "",
                                "permissions": [
                                    "WRITE"
                                ]
                            }
                        ],
                        "initProcessEnabled": true,
                        "sharedMemorySize": 0,
                        "tmpfs": [
                            {
                                "containerPath": "",
                                "size": 0,
                                "mountOptions": [
                                    ""
                                ]
                            }
                        ],
                        "maxSwap": 0,
                        "swappiness": 0
                    },
                    "logConfiguration": {
                        "logDriver": "awslogs",
                        "options": {
                            "KeyName": ""
                        },
                        "secretOptions": [
                            {
                                "name": "",
                                "valueFrom": ""
                            }
                        ]
                    },
                    "secrets": [
                        {
                            "name": "",
                            "valueFrom": ""
                        }
                    ],
                    "networkConfiguration": {
                        "assignPublicIp": "DISABLED"
                    },
                    "fargatePlatformConfiguration": {
                        "platformVersion": ""
                    }
                }
            }
        ]
    },
    "retryStrategy": {
        "attempts": 0,
        "evaluateOnExit": [
            {
                "onStatusReason": "",
                "onReason": "",
                "onExitCode": "",
                "action": "RETRY"
            }
        ]
    },
    "propagateTags": true,
    "timeout": {
        "attemptDurationSeconds": 0
    },
    "tags": {
        "KeyName": ""
    },
    "platformCapabilities": [
        "EC2"
    ],
    "eksProperties": {
        "podProperties": {
            "serviceAccountName": "",
            "hostNetwork": true,
            "dnsPolicy": "",
            "containers": [
                {
                    "name": "",
                    "image": "",
                    "imagePullPolicy": "",
                    "command": [
                        ""
                    ],
                    "args": [
                        ""
                    ],
                    "env": [
                        {
                            "name": "",
                            "value": ""
                        }
                    ],
                    "resources": {
                        "limits": {
                            "KeyName": ""
                        },
                        "requests": {
                            "KeyName": ""
                        }
                    },
                    "volumeMounts": [
                        {
                            "name": "",
                            "mountPath": "",
                            "readOnly": true
                        }
                    ],
                    "securityContext": {
                        "runAsUser": 0,
                        "runAsGroup": 0,
                        "privileged": true,
                        "readOnlyRootFilesystem": true,
                        "runAsNonRoot": true
                    }
                }
            ],
            "volumes": [
                {
                    "name": "",
                    "hostPath": {
                        "path": ""
                    },
                    "emptyDir": {
                        "medium": "",
                        "sizeLimit": ""
                    },
                    "secret": {
                        "secretName": "",
                        "optional": true
                    }
                }
            ]
        }
    }
}
```

# ContainerProperties 的作业定义参数
<a name="job_definition_parameters"></a>

使用 [https://docs.aws.amazon.com/batch/latest/APIReference/API_ContainerProperties.html](https://docs.aws.amazon.com/batch/latest/APIReference/API_ContainerProperties.html) 的作业定义分为几个部分：
+ 作业定义名称
+ 作业定义的类型
+ 参数替换占位符默认值
+ 作业的容器属性
+ 在 Amazon EKS 资源上运行的作业所需的作业定义的 Amazon EKS 属性
+ 多节点并行作业所需的节点属性
+ 在 Fargate 资源上运行的作业所需的平台功能
+ 作业定义的默认标签传播详细信息
+ 作业定义的默认重试策略
+ 作业定义的默认计划优先级
+ 作业定义的默认标签
+ 作业定义的默认超时

**Contents**
+ [作业定义名称](#jobDefinitionName)
+ [类型](#type)
+ [Parameters](#parameters)
+ [容器属性](#containerProperties)
+ [Amazon EKS 属性](#job-definition-parameters-eks-properties)
+ [平台功能](#job-definition-parameters-platform-capabilities)
+ [传播标签](#job-definition-parameters-propagate-tags)
+ [节点属性](#nodeProperties)
+ [重试策略](#retryStrategy)
+ [计划优先级](#job-definition-parameters-schedulingPriority)
+ [Tags](#job-definition-parameters-tags)
+ [Timeout](#timeout)

## 作业定义名称
<a name="jobDefinitionName"></a>

`jobDefinitionName`  
注册作业定义时，需要指定一个名称。名称长度不超过 128 个字符。可以包含大小写字母、数字、连字符（-）和下划线（\$1）。使用该名称注册的第一个作业定义的修订版本为 1。任何使用该名称注册的后续作业定义都会有一个增量修订号。  
类型：字符串  
必需：是

## 类型
<a name="type"></a>

`type`  
当您注册作业定义时，需要指定作业类型。如果作业在 Fargate 资源上运行，则不支持`multinode`。有关多节点并行作业的更多信息，请参阅[创建多节点并行作业定义](create-multi-node-job-def.md)。  
类型：字符串  
有效值：`container` \$1 `multinode`  
必需：是

## Parameters
<a name="parameters"></a>

`parameters`  
提交作业时，可以指定应替换占位符或覆盖默认作业定义参数的参数。作业提交请求中的参数优先于作业定义中的默认值。这意味着可以对使用相同格式的多个作业使用相同的作业定义。还可以在提交时以编程方式更改命令中的值。  
类型：字符串到字符串映射  
必需：否  
注册作业定义时，可以在作业容器属性的`command`字段中使用参数替代占位符。语法如下所示。  

```
"command": [
    "ffmpeg",
    "-i",
    "Ref::inputfile",
    "-c",
    "Ref::codec",
    "-o",
    "Ref::outputfile"
]
```
在上面的示例中，命令中包含参数替代占位符`Ref::inputfile`、`Ref::codec`和`Ref::outputfile`。您可以使用作业定义中的`parameters`对象为这些占位符设置默认值。例如，要为`Ref::codec`占位符设置默认值，可以在作业定义中指定以下内容：  

```
"parameters" : {"codec" : "mp4"}
```
在提交此作业定义以运行时，容器命令中的`Ref::codec`参数将被替换为默认值。`mp4`

## 容器属性
<a name="containerProperties"></a>

注册作业定义时，指定容器属性列表，在置放作业时，需要将这些容器属性传递给容器实例上的 Docker 进程守护程序。作业定义中允许使用以下容器属性。对于单节点作业，这些容器属性是在作业定义级别设置的。对于多节点并行作业，每个节点组的容器属性是在[节点属性](#nodeProperties)级别设置的。

`command`  
传递给容器的命令。此参数映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) [创建容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)部分中的`Cmd`，以及[https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)的`COMMAND`参数。有关 Docker `CMD`参数的更多信息，请参阅 [https://docs.docker.com/engine/reference/builder/\$1cmd](https://docs.docker.com/engine/reference/builder/#cmd)。  

```
"command": ["string", ...]
```
类型：字符串数组  
必需：否

`environment`  
要传递给容器的环境变量。此参数将映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[创建容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)部分中的`Env`以及[https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)的`--env`选项。  
建议不要对敏感信息（如凭证数据）使用纯文本环境变量。
环境变量不得以`AWS_BATCH`开头。这种命名惯例是为AWS Batch服务所设置的变量保留的。
类型：键/值对的数组  
必需：否    
`name`  
环境变量的名称。  
类型：字符串  
必需：是，当使用`environment`时。  
`value`  
环境变量的值。  
类型：字符串  
必需：是，当使用`environment`时。

```
"environment" : [
    { "name" : "envName1", "value" : "envValue1" },
    { "name" : "envName2", "value" : "envValue2" }
]
```

`executionRoleArn`  
注册作业定义时，可以指定 IAM 角色。该角色为 Amazon ECS 容器代理提供了代表您调用其关联策略中指定的 API 操作的权限。对于在 Fargate 资源上运行的作业，必须提供执行角色。有关更多信息，请参阅 [AWS Batch IAM 执行角色](execution-IAM-role.md)。  
类型：字符串  
必需：否

`fargatePlatformConfiguration`  
适用于在 Fargate 资源上运行的作业的平台配置。在 EC2 资源上运行的作业不得指定此参数。  
类型：[FargatePlatformConfiguration](https://docs.aws.amazon.com/batch/latest/APIReference/API_FargatePlatformConfiguration.html) 对象  
必需：否    
`platformVersion`  
作业所使用的AWS Fargate 平台版本，或`LATEST`使用最近批准的AWS Fargate 平台版本。  
类型：字符串  
默认：`LATEST`  
必需：否

`image`  
用于启动作业的映像。此字符串将直接传递给 Docker 进程守护程序。默认情况下，Docker Hub 注册表中的映像可用。也可以使用`repository-url/image:tag`指定其他存储库。允许最多 255 个字母（大写和小写字母）、数字、连字符、下划线、冒号、句点、正斜杠和井号。此参数可映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[创建容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)部分中的`Image`和[https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)的`IMAGE`参数。  
Docker 映像架构必须与为它们安排的计算资源的处理器架构相匹配。例如，基于 ARM 的 Docker 映像只能在基于 ARM 的计算资源上运行。
+ Amazon ECR 公有存储库中的映像使用完整的`registry/repository[:tag]`或`registry/repository[@digest]`命名惯例（例如，`public.ecr.aws/registry_alias/my-web-app:latest`）。
+ Amazon ECR 存储库中的映像使用完整的`registry/repository:[tag]`命名惯例。例如，`aws_account_id.dkr.ecr.region.amazonaws.com``/my-web-app:latest`。
+ Docker Hub 上的官方存储库中的映像使用一个名称 (例如，`ubuntu`或`mongo`)。
+ Docker Hub 上其他存储库中的映像通过组织名称 (例如，`amazon/amazon-ecs-agent`) 进行限定。
+ 其他在线存储库中的映像由域名 (例如，`quay.io/assemblyline/ubuntu`) 进行进一步限定。
类型：字符串  
必需：是

`instanceType`  
要用于多节点并行作业的实例类型。多节点并行作业中的所有节点组必须使用相同的实例类型。此参数不适用于单节点容器作业或在 Fargate 资源上运行的作业。  
类型：字符串  
必需：否

`jobRoleArn`  
注册作业定义时，可以指定 IAM 角色。该角色为作业容器提供了代表您调用其关联的策略中指定的 API 操作的权限。有关更多信息，请参阅 *Amazon Elastic Container Service 开发人员指南*中的[任务的 IAM 角色](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)。  
类型：字符串  
必需：否

`linuxParameters`  
特定于 Linux 的修改应用于容器的详细信息，如设备映射的详细信息。  

```
"linuxParameters": {
    "devices": [
        {
            "hostPath": "string",
            "containerPath": "string",
            "permissions": [
                "READ", "WRITE", "MKNOD"
            ]
        }
    ],
    "initProcessEnabled": true|false,
    "sharedMemorySize": 0,
    "tmpfs": [
        {
            "containerPath": "string",
            "size": integer,
            "mountOptions": [
                "string"
            ]
        }
    ],
    "maxSwap": integer,
    "swappiness": integer
}
```
类型：[LinuxParameters](https://docs.aws.amazon.com/batch/latest/APIReference/API_LinuxParameters.html) 对象  
必需：否    
`devices`  
映射到容器的设备列表。此参数将映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[创建容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)部分中的`Devices`以及 [Docker 运行](https://docs.docker.com/engine/reference/run/)的`--device`选项。  
此参数不适用于在 Fargate 资源上运行的作业。
类型：[设备](https://docs.aws.amazon.com/batch/latest/APIReference/API_Device.html)对象数组  
必需：否    
`hostPath`  
主机容器实例中可用设备的路径。  
类型：字符串  
必需：是  
`containerPath`  
在容器中公开设备的路径。如果未指定，则设备将在与主机路径相同的路径上公开。  
类型：字符串  
必需：否  
`permissions`  
容器中设备的权限。如果未指定，则将权限设置为`READ`、`WRITE`和`MKNOD`。  
类型：字符串数组  
必需：否  
有效值：`READ` \$1`WRITE` \$1`MKNOD`  
`initProcessEnabled`  
如果为 true，则在容器内运行`init`进程，以转发信号和获得进程。此参数会将`--init`选项映射到 [Docker 运行](https://docs.docker.com/engine/reference/run/)。此参数要求容器实例上的 Docker Remote API 版本为 1.25 或更高版本。要检查容器实例上的 Docker Remote API 版本，请登录到容器实例并运行以下命令：`sudo docker version | grep "Server API version"`  
类型：布尔值  
必需：否  
`maxSwap`  
作业可以使用的交换内存总量（以 MiB 为单位）。该参数会转换为 [Docker 运行](https://docs.docker.com/engine/reference/run/)的`--memory-swap`选项，其中，该值为容器内存和`maxSwap`值之和。有关更多信息，请参阅 Docker 文档中的[`--memory-swap`详细信息](https://docs.docker.com/config/containers/resource_constraints/#--memory-swap-details)。  
如果指定`maxSwap`值为`0`，则该容器不使用交换。接受的值为`0`或任何正整数。如果省略`maxSwap`参数，该容器将为其运行所在的容器实例使用交换配置。必须为要使用的`swappiness`参数设置`maxSwap`值。  
此参数不适用于在 Fargate 资源上运行的作业。
类型：整数  
必需：否  
`sharedMemorySize`  
`/dev/shm`卷的大小值 (以 MiB 为单位)。此参数会将`--shm-size`选项映射到 [Docker 运行](https://docs.docker.com/engine/reference/run/)。  
此参数不适用于在 Fargate 资源上运行的作业。
类型：整数  
必需：否  
`swappiness`  
可以使用此功能调整容器的内存交换行为。除非绝对必要，否则`0`的一个`swappiness`值将导致交换不会发生。`swappiness`值为`100`将导致页面被积极地交换。接受的值为`0`到`100`之间的整数。如果未指定`swappiness`参数，则使用默认值`60`。如果未指定`maxSwap`的值，则此参数将被忽略。如果`maxSwap`设置为 0，则容器不使用交换。此参数会将`--memory-swappiness`选项映射到 [Docker 运行](https://docs.docker.com/engine/reference/run/)。  
在使用每个容器交换配置时，请考虑以下事项。  
+ 必须在容器实例上启用并分配交换空间才能供容器使用。
**注意**  
默认情况下，Amazon ECS 优化 AMI 没有启用交换功能。必须在实例上启用交换才能使用此功能。有关更多信息，请参阅《Amazon EC2 用户指南》的中的[实例存储交换卷](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-store-swap-volumes.html)**或[如何使用交换文件分配内存以便在 Amazon EC2 实例中用作交换空间？](https://aws.amazon.com/premiumsupport/knowledge-center/ec2-memory-swap-file/)。
+ 只有使用 EC2 资源的作业定义才支持交换空间参数。
+ 如果作业定义中忽略了`maxSwap`和`swappiness`参数，每个容器都有默认的`swappiness`值：60。总的交换使用量限制为容器的内存预留量的两倍。
此参数不适用于在 Fargate 资源上运行的作业。
类型：整数  
必需：否  
`tmpfs`  
tmpfs挂载的容器路径、挂载选项和大小。  
类型：[Tmpfs](https://docs.aws.amazon.com/batch/latest/APIReference/API_Tmpfs.html) 对象数组  
此参数不适用于在 Fargate 资源上运行的作业。
必需：否    
`containerPath`  
挂载tmpfs卷的容器中的绝对文件路径。  
类型：字符串  
必需：是  
`mountOptions`  
tmpfs卷挂载选项列表。  
有效值："`defaults`" \$1 "`ro`" \$1 "`rw`" \$1 "`suid`" \$1 "`nosuid`" \$1 "`dev`" \$1 "`nodev`" \$1 "`exec`" \$1 "`noexec`" \$1 "`sync`" \$1 "`async`" \$1 "`dirsync`" \$1 "`remount`" \$1 "`mand`" \$1 "`nomand`" \$1 "`atime`" \$1 "`noatime`" \$1 "`diratime`" \$1 "`nodiratime`" \$1 "`bind`" \$1 "`rbind`" \$1 "`unbindable`" \$1 "`runbindable`" \$1 "`private`" \$1 "`rprivate`" \$1 "`shared`" \$1 "`rshared`" \$1 "`slave`" \$1 "`rslave`" \$1 "`relatime`" \$1 "`norelatime`" \$1 "`strictatime`" \$1 "`nostrictatime`" \$1 "`mode`" \$1 "`uid`" \$1 "`gid`" \$1 "`nr_inodes`" \$1 "`nr_blocks`" \$1 "`mpol`"  
类型：字符串数组  
必需：否  
`size`  
tmpfs卷的大小 (以 MiB 为单位)。  
类型：整数  
必需：是

`logConfiguration`  
作业的日志配置规范。  
此参数将映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[创建容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)部分中的`LogConfig`以及 [Docker 运行](https://docs.docker.com/engine/reference/run/)的`--log-driver`选项。默认情况下，容器使用与 Docker 进程守护程序相同的日志记录驱动程序。但容器可能通过在容器定义中使用此参数指定日志驱动程序，以此来使用不同于 Docker 进程守护程序的日志记录驱动程序。要对容器使用另一个日志记录驱动程序，必须在容器实例或另一个日志服务器上配置日志系统，以提供远程日志记录选项。有关其他支持的日志驱动程序选项的更多信息，请参阅 Docker 文档中的[配置日志记录驱动程序](https://docs.docker.com/engine/admin/logging/overview/)。  
AWS Batch目前支持提供给 Docker 进程守护程序的一小部分日志记录驱动程序（在 [LogConfiguration](https://docs.aws.amazon.com/batch/latest/APIReference/API_LogConfiguration.html) 数据类型中显示）。
此参数要求容器实例上的 Docker Remote API 版本为 1.18 或更高版本。要检查容器实例上的 Docker Remote API 版本，请登录到容器实例并运行以下命令：`sudo docker version | grep "Server API version"`  

```
"logConfiguration": {
    "devices": [
        {
            "logDriver": "string",
            "options": {
                "optionName1" : "optionValue1",
                "optionName2" : "optionValue2"
            }
            "secretOptions": [
              {
                  "name" : "secretOptionName1",
                  "valueFrom" : "secretOptionArn1"
              },
              {
                  "name" : "secretOptionName2",
                  "valueFrom" : "secretOptionArn2"
              }
            ]
        }
    ]
}
```
类型：[LogConfiguration](https://docs.aws.amazon.com/batch/latest/APIReference/API_LogConfiguration.html) 对象  
必需：否    
`logDriver`  
要用于作业的日志驱动程序。默认情况下，AWS Batch会启用`awslogs`日志驱动程序。为此参数列出的有效值是默认情况下 Amazon ECS 容器代理可与之通信的日志驱动程序。  
此参数将映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[创建容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)部分中的`LogConfig`以及 [Docker 运行](https://docs.docker.com/engine/reference/run/)的`--log-driver`选项。默认情况下，作业使用与 Docker 进程守护程序相同的日志记录驱动程序。但作业可能通过在作业定义中使用此参数指定日志驱动程序，以此来使用不同于 Docker 进程守护程序的日志记录驱动程序。如果要为作业指定另一个日志记录驱动程序，则必须在计算环境中的容器实例上配置日志系统。或者，也可以在另一台日志服务器上对其进行配置，以提供远程日志记录选项。有关其他支持的日志驱动程序选项的更多信息，请参阅 Docker 文档中的[配置日志记录驱动程序](https://docs.docker.com/engine/admin/logging/overview/)。  
AWS Batch目前支持提供给 Docker 进程守护程序的一小部分日志记录驱动程序。可能会在 Amazon ECS 容器代理的未来版本中提供其他日志驱动程序。
支持的日志驱动程序为`awslogs`、`fluentd`、`gelf`、`json-file`、`journald`、`logentries`、`syslog`和`splunk`。  
在 Fargate 资源上运行的作业仅限于`awslogs`和`splunk`日志驱动程序。
此参数要求容器实例上的 Docker Remote API 版本为 1.18 或更高版本。要检查容器实例上的 Docker Remote API 版本，请登录到容器实例并运行以下命令：`sudo docker version | grep "Server API version"`  
在容器实例上运行的 Amazon ECS 容器代理必须将该实例上的可用日志记录驱动程序注册到`ECS_AVAILABLE_LOGGING_DRIVERS`环境变量。否则，放置在该实例上的容器将无法使用这些日志配置选项。有关更多信息，请参阅*《Amazon Elastic Container Service 开发人员指南》*中的 [Amazon ECS 容器代理配置](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-config.html)。  
`awslogs`  
指定 Amazon CloudWatch Logs 日志记录驱动程序。有关更多信息，请参阅[使用 awslogs 日志驱动程序](using_awslogs.md)和 Docker 文档中的[ Amazon CloudWatch Logs 日志记录驱动程序](https://docs.docker.com/config/containers/logging/awslogs/)。  
`fluentd`  
指定 Fluentd 日志记录驱动程序。有关更多信息（包括用法和选项），请参阅 Docker 文档中的 [Fluentd 日志记录驱动程序](https://docs.docker.com/config/containers/logging/fluentd/)。  
`gelf`  
指定 Graylog Extended Format (GELF) 日志记录驱动程序。有关更多信息（包括用法和选项），请参阅 Docker 文档中的 [Graylog Extended Format 日志记录驱动程序](https://docs.docker.com/config/containers/logging/gelf/)。  
`journald`  
指定 journald 日志记录驱动程序。有关更多信息（包括用法和选项），请参阅 Docker 文档中的 [Journald 日志记录驱动程序](https://docs.docker.com/config/containers/logging/journald/)。  
`json-file`  
指定 JSON 文件日志记录驱动程序。有关更多信息（包括用法和选项），请参阅 Docker 文档中的 [JSON 文件日志记录驱动程序](https://docs.docker.com/config/containers/logging/json-file/)。  
`splunk`  
指定 Splunk 日志记录驱动程序。有关更多信息（包括用法和选项），请参阅 Docker 文档中的 [Splunk 日志记录驱动程序](https://docs.docker.com/config/containers/logging/splunk/)。  
`syslog`  
指定 syslog 日志记录驱动程序。有关更多信息（包括用法和选项），请参阅 Docker 文档中的 [Syslog 日志记录驱动程序](https://docs.docker.com/config/containers/logging/syslog/)。
类型：字符串  
必需：是  
有效值：`awslogs` \$1`fluentd` \$1`gelf` \$1`journald` \$1`json-file` \$1`splunk` \$1`syslog`   
如果有之前未列出但您希望与 Amazon ECS 容器代理一起使用的自定义驱动程序，则可使 [GitHub 上提供](https://github.com/aws/amazon-ecs-agent)的 Amazon ECS 容器代理项目分支，并对其进行自定义以便与该驱动程序结合使用。我们鼓励您针对要包含的更改提交拉取请求。但是，亚马逊云科技当前不支持运行此软件修改后副本的请求。  
`options`  
要发送到作业的日志驱动程序中的日志配置选项。  
此参数要求容器实例上的 Docker Remote API 版本为 1.19 或更高版本。  
类型：字符串到字符串映射  
必需：否  
`secretOptions`  
表示要传递到日志配置的密文的对象。有关更多信息，请参阅 [指定敏感数据](specifying-sensitive-data.md)。  
类型：对象数组  
必需：否    
`name`  
要在作业中设置的日志驱动程序选项的名称。  
类型：字符串  
必需：是  
`valueFrom`  
要向容器的日志配置公开的秘钥的 Amazon 资源名称（ARN）。支持的值为 Secrets Manager 秘钥的完整 ARN 或 SSM Parameter Store 中参数的完整 ARN。  
如果 SSM Parameter Store 参数存在于要启动的任务所在的同一AWS 区域中，则可以使用参数的完整 ARN 或名称。如果参数存在于不同的区域，则必须指定完整的 ARN。
类型：字符串  
必需：是

`memory`  
*已弃用此参数，请改用`resourceRequirements`。*  
为作业预留的 MiB 内存的数量。  
例如，如果您的作业定义包含类似于以下内容的语法，则说明如何使用`resourceRequirements`。  

```
"containerProperties": {
  "memory": 512
}
```
使用`resourceRequirements`的等效语法如下。  

```
"containerProperties": {
  "resourceRequirements": [
    {
      "type": "MEMORY",
      "value": "512"
    }
  ]
}
```
类型：整数  
必需：是

`mountPoints`  
容器中数据卷的挂载点。此参数将映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[创建容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)部分中的 `Volumes` 以及 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) 的 `--volume` 选项。  

```
"mountPoints": [
                {
                  "sourceVolume": "string",
                  "containerPath": "string",
                  "readOnly": true|false
                }
              ]
```
类型：对象数组  
必需：否    
`sourceVolume`  
要挂载的卷的名称。  
类型：字符串  
必需：是，当使用`mountPoints`时。  
`containerPath`  
要将主机卷挂载到的容器上的路径。  
类型：字符串  
必需：是，当使用`mountPoints`时。  
`readOnly`  
如果此值为`true`，则容器具有对卷的只读访问权。如果此值为`false`，则容器可对卷进行写入。  
类型：布尔值  
必需：否  
默认值：False

`networkConfiguration`  
适用于在 Fargate 资源上运行的作业的网络配置。在 EC2 资源上运行的作业不得指定此参数。  

```
"networkConfiguration": { 
   "assignPublicIp": "string"
}
```
类型：对象数组  
必需：否    
`assignPublicIp`  
指示作业是否具有公有 IP 地址。如果作业需要出站网络访问权限，则必须这样做。  
类型：字符串  
有效值：`ENABLED` \$1 `DISABLED`  
必需：否  
默认值：`DISABLED`

`privileged`  
当此参数为 true 时，将对此容器提供对主机容器实例的提升的权限（类似于`root`用户）。此参数将映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[创建容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)部分中的`Privileged`以及[https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)的`--privileged`选项。此参数不适用于在 Fargate 资源上运行的作业。请勿提供或将其指定为 false。  

```
"privileged": true|false
```
类型：布尔值  
必需：否

`readonlyRootFilesystem`  
当此参数为 true 时，将对此容器提供对其根文件系统的只读访问权。此参数将映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[创建容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)部分中的 `ReadonlyRootfs` 以及 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) 的 `--read-only` 选项。  

```
"readonlyRootFilesystem": true|false
```
类型：布尔值  
必需：否

`resourceRequirements`  
要分配给容器的资源的类型和数量。支持的资源包括`GPU`、`MEMORY`和`VCPU`。  

```
"resourceRequirements" : [
  {
    "type": "GPU",
    "value": "number"
  }
]
```
类型：对象数组  
必需：否    
`type`  
要分配给容器的资源类型。支持的资源包括`GPU`、`MEMORY`和`VCPU`。  
类型：字符串  
必需：是，当使用`resourceRequirements`时。  
`value`  
要为容器预留的指定资源的数量。这些值根据`type`指定的不同而有所不同。    
type="GPU"  
为容器预留的物理 GPU 数量。为作业中所有容器预留的 GPU 数量不能超过启动作业的计算资源上可用 GPU 的数量。  
type="MEMORY"  
要提供给容器的内存的硬限制（以 MiB 为单位）。如果容器尝试使用超出此处指定的内存，该容器将被终止。此参数将映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的 [Create a container](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)（创建容器）部分中的 `Memory` 以及 [docker run](https://docs.docker.com/engine/reference/run/) 的 `--memory` 选项。您必须为作业指定至少 4 MiB 内存。对于多节点并行 (MNP) 作业来说，这是必需的，但可以在多个位置指定。必须至少为每个节点指定一次。此参数将映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的 [Create a container](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)（创建容器）部分中的 `Memory` 以及 [docker run](https://docs.docker.com/engine/reference/run/) 的 `--memory` 选项。  
如果要通过为特定实例类型的作业提供尽可能多的内存来最大化资源利用率，请参阅[计算资源内存管理](memory-management.md)。
对于在 Fargate 资源上运行的作业，`value`必须与受支持的值之一匹配。此外，这些`VCPU`值必须是该内存值支持的值之一。      
<a name="Fargate-memory-vcpu"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/batch/latest/userguide/job_definition_parameters.html)  
type="VCPU"  
为作业预留的 vCPU 的数量。此参数将映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的 [Create a container](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)（创建容器）部分中的 `CpuShares` 以及 [docker run](https://docs.docker.com/engine/reference/run/) 的 `--cpu-shares` 选项。每个 vCPU 相当于 1024 个 CPU 份额。对于在 EC2 资源上运行的作业，必须至少指定一个 vCPU。这是必需的，但可以在多个位置指定。必须至少为每个节点指定一次。  
对于在 Fargate 资源上运行的作业，`value`必须与受支持的值之一匹配，且`MEMORY`值必须是该 VCPU 值支持的值之一。支持的值为 0.25、0.5、1、2、4、8 和 16。  
Fargate 按需 vCPU 资源计数配额的默认值为 6 个 vCPU。有关 Fargate 配额的更多信息，请参阅*Amazon Web Services 一般参考*中[AWS Fargate 配额](https://docs.aws.amazon.com/general/latest/gr/ecs-service.html#service-quotas-fargate)。
类型：字符串  
必需：是，当使用`resourceRequirements`时。

`secrets`  
作为环境变量公开的作业密文。有关更多信息，请参阅 [指定敏感数据](specifying-sensitive-data.md)。  

```
"secrets": [
    {
      "name": "secretName1",
      "valueFrom": "secretArn1"
    },
    {
      "name": "secretName2",
      "valueFrom": "secretArn2"
    }
    ...
]
```
类型：对象数组  
必需：否    
`name`  
包含密文的环境变量的名称。  
类型：字符串  
必需：是，当使用`secrets`时。  
  
`valueFrom`  
要向容器公开的密文。支持的值是 Secrets Manager 密文的完整 Amazon 资源名称（ARN）或 SSM Parameter Store 中参数的完整 ARN。  
如果 SSM Parameter Store 参数存在于要启动的作业所在的同一AWS 区域中，则可以使用参数的完整 ARN 或名称。如果参数存在于不同的区域，则必须指定完整的 ARN。
类型：字符串  
必需：是，当使用`secrets`时。

`ulimits`  
要在容器中设置的`ulimits`值的列表。此参数将映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[创建容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)部分中的 `Ulimits` 以及 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) 的 `--ulimit` 选项。  

```
"ulimits": [
  {
    "name": string,
    "softLimit": integer,
    "hardLimit": integer
  }
  ...
]
```
类型：对象数组  
必需：否    
`name`  
`ulimit`的`type`。  
类型：字符串  
必需：是，当使用`ulimits`时。  
  
`hardLimit`  
`ulimit`类型的硬限制。  
类型：整数  
必需：是，当使用`ulimits`时。  
  
`softLimit`  
`ulimit`类型的软限制。  
类型：整数  
必需：是，当使用`ulimits`时。  


`user`  
要在容器内使用的用户名。此参数将映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[创建容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)部分中的 `User` 以及 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) 的 `--user` 选项。  

```
"user": "string"
```
类型：字符串  
必需：否

`vcpus`  
*已弃用此参数，请改用`resourceRequirements`。*  
为容器预留的 vCPU 的数量。  
作为`resourceRequirements`使用方法的示例，如果作业定义包含类似于以下的行：  

```
"containerProperties": {
  "vcpus": 2
}
```
使用`resourceRequirements`的等效行如下所示。  

```
"containerProperties": {
  "resourceRequirements": [
    {
      "type": "VCPU",
      "value": "2"
    }
  ]
}
```
类型：整数  
必需：是

`volumes`  
注册作业定义时，可以指定需传递给容器实例上的 Docker 进程守护程序的卷的列表。容器属性中允许以下参数：  

```
"volumes": [
  {
    "name": "string",
    "host": {
      "sourcePath": "string"
    },
    "efsVolumeConfiguration": {
      "authorizationConfig": {
        "accessPointId": "string",
        "iam": "string"
      },
      "fileSystemId": "string",
      "rootDirectory": "string",
      "transitEncryption": "string",
      "transitEncryptionPort": number
    }
  }
]
```  
`name`  
卷的名称。最多能包含 255 个字母 (大写和小写字母)、数字、连字符和下划线。此名称已在容器定义`sourceVolume`的`mountPoints`参数中引用。  
类型：字符串  
必需：否  
`host`  
`host`参数的内容确定数据卷是否一直保存在主机容器实例上以及存储它的位置上。如果`host`参数为空，则 Docker 进程守护程序将为数据卷分配一个主机路径。但是，在与该卷关联的容器停止运行后，不保证保存数据。  
此参数不适用于在 Fargate 资源上运行的作业。
类型：对象  
必需：否    
`sourcePath`  
向容器提供的主机容器实例上的路径。如果此参数为空，则 Docker 进程守护程序将分配一个主机路径。  
如果`host`参数包含`sourcePath`文件位置，则数据卷将在主机容器实例上的指定位置保留，除非手动将其删除。如果主机容器实例上不存在`sourcePath`值，则 Docker 进程守护程序将创建该值。如果该位置不存在，则将导出源路径文件夹的内容。  
类型：字符串  
必需：否  
`efsVolumeConfiguration`  
使用 Amazon Elastic File System 文件系统进行任务存储时，指定此参数。有关更多信息，请参阅 [Amazon EFS 卷](efs-volumes.md)。  
类型：对象  
必需：否    
`authorizationConfig`  
Amazon EFS 文件系统的授权配置详细信息。  
类型：字符串  
必需：否    
`accessPointId`  
要使用的 Amazon EFS 接入点 ID。如果指定了接入点，则必须省略在`EFSVolumeConfiguration`中指定的根目录值，或者将其设置为`/`。这将强制执行 EFS 接入点上设置的路径。如果使用接入点，则必须在`EFSVolumeConfiguration`中启用传输加密。有关更多信息，请参阅*《Amazon Elastic File System 用户指南》*中的[使用 Amazon EFS 接入点](https://docs.aws.amazon.com/efs/latest/ug/efs-access-points.html)。  
类型：字符串  
必需：否  
`iam`  
确定在挂载 Amazon EFS 文件系统时是否使用在作业定义中定义的AWS Batch作业 IAM 角色。如果启用，则必须在`EFSVolumeConfiguration`中启用传输加密。如果忽略此参数，将使用默认值`DISABLED`。有关更多信息，请参阅 [使用 Amazon EFS 接入点](efs-volumes.md#efs-volume-accesspoints)。  
类型：字符串  
有效值：`ENABLED` \$1 `DISABLED`  
必需：否  
`fileSystemId`  
要使用的 Amazon EFS 文件系统 ID。  
类型：字符串  
必需：否  
`rootDirectory`  
Amazon EFS 文件系统中要作为主机内的根目录挂载的目录。如果忽略此参数，将使用 Amazon EFS 卷的根目录。如果指定，`/`这与忽略此参数效果相同。最大长度为 4096 个字符。  
如果在`authorizationConfig`中指定了 EFS 接入点，则必须省略根目录参数，或者将其设置为`/`。这将在 Amazon EFS 接入点上强制执行设置的路径。
类型：字符串  
必需：否  
`transitEncryption`  
确定是否对 Amazon ECS 主机和 Amazon EFS 服务器之间传输的 Amazon EFS 数据启用加密。如果使用 Amazon EFS IAM 授权，则必须启用传输加密。如果忽略此参数，将使用默认值`DISABLED`。有关更多信息，请参阅[《Amazon Elastic File System 用户指南》](https://docs.aws.amazon.com/efs/latest/ug/encryption-in-transit.html)中的*加密传输中数据*。  
类型：字符串  
有效值：`ENABLED` \$1 `DISABLED`  
必需：否  
`transitEncryptionPort`  
在 Amazon ECS 主机和 Amazon EFS 服务器之间发送加密数据时要使用的端口。如果未指定传输加密端口，将使用 Amazon EFS 挂载帮助程序使用的端口选择策略。该值必须在 0 到 65535 之间。有关更多信息，请参阅[《Amazon Elastic File System 用户指南》](https://docs.aws.amazon.com/efs/latest/ug/efs-mount-helper.html)中的 *EFS 挂载帮助程序*。  
类型：整数  
必需：否

## Amazon EKS 属性
<a name="job-definition-parameters-eks-properties"></a>

具有各种属性的对象，这些属性特定于基于 Amazon EKS 的作业。不得为基于 Amazon ECS 的作业定义指定此项。

`podProperties`  
作业的Kubernetes容器组（pod）资源的属性。  
类型：[EksPodProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksPodProperties.html) 对象  
必需：否    
`containers`  
在 Amazon EKS 容器组上使用的容器属性。  
类型：[EksContainer](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksContainer.html) 对象  
必需：否    
`args`  
入口点的参数数组。如果未指定，则使用容器映像的`CMD`。这对应Kubernetes中[容器组（pod）](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/) [入口点](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#entrypoint) 部分的`args`成员。使用容器的环境扩展环境变量引用。  
如果引用的环境变量不存在，则命令中的引用不会更改。例如，如果引用是“`$(NAME1)`”且`NAME1`环境变量不存在，则命令字符串将保留“`$(NAME1)`”。`$$`替换为`$`，并且生成的字符串未扩展。例如，无论`VAR_NAME`环境变量是否存在，`$$(VAR_NAME)`都会作为`$(VAR_NAME)`传递。有关更多信息，请参阅*《Dockerfile 参考》*中的 [CMD](https://docs.docker.com/engine/reference/builder/#cmd) 和 *Kubernetes文档*中的[为容器组（pod）定义命令和参数](https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/)。  
类型：字符串数组  
必需：否  
`command`  
容器的入口点。这不是在 Shell 中运行。如果未指定，则使用容器映像的`ENTRYPOINT`。使用容器的环境扩展环境变量引用。  
如果引用的环境变量不存在，则命令中的引用不会更改。例如，如果引用是“`$(NAME1)`”且`NAME1`环境变量不存在，则命令字符串将保留“`$(NAME1)`”。`$$`替换为`$`，并且生成的字符串未扩展。例如，无论`VAR_NAME`环境变量是否存在，`$$(VAR_NAME)`都会作为`$(VAR_NAME)`传递。无法更新入口点。有关更多信息，请参阅 *《Dockerfile 参考》*中的[入口点](https://docs.docker.com/engine/reference/builder/#entrypoint)和 *Kubernetes文档*中的[为容器设置启动时要执行的命令和参数](https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/)和[入口点](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#entrypoint)。  
类型：字符串数组  
必需：否  
`env`  
要传递给容器的环境变量。  
环境变量不得以 `AWS_BATCH` 开头。这种命名惯例是为AWS Batch所设置的变量保留的。
类型：[EksContainerEnvironmentVariable](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksContainerEnvironmentVariable.html) 对象数组  
必需：否    
`name`  
环境变量的名称。  
类型：字符串  
必需：是  
`value`  
环境变量的值。  
类型：字符串  
必需：否  
`image`  
用于启动容器的 Docker 映像。  
类型：字符串  
必需：是  
`imagePullPolicy`  
容器的图像提取策略。支持的值有`Always`、`IfNotPresent`和`Never`。此参数默认为`IfNotPresent`。但是，如果指定了`:latest`标签，则默认为`Always`。有关更多信息，请参阅*Kubernetes文档*中的[更新映像](https://kubernetes.io/docs/concepts/containers/images/#updating-images)。  
类型：字符串  
必需：否  
`name`  
容器的名称。如果未指定名称，则使用默认名称“`Default`”。容器组中的每个容器必须具有唯一的名称。  
类型：字符串  
必需：否  
`resources`  
要分配给容器的资源的类型和数量。支持的资源包括`memory`、`cpu`和`nvidia.com/gpu`。有关更多信息，请参阅*Kubernetes文档*中的[容器组（pod）和容器的资源管理](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/)。  
类型：[EksContainerResourceRequirements](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksContainerResourceRequirements.html) 对象  
必需：否    
`limits`  
为容器预留的资源类型和数量。这些值因指定的`name`而异。可以使用`limits`或`requests`对象请求资源。    
memory  
容器的内存硬限值（以 MiB 为单位）用整数表示，带“Mi”后缀。如果容器试图超出指定的内存，则容器将终止。必须为作业指定至少 4MiB 的内存。可以在`limits`、`requests`或两者中指定`memory`。如果在这两个位置中指定了`memory`，则`limits`中指定的值必须等于`requests`中指定的值。  
为了最大程度地利用资源，请为作业提供尽可能多的内存，以用于正在使用的具体实例类型。要了解如何操作，请参阅[计算资源内存管理](memory-management.md)。  
cpu  
为容器预留的 CPU 的数量。值必须是`0.25`的偶数倍。可以在`limits`、`requests`或两者中指定`cpu`。如果在这两个位置中指定了`cpu`，则`limits`中指定的值必须至少与`requests`中指定的值一样大。  
nvidia.com/gpu  
为容器预留的 GPU 的数量。值必须是整数。可以在`limits`、`requests`或两者中指定`memory`。如果在这两个位置中指定了 `memory`，则 `limits` 中指定的值必须等于 `requests` 中指定的值。
类型：字符串到字符串映射  
值长度限制：最小长度为 1。长度上限为 256。  
必需：否  
`requests`  
为容器请求的资源类型和数量。这些值因指定的`name`而异。可以使用`limits`或`requests`对象请求资源。    
memory  
容器的内存硬限值（以 MiB 为单位）用整数表示，带“Mi”后缀。如果容器试图超出指定的内存，则容器将终止。必须为作业指定至少 4MiB 的内存。可以在`limits`、`requests`或两者中指定`memory`。如果在两者中均指定了`memory`，则`limits`中指定的值必须等于`requests`中指定的值。  
如果要通过为特定实例类型的作业提供尽可能多的内存来最大化资源利用率，请参阅[计算资源内存管理](memory-management.md)。  
cpu  
为容器预留的 CPU 的数量。值必须是`0.25`的偶数倍。可以在`limits`、`requests`或两者中指定`cpu`。如果在两者中均指定了`cpu`，则`limits`中指定的值必须至少与`requests`中指定的值一样大。  
nvidia.com/gpu  
为容器预留的 GPU 的数量。值必须是整数。可以在`limits`、`requests`或两者中指定`nvidia.com/gpu`。如果在两者中均指定了 `nvidia.com/gpu`，则 `limits` 中指定的值必须等于 `requests` 中指定的值。
类型：字符串到字符串映射  
值长度限制：最小长度为 1。长度上限为 256。  
必需：否  
`securityContext`  
作业的安全上下文。有关更多信息，请参阅*Kubernetes文档*中的[为容器组（pod）或容器配置安全上下文](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/)。  
类型：[EksContainerSecurityContext](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksContainerSecurityContext.html) 对象  
必需：否    
`privileged`  
当此参数为`true`时，将对此容器提供对主机容器实例的提升权限。权限级别与`root`用户权限类似。默认值为 `false`。该参数映射到*Kubernetes文档*中[特权容器组（pod）安全策略](https://kubernetes.io/docs/concepts/security/pod-security-policy/#privileged)中的`privileged`策略。  
类型：布尔值  
必需：否  
`readOnlyRootFilesystem`  
当此参数为`true`时，将对此容器提供对其根文件系统的只读访问权。默认值为 `false`。该参数映射到*Kubernetes文档*中[卷和文件系统容器组（pod）安全策略](https://kubernetes.io/docs/concepts/security/pod-security-policy/#volumes-and-file-systems)中的`ReadOnlyRootFilesystem`策略。  
类型：布尔值  
必需：否  
`runAsGroup`  
指定此参数时，容器将作为指定的组 ID (`gid`) 运行。如果未指定此参数，则默认为映像元数据中指定的群组。该参数映射到*Kubernetes文档*中[用户和群组容器组（pod）安全策略](https://kubernetes.io/docs/concepts/security/pod-security-policy/#users-and-groups)中的`RunAsGroup`和`MustRunAs`策略。  
类型：长整型  
必需：否  
`runAsNonRoot`  
指定此参数时，容器是以`uid`用户（非 0）身份运行的。如果未指定此参数，则会强制执行此规则。该参数映射到*Kubernetes文档*中[用户和群组容器组（pod）安全策略](https://kubernetes.io/docs/concepts/security/pod-security-policy/#users-and-groups)中的`RunAsUser`和`MustRunAsNonRoot`策略。  
类型：长整型  
必需：否  
`runAsUser`  
指定此参数时，容器将作为指定的用户 ID (`uid`) 运行。如果未指定此参数，则默认为映像元数据中指定的用户。该参数映射到*Kubernetes文档*中[用户和群组容器组（pod）安全策略](https://kubernetes.io/docs/concepts/security/pod-security-policy/#users-and-groups)中的`RunAsUser`和`MustRanAs`策略。  
类型：长整型  
必需：否  
`volumeMounts`  
用于 Amazon EKS 作业容器的卷挂载。有关Kubernetes中卷和卷挂载的更多信息，请参阅*Kubernetes文档*中的[卷](https://kubernetes.io/docs/concepts/storage/volumes/)。  
类型：[EksContainerVolumeMount](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksContainerVolumeMount.html) 对象数组  
必需：否    
`mountPath`  
挂载卷的容器上的路径。  
类型：字符串  
必需：否  
`name`  
卷挂载的名称。这必须与容器组中其中一个卷的名称相匹配。  
类型：字符串  
必需：否  
`readOnly`  
如果此值为`true`，则容器具有对卷的只读访问权。否则，容器可以写入卷。默认值为 `false`。  
类型：布尔值  
必需：否  
`dnsPolicy`  
容器组的 DNS 策略。默认值为 `ClusterFirst`。如果未指定`hostNetwork`参数，则默认值为`ClusterFirstWithHostNet`。`ClusterFirst`指示任何与配置的集群域后缀不匹配的 DNS 查询都将转发到继承自节点的上游名称服务器。如果在 [RegisterJobDefinition](https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html) API 操作中没有为 `dnsPolicy` 指定任何值，那么 [DescribeJobDefinitions](https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeJobDefinitions.html) 或 [DescribeJobs](https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeJobs.html) API 操作都不会为 `dnsPolicy` 返回任何值。容器组规格设置将包含`ClusterFirst`或`ClusterFirstWithHostNet`，具体取决于`hostNetwork`参数的值。有关更多信息，请参阅*Kubernetes文档*中的[容器组（pod）的 DNS 策略](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-s-dns-policy)。  
有效值：`Default` \$1`ClusterFirst` \$1`ClusterFirstWithHostNet`  
类型：字符串  
必需：否  
`hostNetwork`  
指示容器组是否使用主机的网络 IP 地址。默认值为 `true`。将其设置为`false`将启用Kubernetes容器组（pod）联网模型。大多数AWS Batch工作负载为仅出口，不需要为传入连接的每个容器组分配 IP 的开销。有关更多信息，请参阅*Kubernetes文档*中的[主机命名空间](https://kubernetes.io/docs/concepts/security/pod-security-policy/#host-namespaces)和[容器组（pod）网络](https://kubernetes.io/docs/concepts/workloads/pods/#pod-networking)。  
类型：布尔值  
必需：否  
`serviceAccountName`  
用于运行容器组的服务账户的名称。有关更多信息，请参阅*《Amazon EKS 用户指南》*中的[Kubernetes服务账户](https://docs.aws.amazon.com/eks/latest/userguide/service-accounts.html)和[配置Kubernetes服务账户以代入 IAM 角色](https://docs.aws.amazon.com/eks/latest/userguide/associate-service-account-role.html)，以及*Kubernetes文档*中的[为容器组（pod）配置服务账号](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/)。  
类型：字符串  
必需：否  
`volumes`  
为使用 Amazon EKS 资源的作业定义指定卷。  
类型：[EksVolume](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksVolume.html) 对象数组  
必需：否    
emptyDir  
指定Kubernetes `emptyDir`卷的配置。将容器组分配给节点时，会先创建`emptyDir`卷。只要容器组（pod）在该节点上运行，该卷就会存在。`emptyDir` 卷最初是空的。容器组中的所有容器都可以读取和写入`emptyDir`卷中的文件。但是，`emptyDir`卷可以挂载在每个容器中的相同或不同的路径上。出于任何原因将容器组从节点中移除时，将永久删除`emptyDir`中的数据。有关更多信息，请参阅*Kubernetes文档*中的 [emptyDir](https://kubernetes.io/docs/concepts/storage/volumes/#emptydir)。  
类型：[EksEmptyDir](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksEmptyDir.html) 对象  
必需：否    
medium  
存储卷的介质。默认值为空字符串，该字符串使用节点的存储。    
""  
**（默认）**使用节点的磁盘存储。  
“Memory”  
使用由节点 RAM 支持的`tmpfs`卷。节点重新启动时，卷的内容会丢失，并且该卷上的任何存储都将计入容器的内存限制。
类型：字符串  
必需：否  
sizeLimit  
卷的最大大小。默认情况下，未定义最大大小。  
类型：字符串  
长度限制：最小长度为 1。最大长度为 256。  
必需：否  
hostPath  
指定Kubernetes `hostPath`卷的配置。`hostPath`卷将主机节点文件系统中的现有文件或目录挂载到容器组中。有关更多信息，请参阅*Kubernetes文档*中的 [hostPath](https://kubernetes.io/docs/concepts/storage/volumes/#hostpath)。  
类型：[EksHostPath](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksHostPath.html) 对象  
必需：否    
path  
主机上要挂载到容器组中的文件或目录的路径。  
类型：字符串  
必需：否  
名称  
卷的名称。必须允许该名称作为 DNS 子域名。有关更多信息，请参阅*Kubernetes文档*中的 [DNS 子域名](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#dns-subdomain-names)。  
类型：字符串  
必需：是  
secret  
指定Kubernetes `secret`卷的配置。有关更多信息，请参阅*Kubernetes文档*中的[密文](https://kubernetes.io/docs/concepts/storage/volumes/#secret)。  
类型：[EksSecret](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksSecret.html) 对象  
必需：否    
optional  
指定是否必须定义密文或密文的密钥。  
类型：布尔值  
必需：否  
secretName  
密文的名称。必须允许该名称作为 DNS 子域名。有关更多信息，请参阅*Kubernetes文档*中的 [DNS 子域名](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#dns-subdomain-names)。  
类型：字符串  
必需：是

## 平台功能
<a name="job-definition-parameters-platform-capabilities"></a>

`platformCapabilities`  
作业定义所需的平台功能。如果未指定任何值，则默认为`EC2`。对于在 Fargate 资源上运行的作业，指定了`FARGATE`。  
如果作业在 Amazon EKS 资源上运行，则不得指定`platformCapabilities`。
类型：字符串  
有效值：`EC2` \$1 `FARGATE`  
必需：否

## 传播标签
<a name="job-definition-parameters-propagate-tags"></a>

`propagateTags`  
指定是否将标签从作业或作业定义传播到相应的 Amazon ECS 任务。如果未指定任何值，则不会传播标签。只能在创建任务后将标签传播到任务。对于名称相同的标签，作业标签的优先级高于作业定义标签。如果作业和作业定义的组合标签总数超过 50 个，则作业将转为`FAILED`状态。  
如果作业在 Amazon EKS 资源上运行，则不得指定`propagateTags`。
类型：布尔值  
必需：否

## 节点属性
<a name="nodeProperties"></a>

`nodeProperties`  
注册多节点并行作业定义时，必须指定节点属性的列表。这些节点属性定义了作业中要使用的节点数量、主节点索引以及要使用的不同节点范围。如果作业在 Fargate 资源上运行，则不能指定`nodeProperties`。请改用`containerProperties`。作业定义中允许使用以下节点属性。有关更多信息，请参阅 [多节点并行作业](multi-node-parallel-jobs.md)。  
如果作业在 Amazon EKS 资源上运行，则不得指定`nodeProperties`。
类型：[NodeProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_NodeProperties.html) 对象  
必需：否    
`mainNode`  
指定多节点并行作业的主节点的节点索引。此节点索引值必须小于节点数。  
类型：整数  
必需：是  
`numNodes`  
与多节点并行任务关联的节点数。  
类型：整数  
必需：是  
`nodeRangeProperties`  
与多节点并行作业关联的节点范围及其属性的列表。  
节点组即共享相同容器属性的一组完全相同的作业节点。您可以使用 AWS Batch 为每个作业指定最多五个不同的节点组。
类型：[NodeRangeProperty](https://docs.aws.amazon.com/batch/latest/APIReference/API_NodeRangeProperty.html) 对象数组  
必需：是    
`targetNodes`  
节点范围（使用节点索引值）。`0:3`范围表示索引值为 `0` 到 `3` 的节点。如果省略起始范围值 (`:n`)，则使用 0 开始范围。如果省略结束范围值 (`n:`)，则使用可能的最高节点索引结束范围。累积节点范围必须考虑所有节点 (`0:n`)。可以嵌套节点范围，例如`0:10`和`4:5`。在这种情况下，`4:5`范围属性会覆盖`0:10`属性。  
类型：字符串  
必需：否  
`container`  
节点范围的容器详细信息。有关更多信息，请参阅 [容器属性](#containerProperties)。  
类型：[ContainerProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_ContainerProperties.html) 对象   
必需：否

## 重试策略
<a name="retryStrategy"></a>

`retryStrategy`  
在注册作业定义时，针对使用此作业定义提交的失败作业，可以选择性地指定要用于这些作业的重试策略。在 [SubmitJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html) 操作期间，指定的任何重试策略都将覆盖此处定义的重试策略。默认情况下，每个作业尝试一次。如果指定多次尝试，则在作业失败的情况下，则会重试该作业。失败尝试的示例包括：作业返回非零退出代码或容器实例终止。有关更多信息，请参阅 [自动作业重试](job_retries.md)。  
类型：[RetryStrategy](https://docs.aws.amazon.com/batch/latest/APIReference/API_RetryStrategy.html) 对象  
必需：否    
`attempts`  
让作业进入`RUNNABLE`状态的次数。可以指定 1 到 10 之间的尝试次数。如果`attempts`大于 1，则当作业失败时将重试多次，直到它进入`RUNNABLE`状态。  

```
"attempts": integer
```
类型：整数  
必需：否  
`evaluateOnExit`  
最多由 5 个对象组成的数组，指定了在哪些条件下重试作业或作业失败。如果指定了此参数，则还必须指定`attempts`参数。如果指定了`evaluateOnExit`但没有匹配的条目，则会重试该作业。  

```
"evaluateOnExit": [
   {
      "action": "string",
      "onExitCode": "string",
      "onReason": "string",
      "onStatusReason": "string"
   }
]
```
类型：[EvaluateOnExit](https://docs.aws.amazon.com/batch/latest/APIReference/API_EvaluateOnExit.html) 对象数组  
必需：否    
`action`  
指定在满足所有指定条件（`onStatusReason`、`onReason`和`onExitCode`）时要执行的操作。这些值不区分大小写。  
类型：字符串  
必需：是  
有效值：`RETRY` \$1 `EXIT`  
`onExitCode`  
包含 glob 模式，用于与作业返回的`ExitCode`十进制表示法进行匹配。模式最多可包含 512 个字符。其中只能包含数字。不能包含字母或特殊字符。可以选择以星号 (\$1) 结束，这样只有字符串的开头需要完全匹配。  
类型：字符串  
必需：否  
`onReason`  
包含 glob 模式，用于与作业返回的`Reason`进行匹配。模式最多可包含 512 个字符。可以包含字母、数字、句点 (.)、冒号 (:) 和空格（空格、制表符）。可以选择以星号 (\$1) 结束，这样只有字符串的开头需要完全匹配。  
类型：字符串  
必需：否  
`onStatusReason`  
包含 glob 模式，用于与作业返回的`StatusReason`进行匹配。模式最多可包含 512 个字符。可以包含字母、数字、句点 (.)、冒号 (:) 和空格（空格、制表符）。可以选择以星号 (\$1) 结束，这样只有字符串的开头需要完全匹配。  
类型：字符串  
必需：否

## 计划优先级
<a name="job-definition-parameters-schedulingPriority"></a>

`schedulingPriority`  
使用此作业定义提交的作业的计划优先级。此项仅影响具有公平份额策略的作业队列中的作业。具有较高计划优先级的作业在具有较低计划优先级的作业之前计划。  
支持的最小值为 0，支持的最大值为 9999。  
类型：整数  
必需：否

## Tags
<a name="job-definition-parameters-tags"></a>

`tags`  
与作业定义关联的键值配对标签。有关更多信息，请参阅 [标记 AWS Batch 资源](using-tags.md)。  
类型：字符串到字符串映射  
必需：否

## Timeout
<a name="timeout"></a>

`timeout`  
可以为作业配置超时时间，以便在某个作业运行的时间超过超时时间时让AWS Batch终止该作业。有关更多信息，请参阅 [作业超时](job_timeouts.md)。如果作业是因超时而终止，则不会重试。在 [SubmitJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html) 操作期间指定的任何超时配置将覆盖此处定义的超时配置。有关更多信息，请参阅 [作业超时](job_timeouts.md)。  
类型：[JobTimeout](https://docs.aws.amazon.com/batch/latest/APIReference/API_JobTimeout.html) 对象  
必需：否    
`attemptDurationSeconds`  
`startedAt`终止未完成作业后的持续时间（从作业尝试的AWS Batch时间戳开始计算），以秒为单位。超时时间的最小值为 60 秒。  
对于数组作业，超时适用于子作业，不适用于父数组作业。  
对于多节点并行（MNP）作业，超时适用于整个作业，不适用于单个节点。  
类型：整数  
必需：否