

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# カスタム AMI AWS ParallelCluster の構築
<a name="building-custom-ami-v3"></a>

 AWS ParallelCluster コマンドラインインターフェイス (CLI) または API を使用する場合、 AWS ParallelCluster イメージとクラスターを作成または更新したときに作成された AWS リソースに対してのみ料金が発生します。詳細については、「[AWS が使用する サービス AWS ParallelCluster](aws-services-v3.md)」を参照してください。

**重要**  
カスタム AMI を構築した場合は、新しい AWS ParallelCluster のリリースごとに、カスタム AMI を作成したときの手順を繰り返す必要があります。

この先をお読みになる前に、まず「[カスタムブートストラップアクション](custom-bootstrap-actions-v3.md)」のセクションを確認することをお勧めします。希望する変更がスクリプト化され、今後の AWS ParallelCluster リリースでサポートされるかどうかを確認してください。

一般的にカスタム AMI の構築は理想的ではありませんが、 用のカスタム AMI の構築 AWS ParallelCluster が必要な特定のシナリオがあります。このチュートリアルでは、これらのシナリオに対応するカスタム AMI を構築する方法について説明します。

**前提条件**
+ AWS ParallelCluster [がインストールされます](install-v3-parallelcluster.md)。
+  AWS CLI [がインストールされ、設定されています。](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
+ [Amazon EC2 のキーペア](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)がある。
+ [`pcluster`](pcluster-v3.md) CLI を実行してイメージをビルドするのに必要な[アクセス許可](iam-roles-in-parallelcluster-v3.md#iam-roles-in-parallelcluster-v3-example-user-policies)を持つ IAM ロールがある。

## AMI AWS ParallelCluster をカスタマイズする方法
<a name="how-to-customize-the-aws-parallelcluster-ami-v3"></a>

カスタム AMI を構築するには、2 AWS ParallelCluster つの方法があります。これら 2 つの方法の 1 つは、 CLI を使用して新しい AMI AWS ParallelCluster を構築することです。もう一つの方法では、手動で変更を加えて AWS アカウントで使用できる新しい AMI を構築する必要があります。

## カスタム AMI AWS ParallelCluster を構築する
<a name="build-a-custom-aws-parallelcluster-ami-v3"></a>

カスタマイズされた AMI とソフトウェアがある場合は、その AWS ParallelCluster 上に に必要な変更を適用できます。 AWS ParallelCluster は EC2 Image Builder サービスを使用してカスタマイズされた AMIs。詳細については、「[Image Builder User Guide](https://docs.aws.amazon.com/imagebuilder/latest/userguide/what-is-image-builder.html)」を参照してください。

キーポイント:
+ このプロセスには約 1 時間かかります。この時間は、ビルド時に追加で [`Build`](Build-v3.md)/[`Components`](Build-v3.md#Build-v3-Components) をインストールする場合には変動します。
+ AMI には主なコンポーネントのバージョンがタグ付けされています。これらには、カーネル、スケジューラー、[EFA](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html) ドライバーが含まれます。コンポーネントバージョンのサブセットも AMI の説明にレポートされます。
+  AWS ParallelCluster 3.0.0 以降では、新しい CLI コマンドセットを使用してイメージのライフサイクルを管理できます。これには [`build-image`](pcluster.build-image-v3.md)、[`list-images`](pcluster.list-images-v3.md)、[`describe-image`](pcluster.describe-image-v3.md)、および [`delete-image`](pcluster.delete-image-v3.md) があります。
+ この方法は繰り返し実行可能です。再実行して AMI を最新の状態に保ち (OS の更新など)、既存のクラスターを更新するときに使用できます。

**注記**  
 AWS 中国パーティションでこの方法を使用すると、ネットワークエラーが発生する可能性があります。例えば、GitHub または OS リポジトリからパッケージをダウンロードする際に、`pcluster build-image` コマンドでこれらのエラーが表示される場合があります。このような場合には、次の代替方法のいずれかを使用することをお勧めします。  
このコマンドをバイパスする「[AMI AWS ParallelCluster の変更](#modify-an-aws-parallelcluster-ami-v3)」アプローチに従ってください。
イメージを などの別のパーティションとリージョンに構築し`us-east-1`、保存/復元して中国リージョンに移動します。詳細については、「*Amazon EC2 ユーザーガイド*」の「[S3 を使用して AMI を保存および復元する](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-store-restore.html)」を参照してください。

手順:

1.  AWS ParallelCluster クライアントがユーザーに代わって AWS API オペレーションを呼び出すことができるように AWS アカウント 認証情報を設定します。必要なアクセス権限のリストについては、「[AWS Identity and Access Management での アクセス許可 AWS ParallelCluster](iam-roles-in-parallelcluster-v3.md)」を参照してください。

1. 基本的なビルドイメージ**設定ファイルを作成します。これを行うには、イメージの構築に使用する [`InstanceType`](Build-v3.md#yaml-build-image-Build-InstanceType) と、[`ParentImage`](Build-v3.md#yaml-build-image-Build-ParentImage) を指定します。これらは AMI を作成するための開始点として使用されます。オプションのビルドパラメータの詳細については、「[Image Configuration](image-builder-configuration-file-v3.md)」を参照してください。

   ```
   Build:
    InstanceType: <BUILD_INSTANCE_TYPE>
    ParentImage: <BASE_AMI_ID>
   ```

1. CLI コマンドを使用して[`pcluster build-image`](pcluster.build-image-v3.md)、ベースとして指定した AWS ParallelCluster AMI から AMI を構築します。

   ```
   $ pcluster build-image --image-id IMAGE_ID --image-configuration IMAGE_CONFIG.yaml --region REGION
       {
    "image": {
      "imageId": "IMAGE_ID",
      "imageBuildStatus": "BUILD_IN_PROGRESS",
      "cloudformationStackStatus": "CREATE_IN_PROGRESS",
      "cloudformationStackArn": "arn:aws:cloudformation:us-east-1:123456789012:stack/IMAGE_ID/abcd1234-ef56-gh78-ij90-1234abcd5678",
      "region": "us-east-1",
      "version": "3.15.0"
    }
   }
   ```
**警告**  
`pcluster build-image` はデフォルトの VPC を使用します。 AWS Control Tower または AWS Landing Zone を使用してデフォルトの VPC を削除する場合は、イメージ設定ファイルでサブネット ID を指定する必要があります。詳細については、「[`SubnetId`](HeadNode-v3.md#yaml-HeadNode-Networking-SubnetId)」を参照してください。

   その他のパラメータのリストについては、「[`pcluster build-image`](pcluster.build-image-v3.md)」 コマンドリファレンスページを参照してください。上記のコマンドの結果は次のとおりです。
   + イメージの構成に基づいて、CloudFormation スタックが作成されます。このスタックには、ビルドに必要なすべての EC2 Image Builder リソースが含まれています。
   + 作成されたリソースには、カスタム Image Builder AWS ParallelCluster コンポーネントを追加できる公式の Image Builder コンポーネントが含まれています。詳細については、EC2 [ Image Builder ユーザーガイドの「Image Builder を使用してカスタムコンポーネントを作成する](https://docs.aws.amazon.com/imagebuilder/latest/userguide/create-component.html)」を参照してください。 *EC2 *
   + EC2 Image Builder はビルドインスタンスを起動し、 AWS ParallelCluster クックブックを適用して AWS ParallelCluster ソフトウェアスタックをインストールし、必要な設定タスクを実行します。 AWS ParallelCluster クックブックは、ビルドとブートストラップに使用されます AWS ParallelCluster。
   + インスタンスが停止され、そこから新しい AMI が作成されます。
   + 新たに作成した AMI から別のインスタンスが起動します。テストフェーズでは、EC2 Image Builder は Image Builder コンポーネントで定義されたテストを実行します。
   + ビルドが成功すると、スタックは削除されます。ビルドに失敗した場合、スタックはインスペクション可能な状態で保持されます。

1. 次のコマンドを実行すると、ビルドプロセスのステータスをモニタリングできます。ビルドが完了したら、ビルドを実行してレスポンスで指定された AMI ID を取得できます。

   ```
   $ pcluster describe-image --image-id IMAGE_ID --region REGION
       
   # BEFORE COMPLETE
   {
    "imageConfiguration": {
      "url": "https://parallelcluster-1234abcd5678efgh-v1-do-not-delete.s3.amazonaws.com/parallelcluster/3.15.0/images/IMAGE_ID-abcd1234efgh5678/configs/image-config.yaml?...",
    },
    "imageId": "IMAGE_ID",
    "imagebuilderImageStatus": "BUILDING",
    "imageBuildStatus": "BUILD_IN_PROGRESS",
    "cloudformationStackStatus": "CREATE_IN_PROGRESS",
    "cloudformationStackArn": "arn:aws:cloudformation:us-east-1:123456789012:stack/IMAGE_ID/abcd1234-ef56-gh78-ij90-1234abcd5678",
    "region": "us-east-1",
    "version": "3.15.0",
    "cloudformationStackTags": [
      {
        "value": "3.15.0",
        "key": "parallelcluster:version"
      },
      {
        "value": "IMAGE_ID",
        "key": "parallelcluster:image_name"
      },
      ...
    ],
    "imageBuildLogsArn": "arn:aws:logs:us-east-1:123456789012:log-group:/aws/imagebuilder/ParallelClusterImage-IMAGE_ID",
    "cloudformationStackCreationTime": "2022-04-05T21:36:26.176Z"
   }
   
   # AFTER COMPLETE
   {
    "imageConfiguration": {
      "url": "https://parallelcluster-1234abcd5678efgh-v1-do-not-delete.s3.us-east-1.amazonaws.com/parallelcluster/3.15.0/images/IMAGE_ID-abcd1234efgh5678/configs/image-config.yaml?Signature=..."
    },
    "imageId": "IMAGE_ID",
    "imageBuildStatus": "BUILD_COMPLETE",
    "region": "us-east-1",
    "ec2AmiInfo": {
        "amiName": "IMAGE_ID 2022-04-05T21-39-24.020Z",
        "amiId": "ami-1234stuv5678wxyz",
        "description": "AWS ParallelCluster AMI for alinux2, kernel-4.14.238-182.422.amzn2.x86_64, lustre-2.10.8-5.amzn2.x86_64, efa-1.13.0-1.amzn2.x86_64, dcv-2021.1.10598-1.el7.x86_64, slurm-20-11-8-1",
        "state": "AVAILABLE",
        "tags": [
         {
           "value": "2021.3.11591-1.el7.x86_64",
           "key": "parallelcluster:dcv_version"
         },
         ...
        ],
      "architecture": "x86_64"
    },
    "version": "3.15.0"      
   }
   ```

1. クラスターを作成するには、クラスター設定内の [`CustomAmi`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-Image-CustomAmi) フィールドに AMI ID を入力します。

**AMI 作成プロセスのトラブルシューティングとモニタリング**

イメージの作成は約 1 時間で完了します。[`pcluster describe-image`](pcluster.describe-image-v3.md) コマンドまたはログ検索コマンドを実行してプロセスをモニタリングできます。

```
$ pcluster describe-image --image-id IMAGE_ID --region REGION
```

[`build-image`](pcluster.build-image-v3.md) コマンドは、イメージの構築に必要なすべての Amazon EC2 リソースを含む CloudFormation スタックを作成し、EC2 Image Builder プロセスを起動します。

[`build-image`](pcluster.build-image-v3.md) コマンドを実行した後、[`pcluster get-image-stack-events`](pcluster.get-image-stack-events-v3.md) を使用して CloudFormation スタックイベントを取得できます。`--query` パラメータで結果をフィルタリングして、最新のイベントを表示できます。詳細については、「 *AWS Command Line Interface ユーザーガイド*[」の AWS CLI 「出力のフィルタリング](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html)」を参照してください。

```
$ pcluster get-image-stack-events --image-id IMAGE_ID --region REGION --query "events[0]"
{
 "eventId": "ParallelClusterImage-CREATE_IN_PROGRESS-2022-04-05T21:39:24.725Z",
 "physicalResourceId": "arn:aws:imagebuilder:us-east-1:123456789012:image/parallelclusterimage-IMAGE_ID/3.15.0/1",
 "resourceStatus": "CREATE_IN_PROGRESS",
 "resourceStatusReason": "Resource creation Initiated",
 "resourceProperties": "{\"InfrastructureConfigurationArn\":\"arn:aws:imagebuilder:us-east-1:123456789012:infrastructure-configuration/parallelclusterimage-abcd1234-ef56-gh78-ij90-1234abcd5678\",\"ImageRecipeArn\":\"arn:aws:imagebuilder:us-east-1:123456789012:image-recipe/parallelclusterimage-IMAGE_ID/3.15.0\",\"DistributionConfigurationArn\":\"arn:aws:imagebuilder:us-east-1:123456789012:distribution-configuration/parallelclusterimage-abcd1234-ef56-gh78-ij90-1234abcd5678\",\"Tags\":{\"parallelcluster:image_name\":\"IMAGE_ID\",\"parallelcluster:image_id\":\"IMAGE_ID\"}}",
 "stackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/IMAGE_ID/abcd1234-ef56-gh78-ij90-1234abcd5678",
 "stackName": "IMAGE_ID",
 "logicalResourceId": "ParallelClusterImage",
 "resourceType": "AWS::ImageBuilder::Image",
 "timestamp": "2022-04-05T21:39:24.725Z"
}
```

約 15 分後、Image Builder の作成に関連するログイベントエントリにスタックイベントが表示されます。[`pcluster list-image-log-streams`](pcluster.list-image-log-streams-v3.md) コマンドや [`pcluster get-image-log-events`](pcluster.get-image-log-events-v3.md) コマンドを使用して、イメージログストリームの一覧表示および Image Builder のステップのモニタリングができるようになりました。

```
$ pcluster list-image-log-streams --image-id IMAGE_ID --region REGION \
    --query 'logStreams[*].logStreamName'

 "3.15.0/1"
]

$ pcluster get-image-log-events --image-id IMAGE_ID --region REGION \
--log-stream-name 3.15.0/1 --limit 3
{
 "nextToken": "f/36295977202298886557255241372854078762600452615936671762",
 "prevToken": "b/36295977196879805474012299949460899222346900769983430672",
 "events": [
   {
     "message": "ExecuteBash: FINISHED EXECUTION",
     "timestamp": "2022-04-05T22:13:26.633Z"
   },
   {
     "message": "Document arn:aws:imagebuilder:us-east-1:123456789012:component/parallelclusterimage-test-abcd1234-ef56-gh78-ij90-1234abcd5678/3.15.0/1",
     "timestamp": "2022-04-05T22:13:26.741Z"
   },
   {
     "message": "TOE has completed execution successfully",
     "timestamp": "2022-04-05T22:13:26.819Z"
   }
 ]
}
```

`BUILD_COMPLETE` のステータスが表示されるまで、[`describe-image`](pcluster.describe-image-v3.md) コマンドで確認を続けます。

```
$ pcluster describe-image --image-id IMAGE_ID --region REGION
{
 "imageConfiguration": {
   "url": "https://parallelcluster-1234abcd5678efgh-v1-do-not-delete.s3.us-east-1.amazonaws.com/parallelcluster/3.15.0/images/IMAGE_ID-abcd1234efgh5678/configs/image-config.yaml?Signature=..."
 },
 "imageId": "IMAGE_ID",
 "imageBuildStatus": "BUILD_COMPLETE",
 "region": "us-east-1",
 "ec2AmiInfo": {
     "amiName": "IMAGE_ID 2022-04-05T21-39-24.020Z",
     "amiId": "ami-1234stuv5678wxyz",
     "description": "AWS ParallelCluster AMI for alinux2, kernel-4.14.238-182.422.amzn2.x86_64, lustre-2.10.8-5.amzn2.x86_64, efa-1.13.0-1.amzn2.x86_64, dcv-2021.1.10598-1.el7.x86_64, slurm-20-11-8-1",
     "state": "AVAILABLE",
     "tags": [
      {
        "value": "2021.3.11591-1.el7.x86_64",
        "key": "parallelcluster:dcv_version"
      },
      ...
     ],
   "architecture": "x86_64"
 },
 "version": "3.15.0"      
}
```

カスタム AMI 作成の問題をトラブルシューティングする必要がある場合は、次の手順で説明されているようにイメージログのアーカイブを作成します。

`--output` パラメータに応じて、ログを Amazon S3 バケットまたはローカルファイルにアーカイブすることが可能です。

```
$ pcluster export-image-logs --image-id IMAGE_ID --region REGION \
--bucket BUCKET_NAME --bucket-prefix BUCKET_FOLDER
{
 "url": "https://BUCKET_NAME.s3.us-east-1.amazonaws.com/BUCKET-FOLDER/IMAGE_ID-logs-202209071136.tar.gz?AWSAccessKeyId=..."
}

$ pcluster export-image-logs --image-id IMAGE_ID \
--region REGION --bucket BUCKET_NAME --bucket-prefix BUCKET_FOLDER --output-file /tmp/archive.tar.gz
{
 "path": "/tmp/archive.tar.gz"
}
```

アーカイブには、Image Builder プロセスと CloudFormation スタックイベントに関連する CloudWatch Logs Streams が含まれています。このコマンドの実行には数分かかることがあります。

 **カスタム AMI の管理** 

 AWS ParallelCluster 3.0.0 以降、イメージのライフサイクルを構築、モニタリング、管理するための新しいコマンドセットが CLI に追加されました。コマンドの詳細については、「[pcluster commands](pcluster-v3.md)」を参照してください。

## AMI AWS ParallelCluster の変更
<a name="modify-an-aws-parallelcluster-ami-v3"></a>

この方法は、公式 AMI AWS ParallelCluster にカスタマイズを追加して変更することで構成されます。 AWS ParallelCluster AMIs新しいリリースで更新されます。これらの AMIs には、インストールおよび設定時に が機能 AWS ParallelCluster するために必要なすべてのコンポーネントがあります。これらのいずれかをベースとして開始できます。

キーポイント:
+ この方法は、[`build-image`](pcluster.build-image-v3.md) コマンドよりも高速です。ただし、これは手動のプロセスであり、自動的に繰り返すことはできません。
+ この方法では、CLI で利用できるログ検索やイメージライフサイクル管理コマンドにはアクセスできません。

手順:

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

1. 使用する特定の に対応する AMI を見つけ AWS リージョン ます。これを見つけるには、 `--region`パラメータを指定して [`pcluster list-official-images`](pcluster.list-official-images-v3.md) コマンドを使用し、使用する OS AWS リージョン `--os`とアーキテクチャを使用して目的の AMI をフィルタリングする特定の パラメータと `--architecture`パラメータを選択します。出力から、Amazon EC2 イメージ ID を取得します。

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) で Amazon EC2 コンソールを開きます。

1. ナビゲーションペインで、**[イメージ]**、**[AMI]** の順に選択します。取得した EC2 イメージ ID を検索し、[AMI] を選択して、**[AMI からインスタンスを起動]** を選択します。

1. 下にスクロールして、使用する **[インスタンスタイプ]** を選択します。

1. 使用する **[キーペア]**、**[インスタンスの作成]** を選択します。

1. OS ユーザーと SSH キーを使用してインスタンスにログインします。

1. 要件に合わせてインスタンスを手動でカスタマイズします。

1. 次のコマンドを実行して、インスタンスを AMI 作成用に準備します。

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

1. コンソールから **[インスタンスの状態]** および **[インスタンスの停止]** を選択します。

   **[インスタンス]** に移動して、新しいインスタンスを選択し、**[インスタンスの状態]**、**[インスタンスの停止]** の順に選択します。

1. Amazon EC2 コンソールまたは AWS CLI [create-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-image.html) を使用して、インスタンスから新しい AMI を作成します。

**Amazon EC2 コンソールから**

   1. ナビゲーションペインで、[**Instances (インスタンス)**] を選択します。

   1. 作成および変更したインスタンスを選択します。

   1. **[アクション]**で、**[イメージ]**、**[イメージの作成]** の順に選択します。

   1. [**Create Image**] を選択します。

1. クラスター設定内の [`CustomAmi`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-Image-CustomAmi) フィールドに新しい AMI ID を入力して、クラスターを作成します。

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

1. 使用する特定の に対応する AWS ParallelCluster AMI を見つけ AWS リージョン ます。これを見つけるには、 `--region`パラメータで [`pcluster list-official-images`](pcluster.list-official-images-v3.md) コマンドを使用して、使用する OS AWS リージョン とアーキテクチャで目的の AMI をフィルタリングする特定の `--os`パラメータと `--architecture`パラメータを選択できます。出力から、Amazon EC2 イメージ ID を取得できます。

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) で Amazon EC2 コンソールを開きます。

1. ナビゲーションペインで、**[イメージ]**、**[AMI]** の順に選択します。**[パブリックイメージ]** のフィルターを設定し、取得した EC2 イメージ ID を検索し、AMI を選択して **[起動]** を選択します。

1. インスタンスタイプを選択し、**[次へ:インスタンスの詳細の設定]** または **[確認と作成]** を選択してインスタンスを起動します。

1. **[起動]** を選択し、**[キーペア]**、**[インスタンスの作成]** を選択します。

1. OS ユーザーと SSH キーを使用してインスタンスにログインします。詳細については、**[インスタンス]** に移動し、新しいインスタンスを選択して **[接続]** を選択します。

1. 要件を満たすようにインスタンスを手動でカスタマイズします。

1. 次のコマンドを実行して、インスタンスを AMI 作成用に準備します。

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

1. Amazon EC2 コンソールから、ナビゲーションペインで **[インスタンス]** を選択し、新しいインスタンスを選択して **[アクション]**、**[インスタンスの状態]**、**[停止]** の順に選択します。

1. Amazon EC2 コンソールまたは AWS CLI [create-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-image.html) を使用して、インスタンスから新しい AMI を作成します。

**Amazon EC2 コンソールから**

   1. ナビゲーションペインで、[**Instances (インスタンス)**] を選択します。

   1. 作成および変更したインスタンスを選択します。

   1. **[アクション]** で、**[イメージ]**、**[イメージの作成]** の順に選択します。

   1. [**Create Image**] を選択します。

1. クラスター設定内の [`CustomAmi`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-Image-CustomAmi) フィールドに新しい AMI ID を入力して、クラスターを作成します。

------