

# Tutorial: Configure la flota de EC2 para lanzar instancias en varios tipos de reserva de capacidad mediante un grupo de recursos de reserva de capacidad
<a name="ec2-fleet-launch-instances-multiple-cr-types-walkthrough"></a>

En este tutorial se explican los pasos para configurar una flota de EC2 que lance instancias en varios tipos de reserva de capacidad, como reservas de capacidad bajo demanda (ODCR), bloques de capacidad para machine learning y reservas de capacidad interrumpibles, mediante un único grupo de recursos de reserva de capacidad.

Aprenderá a crear un grupo de recursos de reserva de capacidad que contenga diferentes tipos de reserva de capacidad, a configurar la flota de EC2 para que priorice estos tipos en un orden específico y, de manera opcional, a recurrir a la capacidad bajo demanda cuando la capacidad reservada no sea suficiente para alcanzar el objetivo.

## Consideraciones
<a name="ec2-fleet-multiple-cr-types-considerations"></a>
+ Cuando se utiliza `ReservedCapacityOptions`, solo se admiten solicitudes de flota de EC2 de tipo `instant`.
+ Debe especificar explícitamente en la lista `ReservationTypes` los tipos de reserva de capacidad que se utilizarán como destino. La flota de EC2 solo lanza instancias en los tipos de reserva de capacidad que especifique.
+ `ReservedCapacityOptions` es mutuamente excluyente con `OnDemandOptions.CapacityReservationOptions`. No puede utilizar ambos en una misma solicitud de flota de EC2.

En este tutorial se presupone que ya dispone de las siguientes reservas de capacidad en la cuenta:
+ Una ODCR (`cr-1234567890abcdef1`) para `p5.48xlarge` en `us-east-1a`
+ Una ODCR (`cr-abcdef1234567890a`) para `p4d.48xlarge` en `us-east-1b`
+ Un bloque de capacidad (`cr-0123456789abcdef0`) para `p5.48xlarge` en `us-east-1a`
+ Una reserva de capacidad interrumpible (`cr-9876543210fedcba9`) para `p5.48xlarge` en `us-east-1a`, que otra cuenta de la organización ha compartido con usted

## Verificar permisos
<a name="ec2-fleet-multiple-cr-types-verify-permissions"></a>

Antes de crear una flota de EC2, compruebe que tiene un rol de IAM con los permisos necesarios. Para obtener más información, consulte [Requisitos previos de flota de EC2](ec2-fleet-prerequisites.md).

## Paso 1: Cree un grupo de recursos de reserva de capacidad
<a name="ec2-fleet-multiple-cr-types-step1"></a>

Cree un grupo de recursos de reserva de capacidad que contenga las reservas de capacidad que utiliza como destino la flota de EC2. Configure el grupo para que acepte reservas de capacidad de cualquier tipo de instancia y de cualquier tipo de reserva de capacidad. Esto permite que el grupo contenga una combinación de tipos de reserva de capacidad. Para obtener instrucciones paso a paso, consulte [Grupos de reserva de capacidad](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cr-groups.html).

**nota**  
Cuando cree el grupo, no especifique los parámetros `instance-type` ni `reservation-type` en la configuración `AWS::EC2::CapacityReservationPool`. Si omite estos parámetros, el grupo puede aceptar reservas de capacidad de cualquier tipo de instancia y de cualquier tipo de reserva de capacidad.

## Paso 2: Agregue reservas de capacidad al grupo
<a name="ec2-fleet-multiple-cr-types-step2"></a>

Agregue las reservas de capacidad al grupo de recursos de reserva de capacidad. Puede agregar cualquier combinación de ODCR, bloques de capacidad para machine learning, reservas de capacidad interrumpibles y bloques de capacidad de UltraServer. Para este tutorial, agregue las cuatro reservas de capacidad que se indican al principio. Para obtener instrucciones paso a paso, consulte [Grupos de reserva de capacidad](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cr-groups.html).

## Paso 3: crear una plantilla de lanzamiento
<a name="ec2-fleet-multiple-cr-types-step3"></a>

Utilice el comando [create-launch-template](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-launch-template.html) para crear una plantilla de lanzamiento que tenga como destino el grupo de recursos de reserva de capacidad. Cuando utiliza `ReservedCapacityOptions` en la configuración de la flota de EC2, no es necesario establecer `MarketType` en la plantilla de lanzamiento. La flota de EC2 lo establece automáticamente para cada tipo de reserva de capacidad.

```
aws ec2 create-launch-template \
    --launch-template-name {{my-cr-resource-group-template}} \
    --launch-template-data \
        '{"ImageId": "ami-{{0123456789example}}",
          "CapacityReservationSpecification":
            {"CapacityReservationTarget":
                {"CapacityReservationResourceGroupArn": "arn:aws:resource-groups:{{us-east-1}}:{{123456789012}}:group/{{my-cr-resource-group}}"}
            }
        }'
```

## Paso 4: crear una flota de EC2
<a name="ec2-fleet-multiple-cr-types-step4"></a>

Cree una flota de EC2 que tenga como destino varios tipos de reserva de capacidad del grupo de recursos de reserva de capacidad. La configuración principal es `ReservedCapacityOptions`, que especifica lo siguiente:
+ `ReservationTypes`: una lista ordenada de los tipos de reserva de capacidad que se utilizarán como destino. La flota de EC2 procesa los tipos en este orden. Los valores válidos son `on-demand-capacity-reservation`, `capacity-block` y `interruptible-capacity-reservation`.
+ `AllocationStrategy`: cómo se priorizan los tipos de instancia dentro de cada tipo de reserva de capacidad. Establezca este valor en `prioritized` para seguir el orden de reemplazo de los tipos de instancia.
+ `ReservedCapacityFallbackOptions`: establezca `MarketTypes` en `["on-demand"]` para lanzar instancias bajo demanda cuando la capacidad reservada no sea suficiente. Si no especifica opciones alternativas, la flota de EC2 no recurre a ningún otro tipo de mercado una vez que se agotan los tipos de reserva de capacidad especificados.

Cree un archivo llamado `config.json` con el siguiente contenido. En el ejemplo siguiente, reemplace los identificadores de recursos por sus propios identificadores de recursos.

```
{
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "{{my-cr-resource-group-template}}",
                "Version": "1"
            },
            "Overrides": [
                {
                    "InstanceType": "{{p5.48xlarge}}",
                    "AvailabilityZone": "{{us-east-1a}}",
                    "Priority": 1
                },
                {
                    "InstanceType": "{{p4d.48xlarge}}",
                    "AvailabilityZone": "{{us-east-1b}}",
                    "Priority": 2
                }
            ]
        }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": {{100}},
        "DefaultTargetCapacityType": "reserved-capacity"
    },
    "ReservedCapacityOptions": {
        "ReservationTypes": ["on-demand-capacity-reservation", "capacity-block", "interruptible-capacity-reservation"],
        "ReservedCapacityFallbackOptions": {
            "MarketTypes": ["on-demand"]
        },
        "AllocationStrategy": "prioritized"
    },
    "Type": "instant"
}
```

Utilice el comando [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) para lanzar la flota:

```
aws ec2 create-fleet --cli-input-json file://config.json
```

Para obtener más información, consulte [Crear una flota de EC2](create-ec2-fleet.md).

**Cómo resuelve la flota de EC2 las reservas de capacidad**  
Según la configuración anterior, la flota de EC2 intenta lanzar las instancias en el siguiente orden:

1. **ODCR**: primero las reservas de `p5.48xlarge` (el tipo de instancia con mayor prioridad) y, a continuación, las reservas de `p4d.48xlarge`. Dentro de cada tipo de instancia, si existen varias ODCR, se selecciona una al azar.

1. **Bloques de capacidad**: si no queda capacidad disponible en ninguna de las ODCR, la flota de EC2 tiene como destino los bloques de capacidad, primero las reservas `p5.48xlarge` y, a continuación, las `p4d.48xlarge`, con selección aleatoria dentro de cada tipo de instancia.

1. **Reservas de capacidad interrumpibles**: si no queda capacidad disponible en ninguno de los bloques de capacidad, la flota de EC2 tiene como destino las reservas de capacidad interrumpibles, primero las reservas `p5.48xlarge` y, a continuación, las `p4d.48xlarge`, con selección aleatoria dentro de cada tipo de instancia.

1. **Recurso alternativo bajo demanda**: si la capacidad reservada no es suficiente para alcanzar el objetivo de 100 instancias, la capacidad restante se lanza como instancias bajo demanda. La flota de EC2 lanza estas instancias bajo demanda de acuerdo con la estrategia de asignación que especifique en `OnDemandOptions`.

**nota**  
La flota de EC2 determina primero el tipo de reserva de capacidad y, a continuación, el tipo de instancia dentro de cada tipo de reserva de capacidad. Cada tipo de reserva de capacidad se agota por completo antes de que la flota de EC2 pase al siguiente tipo de la lista ordenada.

## Paso 5 (opcional): Verifique las propiedades de las instancias
<a name="ec2-fleet-multiple-cr-types-step5"></a>

Utilice el comando [describe-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html) para verificar qué tipo de reserva de capacidad utilizó cada instancia. Las instancias lanzadas por la flota muestran las siguientes propiedades.


| Propiedad | Valor de reserva de capacidad bajo demanda | Valor de bloque de capacidad | Valor de reserva de capacidad interrumpible | Valor bajo demanda | 
| --- | --- | --- | --- | --- | 
| instance-lifecycle | null | capacity-block | interruptible-capacity-reservation | null | 
| capacity-reservation-id | ID de la reserva de capacidad utilizada | ID de la reserva de capacidad utilizada | ID de la reserva de capacidad utilizada | No presente | 
| capacity-reservation-specification | ARN del grupo | ARN del grupo | ARN del grupo | No presente | 

Puede filtrar las instancias por grupo de recursos de reserva de capacidad mediante el siguiente comando:

```
aws ec2 describe-instances \
    --filters "Name=capacity-reservation-specification.capacity-reservation-target.capacity-reservation-resource-group-arn,Values=arn:aws:resource-groups:{{us-east-1}}:{{123456789012}}:group/{{my-cr-resource-group}}"
```

## Limpieza
<a name="ec2-fleet-multiple-cr-types-cleanup"></a>

Para dejar de incurrir en cargos, termine las instancias cuando dejen de ser necesarias. Tenga en cuenta que las instancias lanzadas en bloques de capacidad se terminan automáticamente cuando finaliza la reserva del bloque de capacidad. Las instancias lanzadas en reservas de capacidad interrumpibles se terminan automáticamente si el propietario de la capacidad recupera la capacidad.

## Recursos relacionados
<a name="ec2-fleet-multiple-cr-types-related-resources"></a>
+ [Grupos de reserva de capacidad](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cr-groups.html)
+ [bloques de capacidad para ML](ec2-capacity-blocks.md)
+ [Reservas de capacidad interrumpible](interruptible-capacity-reservations.md)
+ [Cómo reservar capacidad de computación con las reservas de capacidad bajo demanda de EC2](ec2-capacity-reservations.md)
+ [Trabajar con la flota de EC2](manage-ec2-fleet.md)
+ [Crear una flota de EC2](create-ec2-fleet.md)
+ [Almacenamiento de parámetros de inicialización de instancias en plantillas de inicialización de Amazon EC2](ec2-launch-templates.md)