

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

# 在 Amazon EC2 资源上创建单节点作业定义
<a name="create-job-definition-EC2"></a>

完成以下步骤，在 Amazon Elastic Compute Cloud（Amazon EC2）资源上创建单节点作业定义。

**要在 Amazon EC2 资源上创建新的作业定义，请执行以下操作：**

1. 打开 AWS Batch 控制台，网址为[https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/)。

1. 从导航栏中选择 AWS 区域 要使用的。

1. 在左侧导航窗格中，选择**作业定义**。

1. 选择**创建**。

1. 对于**编排类型**，选择 **Amazon Elastic Compute Cloud (Amazon EC2)**。

1. 对于 **EC2 平台配置**，请关闭**启用多节点并行**处理。

1. 对于**名称**，为您的作业定义输入唯一名称。名称长度不超过 128 个字符。可以包含大小写字母、数字、连字符（-）和下划线（\$1）。

1. （可选）对于**执行超时**，输入超时值（以秒为单位）。执行超时是指未完成的作业终止之前的时间长度。如果某次尝试超过了超时时间，该尝试将停止，状态将转为 `FAILED`。有关更多信息，请参阅 [作业超时](job_timeouts.md)。最小值为 60 秒。

1. （可选）开启**计划优先级**。输入介于 0 到 100 之间的计划优先级值。值越高，优先级越高。

1. （可选）对于**作业尝试**，请输入 AWS Batch 尝试将作业移至 `RUNNABLE` 状态的次数。请输入 1 到 10 之间的数字。

1. （可选）对于**重试策略条件**，选择**退出时添加评估**。至少输入一个参数值，然后选择一个**操作**。对于每组条件，必须将**操作**设置为**重试**或**退出**。这些操作意味着以下几点：
   + **重试** — AWS Batch 重试，直到达到您指定的任务尝试次数。
   + **退出** — AWS Batch 停止重试作业。
**重要**  
如果选择**退出时添加评估**，则必须至少配置一个参数并选择一个**操作**或选择**退出时移除评估**。

1. （可选）展开 **标签**，然后选择**添加标签**以向资源添加标签。输入键和可选的值，然后选择**添加标签**。

1. （可选）开启 **传播标签**将标签从作业和作业定义传播到 Amazon ECS 任务。

1. 选择**下一页**。

1. 在**容器配置**部分：

   1. 对于**映像**，选择要用于您的作业的 Docker 映像。默认情况下，Docker Hub 注册表中的映像可用。也可以使用`repository-url/image:tag`指定其他存储库。名称长度不超过 225 个字符。可以包含大小写字母、数字、连字符（-）、下划线（\$1）、冒号（:）、正斜杠（/）和数字符号（\$1）。此参数可映射到 [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`）进行进一步限定。

   1. 对于**命令**，将命令的等效 **JSON** 字符串数组输入到该字段中。

      此参数映射到 [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`参数的更多信息，请参阅 reference [https://docs.docker.com/engine//builder/ \$1cmd](https://docs.docker.com/engine/reference/builder/#cmd)。
**注意**  
您可以在命令中使用参数替代默认值和占位符。有关更多信息，请参阅 [Parameters](job_definition_parameters.md#parameters)。

   1. （可选）对于**执行角色**，请指定一个 IAM 角色，该角色授予 Amazon ECS 容器代理代表您进行 AWS API 调用的权限。此功能使用 Amazon ECS IAM 角色执行任务。有关更多信息，请参阅 *Amazon Elastic Container Service 开发人员指南*中的 [Amazon ECS 任务执行 IAM 角色](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html)。

   1. 要**配置 Job 角色**，请选择有权访问的 IAM 角色 AWS APIs。此功能使用 Amazon ECS IAM 角色执行任务。有关更多信息，请参阅 *Amazon Elastic Container Service 开发人员指南*中的[任务的 IAM 角色](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)。
**注意**  
此处仅显示具有 **Amazon Elastic Container Service Task Role** 信任关系的角色。有关为您的 AWS Batch 任务创建 IAM 角色的更多信息，请参阅 A *mazon Elastic Container 服务开发者指南*[中的为任务创建 IAM 角色和策略](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html#create_task_iam_policy_and_role)。

1. 对于**参数**，选择**添加参数**以添加参数替换占位符，作为**键**（可选的）**值**对。

1. 在**环境配置**部分：

   1. 对于 **v CPUs**，输入CPUs 要为容器保留的 v 数。此参数将映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[创建容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)部分中的`CpuShares`以及[https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)的`--cpu-shares`选项。每个 vCPU 相当于 1024 个 CPU 份额。您必须指定至少一个 vCPU。

   1. 对于**内存**，输入容器可用的内存限制。如果您的容器尝试使用超出您在此处指定的内存量，该容器将会被终止。此参数将映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[创建容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)部分中的`Memory`以及[https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/)的`--memory`选项。您必须为作业指定至少 4 MiB 内存。
**注意**  
要最大限度地提高资源利用率，请为特定实例类型的作业确定内存优先级。有关更多信息，请参阅 [计算资源内存管理](memory-management.md)。

   1. 在 “**数量**” 中 GPUs，选择 GPUs 要为集装箱保留的数量。

   1. （可选）对于**环境变量**，选择**添加环境变量**以名称-值对的形式添加环境变量。这些变量传递给容器。

   1. （可选）对于**密钥**，选择**添加密钥**，将密钥添加为名称-值对。这些密钥暴露在容器中。[欲了解更多信息，请参阅：LogConfiguration秘密选项。](https://docs.aws.amazon.com/batch/latest/APIReference/API_LogConfiguration.html#Batch-Type-LogConfiguration-secretOptions)

1. 选择**下一页**。

1. 在 **Linux 配置**部分中：

   1. 对于 **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`选项。

   1. （可选）要授予作业容器对主机实例（类似于 `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`选项。

   1. （可选）开启**启用 Init 处理**以在容器内运行 `init` 进程。该进程转发信号和获得进程。

1. （可选）在**文件系统配置**部分：

   1. 开启**启用只读文件系统**以移除对卷的写入权限。

   1. 在**共享内存大小**中，输入 `/dev/shm` 卷的大小（以 MiB 为单位）。

   1. 在**最大交换大小**中，输入容器可使用的总交换内存量（以 MiB 为单位）。

   1. 在 **Swappiness** 中输入一个介于 0 和 100 之间的值，以指示容器的 swappiness 行为。如果不指定值且启用了交换，则值默认值为 60。[有关更多信息，请参阅:交换性LinuxParameters。](https://docs.aws.amazon.com/batch/latest/APIReference/API_LinuxParameters.html#Batch-Type-LinuxParameters-swappiness)

   1. （可选）展开**其他配置**。

   1. （可选）对于 **Tmpfs**，请选择**添加 tmpfs** 以添加 `tmpfs` 挂载。

   1. （可选）对于**设备**，选择**添加设备**以添加设备：

      1. 对于**容器路径**，指定容器实例中的路径以公开映射到主机实例的设备。如果将其留空，则在容器中使用主机路径。

      1. 对于**主机路径**，指定主机实例中设备的路径。

      1. 对于**权限**，选择要应用于设备的一个或多个权限。可用权限包括**读取**、**写入**和 **MKNOD**。

   1. （可选）对于**卷配置**，请选择**添加卷**以创建要传递到容器的卷列表。输入卷的**名称**和**源路径**，然后选择**添加卷**。您也可以选择开启**启用 EFS**。

   1. （可选）对于**挂载点**，请选择**添加挂载点配置**以添加数据卷的挂载点。您必须指定源卷和容器路径。这些挂载点会传递到容器实例上的 Docker daemon。您也可以选择将卷设为**只读**。

   1. （可选）对于 **Ulimits 配置**，请选择**添加 ulimit** 为容器添加一个 `ulimits` 值。输入**名称**、**软限制**和**硬限制**值，然后选择**添加 ulimit**。

1. 在**任务属性**部分中：

   1. 对于**执行角色（视情况而定**），选择一个角色以允许 Amazon ECS 代理代表您进行 AWS API 调用。有关创建**执行角色**的更多信息，请参阅[教程：创建 IAM 执行角色](create-execution-role.md)。

   1. 选择**启用 ECS execute 命令**，以实现直接访问 Amazon ECS 容器 Shell 并绕过主机操作系统。必须选择一个**任务角色**。
**重要**  
**ECS execute** 命令要求文件系统是可写的。

   1. 对于**任务角色**，选择一个 Amazon ECS 身份和访问管理 (IAM) Access Management 角色以允许容器代表 AWS 您进行 API 调用。有关更多信息，请参阅《Amazon Elastic Container Service 开发人员指南》中的 [Amazon ECS 任务 IAM 角色](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html)**。

1. （可选）在**日志记录配置**部分：

   1. 对于**日志驱动程序**，请选择要使用的日志驱动程序。[有关可用日志驱动程序的更多信息，请参阅:LogConfigurationlogDriver。](https://docs.aws.amazon.com/batch/latest/APIReference/API_LogConfiguration.html#Batch-Type-LogConfiguration-logDriver)
**注意**  
默认情况下，使用 `awslogs` 日志驱动程序。

   1. 在**选项**中，选择**添加选项**以添加选项。输入名称-值对，然后选择**添加选项**。

   1. 对于**密钥**，选择**添加密钥**。输入名称-值对，然后选择**添加密钥**以添加密钥。
**提示**  
[欲了解更多信息，请参阅：LogConfiguration秘密选项。](https://docs.aws.amazon.com/batch/latest/APIReference/API_LogConfiguration.html#Batch-Type-LogConfiguration-secretOptions)

1. 选择**下一页**。

1. 对于**作业定义查看**，请查看配置步骤。如果需要进行更改，请选择 **Edit**（编辑）。完成后，选择**创建作业定义**。