

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

# 使用 Amazon EC2 启动模板和 Amazon Batch
<a name="launch-templates"></a>

Amazon Batch 支持在您的 EC2 计算环境中使用 Amazon EC2 启动模板。使用启动模板，您可以修改 Amazon Batch 计算资源的默认配置，而无需创建自定义配置 AMIs。

启动模板 AMIs 可以在 AMI 选择顺序中指定优先顺序。有关更多信息，请参阅 [AMI 选择顺序](ami-selection-order.md)。

**注意**  
当您为 Amazon Batch 计算环境指定自定义启动模板时， Amazon Batch 不会将启动模板直接附加到底层 Auto Scaling 组。而是为 Auto Scaling 组 Amazon Batch 创建一个单独的、由批处理管理的启动模板，并将自定义启动模板中的相关设置合并到该模板中。因此，您看到的与 Auto Scaling 组关联的启动模板与您最初指定的启动模板不同。这是预料之中的行为。

**注意**  
F Amazon argate 资源不支持启动模板。

您必须先创建启动模板，然后才能将其与计算环境关联。您可以在 Amazon EC2 控制台创建启动模板。或者，您可以使用 Amazon CLI 或 S Amazon DK。例如，以下 JSON 文件表示一个启动模板，该模板可调整默认 Amazon Batch 计算资源 AMI 的 Docker 数据量的大小，并将其设置为加密。

```
{
    "LaunchTemplateName": "increase-container-volume-encrypt",
    "LaunchTemplateData": {
        "BlockDeviceMappings": [
            {
                "DeviceName": "/dev/xvda",
                "Ebs": {
                    "Encrypted": true,
                    "VolumeSize": 100,
                    "VolumeType": "gp2"
                }
            }
        ]
    }
}
```

您可以通过将 JSON 保存到调用的文件中`lt-data.json`并运行以下 Amazon CLI 命令来创建之前的启动模板。

```
aws ec2 --region <region> create-launch-template --cli-input-json file://lt-data.json
```

有关启动模板的更多信息，请参阅《Amazon EC2 用户指南》**中的[从启动模板启动实例](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2-launch-templates.html)。

如果使用启动模板来创建计算环境，则可以将以下现有计算环境参数移至启动模板：

**注意**  
假设在启动模板和计算环境配置中同时指定其中任意参数（Amazon EC2 标签除外）。然后，计算环境参数优先。Amazon EC2 标签在启动模板和计算环境配置之间合并。如果标签键发生冲突，则计算环境配置中的值优先。
+ Amazon EC2 密钥对
+ Amazon EC2 AMI ID
+ 安全组 IDs
+ Amazon EC2 标签

以下启动模板参数将被**忽略** Amazon Batch：
+ 实例类型（在创建计算环境时指定所需的实例类型）
+ 实例角色（在创建计算环境时指定所需的实例角色）
+ 网络接口子网（在创建计算环境时指定所需的子网）
+ 实例市场选项（Amazon Batch 必须控制竞价型实例配置）
+ 禁用 API 终止（Amazon Batch 必须控制实例生命周期）

Amazon Batch 仅在基础架构更新期间使用新的启动模板版本更新启动模板。有关更多信息，请参阅 [更新中的计算环境 Amazon Batch](updating-compute-environments.md)。

## 默认启动模板和覆盖启动模板
<a name="default-lt-and-overrides"></a>

您可以为计算环境定义默认启动模板，并为特定实例类型和系列定义覆盖启动模板。这可能会非常实用，因此计算环境中的大多数实例类型都使用默认模板。

可以使用替换变量 `$Default` 和 `$Latest`，而不指定特定的版本。如果未提供覆盖启动模板，则会自动应用默认启动模板。

如果您使用`$Default`或`$Latest`变量，则 Amazon Batch 将在创建计算环境时应用当前信息。如果 future 的默认版本或最新版本发生变化，则必须通过[UpdateComputeEnvironment](https://docs.amazonaws.cn/batch/latest/APIReference/API_UpdateComputeEnvironment.html)或通过 Amazon Web Services 管理控制台 -来更新信息 Amazon Batch。

为提供更好的灵活性，您可以定义将应用于特定计算实例类型或系列的覆盖启动模板。

**注意**  
您最多可以为每个计算环境指定十（10）个覆盖启动模板。

使用 `targetInstanceTypes` 参数来选择应使用此覆盖启动模板的实例类型或系列。实例类型或系列必须首先由 [https://docs.amazonaws.cn/batch/latest/APIReference/API_ComputeResource.html#Batch-Type-ComputeResource-instanceTypes](https://docs.amazonaws.cn/batch/latest/APIReference/API_ComputeResource.html#Batch-Type-ComputeResource-instanceTypes) 参数标识。

如果您定义了覆盖启动模板，后来决定将其移除，则可以在 [https://docs.amazonaws.cn/batch/latest/APIReference/API_LaunchTemplateSpecification.html](https://docs.amazonaws.cn/batch/latest/APIReference/API_LaunchTemplateSpecification.html) API 操作中传递一个空数组来取消设置 [https://docs.amazonaws.cn/batch/latest/APIReference/API_LaunchTemplateSpecification.html#Batch-Type-LaunchTemplateSpecification-overrides](https://docs.amazonaws.cn/batch/latest/APIReference/API_LaunchTemplateSpecification.html#Batch-Type-LaunchTemplateSpecification-overrides) 参数。您也可以选择在提交 `UpdateComputeEnvironment` API 操作时不包含 `overrides` 参数。欲了解更多信息，请参阅 [https://docs.amazonaws.cn/batch/latest/APIReference/API_LaunchTemplateSpecification.html#Batch-Type-LaunchTemplateSpecification-overrides](https://docs.amazonaws.cn/batch/latest/APIReference/API_LaunchTemplateSpecification.html#Batch-Type-LaunchTemplateSpecification-overrides)

有关更多信息，请参阅 Amazon Batch API 参考指南[https://docs.amazonaws.cn/batch/latest/APIReference/API_LaunchTemplateSpecificationOverride.html#Batch-Type-LaunchTemplateSpecificationOverride-targetInstanceTypes](https://docs.amazonaws.cn/batch/latest/APIReference/API_LaunchTemplateSpecificationOverride.html#Batch-Type-LaunchTemplateSpecificationOverride-targetInstanceTypes)中的。

## 启动模板中的 Amazon EC2 用户数据
<a name="lt-user-data"></a>

在启动实例时，您可以使用由[cloud-init](https://cloudinit.readthedocs.io/en/latest/index.html)运行的启动模板中提供 Amazon EC2 用户数据。您的用户数据可以执行常见的配置方案，包括但不限于：
+ [包含用户或组](https://cloudinit.readthedocs.io/en/latest/topics/examples.html#including-users-and-groups)
+ [安装程序包](https://cloudinit.readthedocs.io/en/latest/topics/examples.html#install-arbitrary-packages)
+ [创建分区和文件系统](https://cloudinit.readthedocs.io/en/latest/topics/examples.html#create-partitions-and-filesystems)

启动模板中用于托管节点组的 Amazon EC2 用户数据必须采用 [MIME 分段归档](https://cloudinit.readthedocs.io/en/latest/topics/format.html#mime-multi-part-archive)格式。这是因为您的用户数据与配置计算资源所需的其他 Amazon Batch 用户数据合并。您可以将多个用户数据块合并到一个 MIME 分段文件中。例如，您可能希望将配置 Docker 进程守护程序的云 boothook 与为 Amazon ECS 容器代理写入配置信息的用户数据 Shell 脚本合并。

如果您正在使用 Amazon CloudFormation，则该[AWS::CloudFormation::Init](https://docs.amazonaws.cn/AWSCloudFormation/latest/UserGuide/aws-resource-init.html)类型可以与 [cfn-in](https://docs.amazonaws.cn/AWSCloudFormation/latest/UserGuide/cfn-init.html) it 帮助脚本一起使用以执行常见的配置场景。

MIME 分段文件包含以下组成部分：
+ 内容类型和段边界声明：`Content-Type: multipart/mixed; boundary="==BOUNDARY=="`
+ MIME 版本声明：`MIME-Version: 1.0`
+ 一个或多个用户数据块，其包含以下组成部分：
  + 开口边界，表示用户数据块的开头：`--==BOUNDARY==`必须将此边界之前的行留空。
  + 数据块的内容类型声明：`Content-Type: text/cloud-config; charset="us-ascii"`。有关内容类型的更多信息，请参阅 [Cloud-Init 文档](https://cloudinit.readthedocs.io/en/latest/topics/format.html)。必须将内容类型声明之后的行留空。
  + 用户数据的内容，例如，Shell 命令或 `cloud-init` 指令的列表。
+ 封闭边界，表示 MIME 分段文件的结尾：`--==BOUNDARY==--`必须将此闭合边界之前的行留空。

**注意**  
如果将用户数据添加到 Amazon EC2 控制台中的启动模板，则可以将其作为纯文本粘贴或从文件进行上载。或者，您可以从文件上传它。如果您使用 Amazon CLI 或 Amazon SDK，则必须先对用户数据进行`base64`编码，然后在调用时将该字符串作为`UserData`参数值提交 [CreateLaunchTemplate](https://docs.amazonaws.cn/AWSEC2/latest/APIReference/API_CreateLaunchTemplate.html)，如此 JSON 文件所示。  

```
{
    "LaunchTemplateName": "base64-user-data",
    "LaunchTemplateData": {
        "UserData": "ewogICAgIkxhdW5jaFRlbXBsYXRlTmFtZSI6ICJpbmNyZWFzZS1jb250YWluZXItdm9sdW..."
    }
}
```

**Topics**
+ [默认启动模板和覆盖启动模板](#default-lt-and-overrides)
+ [启动模板中的 Amazon EC2 用户数据](#lt-user-data)
+ [参考：Amazon EC2 启动模板示例](launch-template-examples.md)