

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

# 构建自定义 AWS ParallelCluster AMI
<a name="tutorials_02_ami_customization"></a>

**重要**  
我们不建议将构建自定义 AMI 作为自定义 AWS ParallelCluster的方法。  
这是因为，在您构建自己的 AMI 之后，您将不再收到未来版本的更新或错误修复 AWS ParallelCluster。此外，如果您构建自定义 AMI，则必须在每个新 AWS ParallelCluster 版本中重复创建自定义 AMI 时所用的步骤。

在进一步阅读之前，我们建议您先查看 “[自定义引导操作](pre_post_install.md)” 部分，以确定您要进行的修改是否可以编写脚本并支持未来的 AWS ParallelCluster 版本。

尽管构建自定义 AMI 并不理想（由于前面提到的原因），但仍有一些场景需要 AWS ParallelCluster 为其构建自定义 AMI。本教程将指导您完成针对这些场景构建自定义 AMI 的过程。

**注意**  
从 AWS ParallelCluster 版本 2.6.1 开始，启动节点时默认会跳过大多数安装配方。这样可以缩短启动时间。要以牺牲启动时间为代价运行所有安装食谱以获得更好的向后兼容性，请将 `"skip_install_recipes" : "no"` 添加到 [`extra_json`](cluster-definition.md#extra-json) 设置中的 `cluster` 键。例如：  

```
extra_json = { "cluster" : { "skip_install_recipes" : "no" } }
```

**先决条件**
+ AWS ParallelCluster [已安装](install.md)。
+  AWS CLI [已安装并配置。](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ 您拥有 [EC2 密钥对](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)。
+ 您拥有具有运行 [`pcluster`](pcluster.md) CLI 所需的[权限](iam.md#example-parallelcluser-policies)的 IAM 角色。

## 如何自定义 AWS ParallelCluster AMI
<a name="how-to-customize-the-aws-parallelcluster-ami"></a>

有三种使用自定义 AWS ParallelCluster AMI 的方法，将在下一节中介绍。这三种方式中的两种方式需要您在 AWS 账户下构建新的可用 AMI。第三种方法（在运行时使用自定义 AMI）不需要您提前构建任何对象，但确实会增加部署风险。请选择最适合您需求的方法。

## 修改 AMI
<a name="modify-an-aws-parallelcluster-ami"></a>

这是推荐使用的最安全方法。由于基本 AWS ParallelCluster AMI 经常使用新版本进行更新，因此此 AMI 具有安装和配置后运行所需 AWS ParallelCluster 的所有组件。您可以此为基础开始操作。

------
#### [ New EC2 console ]

1. 在 AWS ParallelCluster AMI 列表中，找到与您使用的具体内容相对应 AWS 区域 的 AMI。您选择的 AMI 列表必须与您使用的 AMI 列表版本相匹配。 AWS ParallelCluster 运行 `pcluster version` 验证版本。对于 AWS ParallelCluster 版本 2.11.9，请访问 aws [-parallelcluster/blob/v2.11.9/amis .t https://github.com/aws/ x](https://github.com/aws/aws-parallelcluster/blob/v2.11.9/amis.txt) t。要选择其他版本，请使用相同的链接，选择**标签：2.11.9** 按钮，选择**标签**选项卡，然后选择相应的版本。

1. 登录 AWS 管理控制台 并打开 Amazon EC2 控制台，网址为[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在 **Amazon EC2 控制面板**上，选择**启动实例**。

1. 在**应用程序和操作系统映像**中，选择**浏览更多 AMIs**，导航到**社区 AMIs**，然后在搜索框中 AWS 区域 输入您的 AWS ParallelCluster AMI ID。

1. **选择**此 AMI，选择您的**实例类型**和属性，选择您的**密钥对**，然后选择**启动实例**。

1. 使用操作系统用户和您的 SSH 密钥登录您的实例。有关更多信息，请导航至**实例**，选择新实例，然后选择**连接**。

1. 根据需要自定义您的实例。

1. 运行以下命令以准备实例来创建 AMI：

   ```
   sudo /usr/local/sbin/ami_cleanup.sh
   ```

1. 导航到**实例**，选择新实例，然后依次选择**实例状态**和**停止实例**。

1. 使用 EC2 控制台或创建映像从实例 AWS CLI [创建](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-image.html)新 AMI。

**在 EC2 控制台中**

   1. 在导航窗格中选择**实例**。

   1. 选择您创建和修改的实例。

   1. 在**操作**中，选择**映像和模板**，然后选择**创建映像**。

   1. 选择**创建映像**。

1. 在集群配置内的 [custom\$1ami](cluster-definition.md#custom-ami-section) 字段中输入新 AMI ID。

------
#### [ Old EC2 console ]

1. 在 AWS ParallelCluster AMI 列表中，找到与您使用的具体内容相对应 AWS 区域 的 AMI。您选择的 AMI 列表必须与您使用的 AMI 列表版本相匹配。 AWS ParallelCluster 运行 `pcluster version` 验证版本。对于 AWS ParallelCluster 版本 2.11.9，请访问 aws [-parallelcluster/blob/v2.11.9/amis .t https://github.com/aws/ x](https://github.com/aws/aws-parallelcluster/blob/v2.11.9/amis.txt) t。要选择其他版本，请使用相同的链接，选择**标签：2.11.9** 按钮，选择**标签**选项卡，然后选择相应的版本。

1. 登录 AWS 管理控制台 并打开 Amazon EC2 控制台，网址为[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在 **Amazon EC2 控制面板**上，选择**启动实例**。

1. 选择**社区 AMIs**，搜索 AWS ParallelCluster AMI ID，然后将其**选中**。

1. 选择您的实例类型，然后选择**下一步：配置实例详细信息**或**查看并启动**以启动您的实例。

1. 选择**启动**，选择您的**密钥对**，然后选择**启动实例**。

1. 使用操作系统用户和您的 SSH 密钥登录您的实例。有关更多信息，请导航至**实例**，选择新实例，然后选择**连接**。

1. 根据需要自定义您的实例。

1. 运行以下命令以准备实例来创建 AMI：

   ```
   sudo /usr/local/sbin/ami_cleanup.sh
   ```

1. 导航到**实例**，选择新实例，然后依次选择**实例状态**和**停止**。

1. 使用 EC2 控制台或创建映像从实例 AWS CLI [创建](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-image.html)新 AMI。

**在 EC2 控制台中**

   1. 在导航窗格中选择**实例**。

   1. 选择您创建和修改的实例。

   1. 在**操作**中，依次选择**映像**和**创建映像**。

   1. 选择**创建映像**。

1. 在集群配置内的 [custom\$1ami](cluster-definition.md#custom-ami-section) 字段中输入新 AMI ID。

------

## 构建自定义 AWS ParallelCluster AMI
<a name="build-a-custom-aws-parallelcluster-ami"></a>

如果您已具有自定义的 AMI 和软件，则可以在其基础之上应用 AWS ParallelCluster 所需的更改。

1. 在本地系统中安装以下内容以及 CL AWS ParallelCluster I：
   + Packer：从 [Packer 网站](https://developer.hashicorp.com/packer/downloads)查找并安装最新的操作系统版本。版本必须至少为 1.4.0，但建议使用最新版本。验证 `packer` 命令是否在您的 PATH 中可用。
**注意**  
在 AWS ParallelCluster 版本 2.8.0 之前，需要使用 [Berkshelf](https://github.com/berkshelf/berkshelf)（通过使用安装`gem install berkshelf`）。`pcluster createami`

1. 配置您的 AWS 账户 凭证，以便 Packer 可以代表您调用 AWS API 操作。Packer 工作所需的一组最低权限记录在 Packer 文档 *Amazon AMI Builder* 主题的 [IAM Task or Instance Role](https://developer.hashicorp.com/packer/plugins/builders/amazon#iam-task-or-instance-role) 部分。

1. 使用 AWS ParallelCluster CLI `createami` 中的命令从您作为基础提供的 AWS ParallelCluster AMI 开始构建 AMI：

   ```
   pcluster createami --ami-id <BASE_AMI> --os <BASE_AMI_OS>
   ```
**重要**  
你不应该像`createami`命令那样使用正在运行*<BASE\$1AMI>*的集群中的 AWS ParallelCluster AMI。否则，该命令将失败。

   对于其他参数，请参阅 [`pcluster createami`](pcluster.createami.md)。

1. 步骤 4 中的命令运行 Packer，后者具体执行以下操作：

   1. 使用提供的基础 AMI 启动实例。

   1. 将说明 AWS ParallelCluster 书应用于实例以安装相关软件和执行其他必要的配置任务。

   1. 停止实例。

   1. 从实例创建新的 AMI。

   1. 创建 AMI 之后终止该实例。

   1. 输出用于创建集群的新的 AMI ID 字符串。

1. 要创建集群，请在集群配置内的 [custom\$1ami](cluster-definition.md#custom-ami-section) 字段中输入 AMI ID。

**注意**  
用于构建自定义 AWS ParallelCluster AMI 的实例类型是`t2.xlarge`。此实例类型不符合 AWS 免费套餐的资格，因此您需要为构建此 AMI 时创建的任何实例付费。

## 在运行时使用自定义 AMI
<a name="use-a-custom-ami-at-runtime"></a>

**警告**  
为避免使用与不兼容的 AMI 的风险 AWS ParallelCluster，我们建议您避免使用此方法。  
当计算节点 AMIs 在运行时可能未经测试的情况下启动时，与所需软件 AWS ParallelCluster的运行时安装不兼容可能会导致 AWS ParallelCluster 停止工作。

如果您不想提前创建任何内容，则可以使用您的 AMI 并根据该 AMI AWS ParallelCluster 创建。

使用这种方法，创建所需的时间会更长，因为必须安装创建集群 AWS ParallelCluster 时所需的所有软件。 AWS ParallelCluster 此外，纵向扩展也需要更长的时间。
+ 在集群配置内的 [custom\$1ami](cluster-definition.md#custom-ami-section) 字段中输入 AMI ID。