

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

# オンデマンドキャパシティ予約 (ODCR) を使用してインスタンスを起動する
<a name="launch-instances-odcr-v3"></a>

[オンデマンドキャパシティ予約](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html) (ODCR) を使用すると、特定のアベイラビリティーゾーンでクラスターの Amazon EC2 インスタンスのキャパシティを予約できます。これにより、[Savings Plans](https://aws.amazon.com/savingsplans/) または[リージョンリザーブドインスタンス](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/reserved-instances-scope.html)が提供する請求アカウントとは関係なく、キャパシティの予約を作成および管理できます。

`open` または `targeted` の ODCR を設定できます。*オープン* ODCR は、ODCR 属性に一致するすべてのインスタンスを対象としています。これらの属性はインスタンスタイプ、プラットフォーム、およびアベイラビリティーゾーンです。*ターゲット* ODCR はクラスター設定で明示的に定義する必要があります。ODCR が `open` または `targeted` であるかどうかを確認するには、 AWS CLI の Amazon EC2 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-capacity-reservations.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-capacity-reservations.html) コマンドを実行します。

[クラスタープレイスメントグループオンデマンドキャパシティ予約 (CPG ODCR)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cr-cpg.html) と呼ばれるクラスタープレイスメントグループに ODCR を作成することもできます。

複数の ODCR を 1 つのリソースグループにまとめることができます。これはクラスター設定ファイルで定義できます。リソースグループの詳細については、「Resource Groups とタグのユーザーガイド**」の「[What are resource groups?](https://docs.aws.amazon.com/ARG/latest/userguide/resource-groups.html)」を参照してください。

## での ODCR の使用 AWS ParallelCluster
<a name="odcr-parallelcuster-v3"></a>

AWS ParallelCluster はオープン ODCR をサポートしています。オープン ODCR を使用する場合は、 AWS ParallelClusterで何も指定する必要はありません。インスタンスはクラスター用に自動的に選択されます。既存のプレイスメントグループを指定するか、 で新しいプレイスメントグループ AWS ParallelCluster を作成できます。

### クラスター設定の ODCR
<a name="odcr-parallelcuster-config-v3"></a>

 AWS ParallelCluster バージョン 3.3.0 以降では、クラスター設定ファイルで ODCRs を定義できます。Amazon EC2 ランインスタンスの上書きを指定する必要はありません。

まず、それぞれのリンク先のドキュメントで説明されている方法を使用して、[キャパシティ予約](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/capacity-reservations-using.html)と[リソースグループ](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-cr-group.html)を作成します。キャパシティ予約グループを作成するには、 AWS CLI メソッドを使用する必要があります。を使用する場合は AWS マネジメントコンソール、タグベースまたはスタックベースのリソースグループのみを作成できます。キャパシティ予約でインスタンスを起動 AWS CLI する場合、タグベースおよびスタックベースのリソースグループは AWS ParallelCluster または ではサポートされていません。

キャパシティ予約とリソースグループを作成したら、以下のクラスター設定例に示すように、[`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[`CapacityReservationTarget`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-CapacityReservationTarget) または [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[`ComputeResources`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-ComputeResources)/[`CapacityReservationTarget`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-CapacityReservationTarget) で指定します。赤で強調表示されている*値を*有効な値に置き換えます。

```
Image:
  Os: os
HeadNode:
  InstanceType: head_node_instance
  Networking:
    SubnetId: public_subnet_id
  Ssh:
    KeyName: key_name
Scheduling:
  Scheduler: scheduler
  SlurmQueues:
    - Name: queue1
      Networking:
        SubnetIds:
          - private_subnet_id
      ComputeResources:
        - Name: cr1
          Instances:
            - InstanceType: instance
          MaxCount: max_queue_size
          MinCount: max_queue_size
          Efa:
            Enabled: true
          CapacityReservationTarget:
            CapacityReservationResourceGroupArn: capacity_reservation_arn
```

### 廃止/非推奨 – Amazon EC2 インスタンスオーバーライドによるターゲット ODCR
<a name="odcr-parallelcuster-override-v3"></a>

**警告**  
 AWS ParallelCluster バージョン 3.3.0 以降では、この方法はお勧めしません。このセクションは、以前のバージョンを使用した実装のリファレンスとして残しています。
このメソッドは Slurm による複数インスタンスタイプ割り当てとは互換性がありません。

ODCRs のサポートが `targeted` AWS ParallelCluster 3.1.1 に追加されました。このリリースでは、EC2 の `RunInstances` パラメータをオーバーライドして、設定されている AWS ParallelClusterの各コンピューティングリソースに使用する予約に関する情報を渡すメカニズムが導入されました。このメカニズムは `targeted` ODCR と互換性があります。ただし、`targeted` ODCR を使用する場合は、`run-instances` オーバーライド設定を指定する必要があります。*ターゲット* ODCR は AWS CLI の Amazon EC2 [https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) コマンドで明示的に定義する必要があります。ODCR が であるかどうかを判断する`open`か、 AWS CLI Amazon EC2 コマンド `targeted`を実行します[https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-capacity-reservations.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-capacity-reservations.html)。

複数の ODCR を 1 つのリソースグループにまとめることができます。これを実行インスタンスオーバーライドで使用すると、同時に複数の ODCR をターゲットにすることができます。

`targeted` ODCR を使用している場合は、プレイスメントグループを指定できます。ただし、`run-instances` オーバーライド設定も指定する必要があります。

が ODCR `targeted` を AWS 作成した、または特定のリザーブドインスタンスのセットがあるとします。そうなると、プレイスメントグループを指定できなくなります。によって設定されたルールは、プレイスメントグループ設定と競合 AWS する可能性があります。そのため、アプリケーションにプレイスメントグループが必要な場合は、[CPG ODCR](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cr-cpg.html) を使用してください。いずれの場合も、`run-instances` オーバーライド設定を指定する必要があります。

CPG ODCR を使用している場合は、`run-instances` オーバーライド設定を指定し、クラスター設定でも同じプレイスメントグループを指定する必要があります。

### でのリザーブドインスタンスの使用 AWS ParallelCluster
<a name="odcr-reserved-instances"></a>

リザーブドインスタンスはキャパシティ予約 (ODCR) とは[異なります](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html#capacity-reservations-differences)。リザーブドインスタンスには [2 つのタイプ](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/reserved-instances-scope.html)があります。リージョン**のリザーブドインスタンスでは、キャパシティは予約されません。ゾーン**のリザーブドインスタンスでは、指定されたアベイラビリティーゾーンでキャパシティが予約されます。

リージョンのリザーブドインスタンスがある場合、キャパシティが予約されず、容量不足エラーが発生する可能性があります。ゾーンのリザーブドインスタンスがある場合、キャパシティ予約はできますが、その指定に使用できる `run-instances` API パラメータはありません。

リザーブドインスタンスは、どの AWS ParallelCluster バージョンでもサポートされています。で何も指定する必要はありません。 AWS ParallelCluster インスタンスは自動的に選択されます。

ゾーンのリザーブドインスタンスを使用するときは、クラスター設定でプレイスメントグループの指定を省略することで、発生する可能性のある容量不足エラーを回避できます。

### 廃止/非推奨 - `targeted` オンデマンドキャパシティ予約 (ODCR) に AWS ParallelCluster 3 で`RunInstances`カスタマイズを使用する
<a name="odcr-run-instances"></a>

**警告**  
 AWS ParallelCluster バージョン 3.3.0 以降では、この方法はお勧めしません。このセクションは、以前のバージョンを使用した実装のリファレンスとして残しています。
このメソッドは Slurm による複数インスタンスタイプ割り当てとは互換性がありません。

クラスターキューに設定されているコンピューティングリソースごとに Amazon EC2 の `RunInstances` パラメータをオーバーライドできます。そのためには、以下のコードスニペットコンテンツを含む `/opt/slurm/etc/pcluster/run_instances_overrides.json` ファイルをクラスターのヘッドノードに作成します。
+ `${queue_name}` はオーバーライドを適用するキューの名前です。
+ `${compute_resource_name}` オーバーライドを適用するコンピューティングリソースです。
+ `${overrides}` は、キューとインスタンスタイプの特定の組み合わせに使用する`RunInstances`オーバーライドのリストを含む任意の JSON オブジェクトです。オーバーライドの構文は、[run\$1instances](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html#EC2.Client.run_instances) boto3 呼び出しで説明されているのと同じ仕様に従う必要があります。

```
{
    "${queue_name}": {
        "${compute_resource_name}": {
            ${overrides}
        },
        ...
    },
    ...
}
```

例えば、次の JSON は、`my-queue` と `my-compute-resource` で設定された `p4d.24xlarge` インスタンスに ODCR グループ `group_arn` を使用するように設定します。

```
{
    "my-queue": {
        "my-compute-resource": {
            "CapacityReservationSpecification": {
                "CapacityReservationTarget": {
                    "CapacityReservationResourceGroupArn": "group_arn"
                }
            }
        }
    }
}
```

この JSON ファイルが生成されると、クラスターのスケーリングを担当する AWS ParallelCluster デーモンは、インスタンス起動のオーバーライド設定を自動的に使用します。指定したパラメータがインスタンスのプロビジョニングに使用されていることを確認するには、以下のログファイルを確認してください。
+ `/var/log/parallelcluster/clustermgtd` (静的容量)
+ `/var/log/parallelcluster/slurm_resume.log` (動的容量)

パラメータが正しければ、次の内容を含むログエントリが見つかります。

```
Found RunInstances parameters override. Launching instances with: <parameters_list>
```

### 廃止/非推奨 – `targeted` オンデマンドキャパシティ予約 (ODCR) を使用してクラスターを作成する
<a name="odcr-create-cluster"></a>

**警告**  
 AWS ParallelCluster バージョン 3.3.0 以降では、この方法はお勧めしません。このセクションは、以前のバージョンを使用した実装のリファレンスとして残しています。
このメソッドは [Slurm による複数のインスタンスタイプの割り当て](slurm-multiple-instance-allocation-v3.md) と互換性がありません。

1. **リソースグループを作成し、容量をグループ化します。**

   ```
   $ aws resource-groups create-group --name EC2CRGroup \ 
       --configuration '{"Type":"AWS::EC2::CapacityReservationPool"}' '{"Type":"AWS::ResourceGroups::Generic", "Parameters": [{"Name": "allowed-resource-types", "Values": ["AWS::EC2::CapacityReservation"]}]}'
   ```
**注記**  
リソースグループは、他のアカウントが共有するリソースをサポートしていません。  
ターゲット ODCR が別のアカウントで共有されている場合は、リソースグループを作成する必要はありません。ステップ 3 では、リソースグループの代わりに `CapacityReservationId` を使用します。  

   ```
   #!/bin/bash
   set -e
   
   # Override run_instance attributes
   cat > /opt/slurm/etc/pcluster/run_instances_overrides.json << EOF
   {
       "my-queue": {
           "my-compute-resource": {
               "CapacityReservationSpecification": {
                   "CapacityReservationTarget": {
                       "CapacityReservationId": "cr-abcdef01234567890"
                   }
               }
           }
       }
   }
   EOF
   ```

   リソースグループにキャパシティ予約を追加します。新しい ODCR を作成するたびに、それをグループ予約に追加します。`ACCOUNT_ID` をアカウント ID、 `PLACEHOLDER_CAPACITY_RESERVATION`をキャパシティ予約 ID、 を AWS リージョン ID (us-east-1 など) `REGION_ID`に置き換えます。

   ```
   $ aws resource-groups group-resources --region REGION_ID --group EC2CRGroup \
       --resource-arns arn:aws:ec2:REGION_ID:ACCOUNT_ID:capacity-reservation/PLACEHOLDER_CAPACITY_RESERVATION
   ```

   ローカルコンピュータでポリシードキュメントを作成します。をアカウント ID `ACCOUNT_ID`に、 を AWS リージョン ID (us-east-1 など) `REGION_ID`に置き換えます。

   ```
   cat > policy.json << EOF
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "RunInstancesInCapacityReservation",
               "Effect": "Allow",
               "Action": "ec2:RunInstances",
               "Resource": [
                   "arn:aws:ec2:REGION_ID:ACCOUNT_ID:capacity-reservation/*",
                   "arn:aws:resource-groups:REGION_ID:ACCOUNT_ID:group/*"
               ]
           }
       ]
   }
   EOF
   ```

1. **作成した json ファイル AWS アカウント を使用して、 で IAM ポリシーを作成します。**

   ```
   $ aws iam create-policy --policy-name RunInstancesCapacityReservation --policy-document file://policy.json
   ```

1. **次のポストインストールスクリプトをインスタンス上でローカルに作成し、`postinstall.sh` という名前を付けます。**

   を AWS アカウント ID `ACCOUNT_ID`に、 を AWS リージョン ID (us-east-1 など) `REGION_ID`に置き換えます。

   ```
   #!/bin/bash
   set -e
   
   # Override run_instance attributes
   cat > /opt/slurm/etc/pcluster/run_instances_overrides.json << EOF
   {
       "my-queue": {
           "my-compute-resource": {
               "CapacityReservationSpecification": {
                   "CapacityReservationTarget": {
                       "CapacityReservationResourceGroupArn": "arn:aws:resource-groups:REGION_ID:ACCOUNT_ID:group/EC2CRGroup"
                   }
               }
           }
       }
   }
   EOF
   ```

   Amazon S3 バケットにファイルをアップロードします。*amzn-s3-demo-bucket* は、特定の S3 バケット名に置き換えます。

   ```
   $ aws s3 mb s3://amzn-s3-demo-bucket
   aws s3 cp postinstall.sh s3://amzn-s3-demo-bucket/postinstall.sh
   ```

1. **プレースホルダーを独自の値に置き換えて、ローカルクラスター設定を作成します。**

   ```
   Region: REGION_ID
   Image:
     Os: alinux2
   HeadNode:
     InstanceType: c5.2xlarge
     Ssh:
       KeyName: YOUR_SSH_KEY
     Iam:
       S3Access:
         - BucketName: amzn-s3-demo-bucket
       AdditionalIamPolicies:
         - Policy: arn:aws:iam::ACCOUNT_ID:policy/RunInstancesCapacityReservation
     ## This post-install script is executed after the node is configured.
     ## It is used to install scripts at boot time and specific configurations
     ## In the script below we are overriding the calls to RunInstance to force
     ## the provisioning of our my-queue partition to go through
     ## the On-Demand Capacity Reservation
     CustomActions:
       OnNodeConfigured:
         Script: s3://amzn-s3-demo-bucket/postinstall.sh
     Networking:
       SubnetId: YOUR_PUBLIC_SUBNET_IN_TARGET_AZ
   
   Scheduling:
     Scheduler: slurm
     SlurmQueues:
       - Name: my-queue
         ComputeResources:
           - MinCount: 0
             MaxCount: 100
             InstanceType: p4d.24xlarge
             Name: my-compute-resource
             Efa:
               Enabled: true
         Networking:
           ## PlacementGroup:
           ##   Enabled: true ## Keep PG disabled if using targeted ODCR
           SubnetIds:
             - YOUR_PRIVATE_SUBNET_IN_TARGET_AZ
   ```

1. **クラスターを作成します。**

   次のコマンドを使用してクラスターを作成します。`cluster-config.yaml` を構成ファイル名に、`cluster-dl` をクラスター名に、*REGION\$1ID* をリージョン ID (us-east-1 など) に置き換えます。

   ```
   $ pcluster create-cluster --cluster-configuration cluster-config.yaml --cluster-name cluster-dl --region REGION_ID
   ```

   クラスターが作成されると、ポストインストールスクリプトはヘッドノードで実行されます。このスクリプトは `run_instances_overrides.json` ファイルを作成し、`RunInstances` の呼び出しをオーバーライドして、パーティションのプロビジョニングがオンデマンドキャパシティ予約を経由するように強制します。

   クラスターのスケーリングを担当する AWS ParallelCluster デーモンは、起動された新しいインスタンスに対してこの設定を自動的に使用します。指定したパラメータがインスタンスのプロビジョニングに使用されていることを確認するには、以下のログファイルを確認します。
   + `/var/log/parallelcluster/clustermgtd` (静的容量 - [`MinCount`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MinCount)` > 0`)
   + `/var/log/parallelcluster/slurm_resume.log` (動的容量)

   パラメータが正しければ、ログエントリには以下が含まれます。

   ```
   Found RunInstances parameters override. Launching instances with: <parameters_list>
   ```

 **`RunInstances` オーバーライドの更新** 

生成された JSON 設定は、コンピューティングフリートを停止せずにいつでも更新できます。変更が適用されると、すべての新しいインスタンスは更新された設定で起動します。実行中のノードに更新された設定を適用する必要がある場合は、インスタンスの終了を強制してノードをリサイクルし、 がそれらのノードを置き換える AWS ParallelCluster のを待ちます。そのためには、Amazon EC2 コンソールまたは AWS CLIからインスタンスを終了するか、Slurm ノードを `DOWN` 状態または `DRAIN` 状態に設定します。

次のコマンドを使用して、Slurm ノードを `DOWN` または `DRAIN` に設定します。

```
$ scontrol update nodename=my-queue-dy-my-compute-resource-1 state=down reason=your_reason
scontrol update nodename=my-queue-dy-my-compute-resource-1 state=drain reason=your_reason
```