

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 建置自訂 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 的程序。

**注意**  
從 2.6.1 AWS ParallelCluster 版開始，大多數安裝配方在啟動節點時預設會略過。這是為了改善啟動時間。若要以啟動時間的費用執行所有安裝配方，以獲得更佳的回溯相容性，請將 `"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)。
+ 您有一個 IAM 角色，具有執行 CLI [`pcluster`](pcluster.md) 所需的[許可](iam.md#example-parallelcluser-policies)。

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

有三種方式可以使用下一節所述的自訂 AWS ParallelCluster AMI。這三種方法中的兩種都需要您建置可在 下使用的新 AMI AWS 帳戶。第三個方法 （在執行期使用自訂 AMI) 不需要您事先建置任何項目，但會增加部署的風險。選擇最適合您需求的方法。

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

這是最安全且最建議的方法。由於基本 AWS ParallelCluster AMI 通常會以新版本更新，因此此 AMI 具有在安裝和設定基礎 AMI 時 AWS ParallelCluster 運作所需的所有元件。您可以開始以此做為基礎。

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

1. 在 AWS ParallelCluster AMI 清單中，尋找對應至您使用之特定 AWS 區域 的 AMI。您選擇的 AMI 清單必須符合您使用 AWS ParallelCluster 的 版本。執行 `pcluster version` 以驗證版本。對於 2.11.9 AWS ParallelCluster 版，請前往 https：//[https://github.com/aws/aws-parallelcluster/blob/v2.11.9/amis.txt](https://github.com/aws/aws-parallelcluster/blob/v2.11.9/amis.txt)。若要選取另一個版本，請使用相同的連結，選擇**標籤：2.11.9** 按鈕，選取**標籤**索引標籤，然後選取適當的版本。

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)：// 開啟 Amazon 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 [create-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-image.html) 從執行個體建立新的 AMI。

**從 EC2 主控台**

   1. 在導覽窗格中，選擇 **Instances (執行個體)**。

   1. 選擇您建立和修改的執行個體。

   1. 在**動作**中，選擇**映像和範本**，然後選擇**建立映像**。

   1. 選擇 **Create Image (建立映像)**。

1. 在叢集組態的 [custom\$1ami](cluster-definition.md#custom-ami-section) 欄位中輸入新的 AMI ID。

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

1. 在 AWS ParallelCluster AMI 清單中，尋找對應至您使用之特定 AWS 區域 的 AMI。您選擇的 AMI 清單必須符合您使用 AWS ParallelCluster 的 版本。執行 `pcluster version` 以驗證版本。對於 2.11.9 AWS ParallelCluster 版，請前往 https：//[https://github.com/aws/aws-parallelcluster/blob/v2.11.9/amis.txt](https://github.com/aws/aws-parallelcluster/blob/v2.11.9/amis.txt)。若要選取另一個版本，請使用相同的連結，選擇**標籤：2.11.9** 按鈕，選取**標籤**索引標籤，然後選取適當的版本。

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)：// 開啟 Amazon 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 [create-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-image.html) 從執行個體建立新的 AMI。

**從 EC2 主控台**

   1. 在導覽窗格中，選擇 **Instances (執行個體)**。

   1. 選擇您建立和修改的執行個體。

   1. 在**動作**中，選擇**映像**，然後選擇**建立映像**。

   1. 選擇 **Create Image (建立映像)**。

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. 將下列項目與 AWS ParallelCluster CLI 一起安裝在您的本機系統中：
   + Packer：從 [Packer 網站](https://developer.hashicorp.com/packer/downloads)中，尋找您作業系統的最新版本並加以安裝。版本必須至少為 1.4.0，但建議使用最新版本。確認 `packer`命令在您的 PATH 中可用。
**注意**  
在 2.8.0 AWS ParallelCluster 版之前，需要 [Berkshelf](https://github.com/berkshelf/berkshelf) （使用 安裝`gem install berkshelf`) 才能使用 `pcluster createami`。

1. 設定您的 AWS 帳戶 登入資料，讓 Packer 可以代表您呼叫 AWS API 操作。Packer 運作所需的最低許可集，會記錄在 Packer 文件 *Amazon AMI Builder* 主題的 [IAM 任務或執行個體角色](https://developer.hashicorp.com/packer/plugins/builders/amazon#iam-task-or-instance-role)區段中。

1. 使用 AWS ParallelCluster CLI `createami`中的 命令，從您提供做為基礎的 AMI 開始建置 AWS ParallelCluster AMI：

   ```
   pcluster createami --ami-id <BASE_AMI> --os <BASE_AMI_OS>
   ```
**重要**  
您不應該使用執行中叢集的 AWS ParallelCluster AMI 做為 `createami`命令的 *<BASE\$1AMI>*。否則，命令會失敗。

   如需其他參數，請參閱 [`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 並從 AWS ParallelCluster 該 AMI 建立 。

使用此方法，建立 AWS ParallelCluster 需要更長的時間，因為建立叢集 AWS ParallelCluster 時所需的所有軟體都必須安裝。此外，向上擴展也需要更長的時間。
+ 在叢集組態的 [custom\$1ami](cluster-definition.md#custom-ami-section) 欄位中輸入 AMI id。