

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Inicio de instancias con reservas de capacidad bajo demanda (ODCR)
<a name="launch-instances-odcr-v3"></a>

Con las [reservas de capacidad bajo demanda](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html) (ODCR) puede reservar capacidad para las instancias de Amazon EC2 de su clúster en una zona de disponibilidad específica. De este modo, puede crear y administrar reservas de capacidad de forma independiente de las cuentas de facturación que ofrecen los [Savings Plans](https://aws.amazon.com/savingsplans/) o las [Instancias reservadas regionales](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/reserved-instances-scope.html).

Puede configurar ODCR `open` o `targeted`. Las ODCR *abiertas* cubren cualquier instancia que coincida con los atributos de la ODCR. Estos atributos son el tipo de instancia, la plataforma y la zona de disponibilidad. Debe definir de forma explícita las ODCR *específicas* en la configuración del clúster. Para determinar si una ODCR es `open` o `targeted`, ejecute el comando [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) de la AWS CLI de Amazon EC2.

También puede crear una ODCR en un grupo con ubicación en clúster que se denomina [reserva de capacidad bajo demanda de un grupo con ubicación en clúster (CPG ODCR)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cr-cpg.html).

Se ODCRs pueden agrupar varias en un grupo de recursos. Esto se puede definir en el archivo de configuración del clúster. Para obtener más información acerca de los grupos de recursos, consulte [¿Qué son los grupos de recursos?](https://docs.aws.amazon.com/ARG/latest/userguide/resource-groups.html) en la *Guía del usuario de grupos de recursos y etiquetas*.

## Uso de ODCR con AWS ParallelCluster
<a name="odcr-parallelcuster-v3"></a>

AWS ParallelCluster admite ODCR abierto. Al utilizar una ODCR abierta, no es necesario especificar nada en AWS ParallelCluster. Las instancias se seleccionan automáticamente para el clúster. Puede especificar un grupo de ubicación existente o hacer que AWS ParallelCluster cree uno nuevo para usted.

### ODCR en la configuración del clúster
<a name="odcr-parallelcuster-config-v3"></a>

A partir de la AWS ParallelCluster versión 3.3.0, puede definir los ODCR en el archivo de configuración del clúster, sin necesidad de especificar las anulaciones de instancias de ejecución de Amazon EC2.

Comience por crear [reservas de capacidad](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/capacity-reservations-using.html) y [grupos de recursos](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-cr-group.html) mediante los métodos descritos en la documentación vinculada para cada uno. Debe utilizar los métodos para crear grupos de reserva de AWS CLI capacidad. Si usa el Consola de administración de AWS, solo puede crear grupos de recursos basados en etiquetas o en pilas. Los grupos de recursos basados en etiquetas y en pilas no son compatibles con instancias con reservas de capacidad AWS ParallelCluster ni AWS CLI cuando se lanzan.

Una vez que se hayan creado las reservas de capacidad y los grupos de recursos, especifíquelos en [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[`CapacityReservationTarget`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-CapacityReservationTarget) o [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[`ComputeResources`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-ComputeResources)/[`CapacityReservationTarget`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-CapacityReservationTarget), tal y como se muestra en el siguiente ejemplo de configuración de clúster. Sustituya los valores *values* resaltados en rojo por los valores válidos.

```
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
```

### OBSOLETO O NO RECOMENDADO: ODCR de destino con anulaciones de instancias de Amazon EC2
<a name="odcr-parallelcuster-override-v3"></a>

**aviso**  
A partir de AWS ParallelCluster la versión 3.3.0, no recomendamos este método. Esta sección sigue siendo una referencia para las implementaciones que utilizan versiones anteriores.
Este método no es compatible con la asignación de varios tipos de instancias con Slurm.

Support for `targeted` ODCRs se añade en la versión AWS ParallelCluster 3.1.1. En esta versión, se introdujo un mecanismo que anula los parámetros `RunInstances` de EC2 y transmite información sobre la reserva para utilizarla en cada recurso de computación configurado en AWS ParallelCluster. Este mecanismo es compatible con las ODCR `targeted`. Sin embargo, cuando utilice las ODCR `targeted`, debe especificar la configuración de anulación de `run-instances`. El *objetivo* ODCRs debe definirse explícitamente en el AWS CLI comando 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). Para determinar si un ODCR es `open` o `targeted` ejecute el comando AWS CLI Amazon [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)EC2.

Se ODCRs pueden agrupar varios en un grupo de recursos. Esto se puede usar en la anulación de instancias de ejecución para apuntar a varias instancias ODCRs al mismo tiempo.

Si utiliza una ODCR `targeted`, puede especificar un grupo de ubicaciones. Sin embargo, también debe especificar una configuración de anulación de `run-instances`.

Suponga que eso AWS creó un `targeted` ODCR para usted o que tiene un conjunto específico de instancias reservadas. Entonces, no puede especificar un grupo de ubicación. Las reglas configuradas por AWS pueden entrar en conflicto con la configuración del grupo de ubicación. Por lo tanto, si necesita un grupo de ubicación para su solicitud, utilice una [CPG ODCR](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cr-cpg.html). En cualquier caso, también debe especificar la configuración de anulación de `run-instances`.

Si utiliza una CPG ODCR, debe especificar la configuración de anulación de `run-instances` y el mismo grupo de ubicación en la configuración del clúster.

### Uso de instancias reservadas con AWS ParallelCluster
<a name="odcr-reserved-instances"></a>

Las instancias reservadas [son diferentes](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html#capacity-reservations-differences) de las reservas de capacidad (ODCR). Hay [dos tipos](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/reserved-instances-scope.html) de instancias reservadas. Una instancia reservada *regional* no reserva capacidad. Una instancia reservada *de zona* reserva capacidad en la zona de disponibilidad especificada.

Si tiene instancias reservadas regionales, no hay reserva de capacidad y es posible que se produzcan errores de capacidad insuficiente. Si tiene instancias reservadas de zona, tiene reserva de capacidad, pero no hay parámetros de API de `run-instances` que pueda usar para especificarlas.

Las instancias reservadas son compatibles con cualquier AWS ParallelCluster versión. No es necesario especificar nada AWS ParallelCluster y las instancias se seleccionan automáticamente.

Al utilizar instancias reservadas de zona, puede evitar posibles errores de capacidad insuficiente omitiendo la especificación del grupo de ubicación en la configuración del clúster.

### OBSOLETO O NO RECOMENDADO: se utiliza la `RunInstances` personalización en AWS ParallelCluster 3 para las reservas de capacidad `targeted` bajo demanda (ODCR)
<a name="odcr-run-instances"></a>

**aviso**  
A partir de AWS ParallelCluster la versión 3.3.0, no recomendamos este método. Esta sección sigue siendo una referencia para las implementaciones que utilizan versiones anteriores.
Este método no es compatible con la asignación de varios tipos de instancias con Slurm.

Puede anular los parámetros `RunInstances` de Amazon EC2 para cada recurso de computación que esté configurado en la cola de un clúster. Para ello, cree el archivo `/opt/slurm/etc/pcluster/run_instances_overrides.json` en el nodo principal del clúster con el siguiente contenido del fragmento de código:
+ `${queue_name}` es el nombre de la cola a la que desea aplicar anulaciones.
+ `${compute_resource_name}` es el recurso de computación al que desea aplicar anulaciones.
+ `${overrides}`es un objeto JSON arbitrario que contiene una lista de `RunInstances` anulaciones para utilizarlas en una combinación específica de tipo de cola e instancia. La sintaxis de las anulaciones debe seguir las mismas especificaciones que se documentan en una llamada boto3 a [run\$1instances](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html#EC2.Client.run_instances).

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

Por ejemplo, el siguiente JSON configura el grupo de ODCR `group_arn` para que se utilice en las instancias de `p4d.24xlarge` configuradas en `my-queue` y `my-compute-resource`.

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

Una vez generado este archivo JSON, los AWS ParallelCluster demonios responsables del escalado del clúster utilizan automáticamente la configuración de anulación para el lanzamiento de instancias. Para confirmar que los parámetros especificados se utilizan para el aprovisionamiento de instancias, consulte los siguientes archivos de registro:
+ `/var/log/parallelcluster/clustermgtd` (para capacidad estática)
+ `/var/log/parallelcluster/slurm_resume.log` (para capacidad dinámica)

Si los parámetros son correctos, encontrará una entrada de registro que contiene lo siguiente:

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

### OBSOLETO O NO RECOMENDADO: cree un clúster con reservas de capacidad bajo demanda (ODCR) `targeted`
<a name="odcr-create-cluster"></a>

**aviso**  
A partir de AWS ParallelCluster la versión 3.3.0, no recomendamos este método. Esta sección sigue siendo una referencia para las implementaciones que utilizan versiones anteriores.
Este método no es compatible con [Asignación de varios tipos de instancias con Slurm](slurm-multiple-instance-allocation-v3.md).

1. **Cree un grupo de recursos para agrupar la capacidad.**

   ```
   $ 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"]}]}'
   ```
**nota**  
Un grupo de recursos no admite recursos que otras cuentas compartan.  
Si la ODCR específica la comparte otra cuenta, no es necesario crear un grupo de recursos. Utilice `CapacityReservationId` en lugar de un grupo de recursos en el paso 3.  

   ```
   #!/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
   ```

   Agregue reservas de capacidad al grupo de recursos. Cada vez que cree una ODCR nueva, agréguela a la reserva de grupo. `ACCOUNT_ID`Sustitúyala por tu ID de cuenta, `PLACEHOLDER_CAPACITY_RESERVATION` por tu ID de reserva de capacidad y `REGION_ID` por tu Región de AWS ID (por ejemplo, us-east-1).

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

   Cree un documento de política en su equipo local. `ACCOUNT_ID`Sustitúyala por tu ID de cuenta y `REGION_ID` por tu Región de AWS ID (por ejemplo, us-east-1).

   ```
   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. **Cree su política de IAM Cuenta de AWS utilizando el archivo json que creó.**

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

1. **Cree el siguiente script posterior a la instalación de forma local en la instancia y llámelo `postinstall.sh`.**

   `ACCOUNT_ID`Sustitúyala por tu Cuenta de AWS ID y `REGION_ID` por tu Región de AWS ID (por ejemplo, us-east-1).

   ```
   #!/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
   ```

   Cargue el archivo en un bucket de Amazon S3. *amzn-s3-demo-bucket*Sustitúyalo por el nombre específico de tu bucket de S3.

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

1. **Cree la configuración del clúster local y sustituya los marcadores de posición por sus propios valores.**

   ```
   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. **Cree el clúster.**

   Utilice el siguiente comando para crear el clúster. `cluster-config.yaml`Sustitúyalo por el nombre del archivo de configuración, el nombre del clúster y *REGION\$1ID* el identificador de región (por ejemplo, us-east-1). `cluster-dl`

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

   Una vez creado el clúster, el script posterior a la instalación se ejecuta en el nodo principal. El script crea el archivo `run_instances_overrides.json` y anula las llamadas a `RunInstances` para forzar el aprovisionamiento de la partición a través de la reserva de capacidad bajo demanda.

   Los AWS ParallelCluster daemons responsables del escalado del clúster utilizan automáticamente esta configuración para las nuevas instancias que se lanzan. Para confirmar que los parámetros especificados se utilizan para el aprovisionamiento de instancias, puede consultar los siguientes archivos de registro:
   + `/var/log/parallelcluster/clustermgtd` (para capacidad estática: [`MinCount`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MinCount)` > 0`)
   + `/var/log/parallelcluster/slurm_resume.log` (para capacidad dinámica)

   Si los parámetros son correctos, encontrará una entrada de registro que contiene lo siguiente.

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

 **Actualización de anulaciones de `RunInstances`** 

Puede actualizar la configuración JSON generada en cualquier momento sin detener la flota de computación. Una vez aplicados los cambios, todas las instancias nuevas se lanzan con la configuración actualizada. Si necesitas aplicar la configuración actualizada a los nodos en ejecución, recicla los nodos forzando la finalización de una instancia y espera AWS ParallelCluster a que se reemplacen esos nodos. Para ello, puede finalizar la instancia desde la consola de Amazon EC2 o AWS CLI, o bien configurar los nodos de Slurm en un estado `DOWN` o `DRAIN`.

Utilice el siguiente comando para establecer el nodo de Slurm en `DOWN` o `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
```