

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

# 作业定义示例
<a name="example-job-definitions"></a>

以下主题中的作业定义示例展示了如何使用环境变量、参数替换和卷挂载等常用模式。

**Topics**
+ [

# 环境变量
](example-use-envvars.md)
+ [

# 参数替换
](example-use-parameters.md)
+ [

# 测试 GPU 功能
](example-test-gpu.md)
+ [

# 多节点并行作业
](example-mnp-job-definition.md)

# 环境变量
<a name="example-use-envvars"></a>

以下作业定义示例使用环境变量来指定文件类型和 Amazon S3 URL。该特定示例来自[创建简单的“Fetch & Run”AWS Batch 作业](https://aws.amazon.com/blogs/compute/creating-a-simple-fetch-and-run-aws-batch-job/)计算博客文章。博客文章中描述的[https://github.com/awslabs/aws-batch-helpers/blob/master/fetch-and-run/fetch_and_run.sh](https://github.com/awslabs/aws-batch-helpers/blob/master/fetch-and-run/fetch_and_run.sh)脚本使用这些环境变量从 S3 下载`myjob.sh`脚本并声明其文件类型。

尽管在本示例中，命令和环境变量被硬编码到作业定义中，但仍可指定命令和环境变量覆盖，使作业定义更具通用性。

```
{
    "jobDefinitionName": "fetch_and_run",
    "type": "container",
    "containerProperties": {
        "image": "123456789012.dkr.ecr.us-east-1.amazonaws.com/fetch_and_run",
        "resourceRequirements": [
            {
                "type": "MEMORY",
                "value": "2000"
            },
            {
                "type": "VCPU",
                "value": "2"
            }
        ],
        "command": [
            "myjob.sh",
            "60"
        ],
        "jobRoleArn": "arn:aws:iam::123456789012:role/AWSBatchS3ReadOnly",
        "environment": [
            {
                "name": "BATCH_FILE_S3_URL",
                "value": "s3://amzn-s3-demo-source-bucket/myjob.sh"
            },
            {
                "name": "BATCH_FILE_TYPE",
                "value": "script"
            }
        ],
        "user": "nobody"
    }
}
```

# 参数替换
<a name="example-use-parameters"></a>

以下示例作业定义说明了如何允许参数替代和设置默认值。

`Ref::`一节中的`command`声明用于设置参数替代的占位符。提交使用此作业定义的作业时，可以指定参数覆盖以填充这些值，例如`inputfile`和`outputfile`。下面的`parameters`一节设置了`codec`默认值，但可以根据需要覆盖该参数。

有关更多信息，请参阅 [Parameters](job_definition_parameters.md#parameters)。

```
{
    "jobDefinitionName": "ffmpeg_parameters",
    "type": "container",
    "parameters": {"codec": "mp4"},
    "containerProperties": {
        "image": "my_repo/ffmpeg",
        "resourceRequirements": [
            {
                "type": "MEMORY",
                "value": "2000"
            },
            {
                "type": "VCPU",
                "value": "2"
            }
        ],
        "command": [
            "ffmpeg",
            "-i",
            "Ref::inputfile",
            "-c",
            "Ref::codec",
            "-o",
            "Ref::outputfile"
        ],
        "jobRoleArn": "arn:aws:iam::123456789012:role/ECSTask-S3FullAccess",
        "user": "nobody"
    }
}
```

# 测试 GPU 功能
<a name="example-test-gpu"></a>

在以下示例中，作业定义测试[使用 GPU 工作负载 AMI](batch-gpu-ami.md)中所述的 GPU 工作负载 AMI 是否正确配置。此示例作业定义运行来自 GitHub 的 Tensorflow deep MNIST 分类器[示例](https://github.com/tensorflow/tensorflow/blob/r1.8/tensorflow/examples/tutorials/mnist/mnist_deep.py)。

```
{
    "containerProperties": {
        "image": "tensorflow/tensorflow:1.8.0-devel-gpu",
        "resourceRequirements": [
            {
                "type": "MEMORY",
                "value": "32000"
            },
            {
                "type": "VCPU",
                "value": "8"
            }
        ],
        "command": [
            "sh",
            "-c",
            "cd /tensorflow/tensorflow/examples/tutorials/mnist; python mnist_deep.py"
        ]
    },
    "type": "container",
    "jobDefinitionName": "tensorflow_mnist_deep"
}
```

可以创建名为`tensorflow_mnist_deep.json`的文件来包含上面的 JSON 文本，然后使用以下命令注册AWS Batch作业定义：

```
aws batch register-job-definition --cli-input-json file://tensorflow_mnist_deep.json
```

# 多节点并行作业
<a name="example-mnp-job-definition"></a>

以下作业定义示例描述了多节点并行作业。有关更多信息，请参阅*AWS计算*博客中的[使用多节点并行作业构建紧密耦合AWS Batch的分子动力学工作流程](https://aws.amazon.com/blogs/compute/building-a-tightly-coupled-molecular-dynamics-workflow-with-multi-node-parallel-jobs-in-aws-batch/)。

```
{
  "jobDefinitionName": "gromacs-jobdef",
  "jobDefinitionArn": "arn:aws:batch:us-east-2:123456789012:job-definition/gromacs-jobdef:1",
  "revision": 6,
  "status": "ACTIVE",
  "type": "multinode",
  "parameters": {},
  "nodeProperties": {
    "numNodes": 2,
    "mainNode": 0,
    "nodeRangeProperties": [
      {
        "targetNodes": "0:1",
        "container": {
          "image": "123456789012.dkr.ecr.us-east-2.amazonaws.com/gromacs_mpi:latest",
          "resourceRequirements": [
              {
                  "type": "MEMORY",
                  "value": "24000"
              },
              {
                  "type": "VCPU",
                  "value": "8"
              }
          ],
          "command": [],
          "jobRoleArn": "arn:aws:iam::123456789012:role/ecsTaskExecutionRole",
          "ulimits": [],
          "instanceType": "p3.2xlarge"
        }
      }
    ]
  }
}
```