

# Tutorial: Configuración de la flota de EC2 para lanzar instancias bajo demanda con reservas de capacidad específicas
<a name="ec2-fleet-launch-on-demand-instances-using-targeted-capacity-reservations-walkthrough"></a>

En este tutorial se explican todos los pasos que debe realizar para que su flota de EC2 lance instancias bajo demanda en reservas de capacidad `targeted`.

Aprenderá a configurar una flota para utilizar primero las reservas de capacidad bajo demanda `targeted` al iniciar instancias bajo demanda. También aprenderá a configurar la flota para que, cuando la capacidad total de destino bajo demanda supere el número de reservas de capacidad sin utilizar disponibles, la flota utilice la estrategia de asignación especificada a fin de seleccionar los grupos de instancias en los que iniciará la capacidad de destino restante.

**Configuración de la flota de EC2**

En este tutorial, la flota está configurada de la siguiente manera:
+ Capacidad de destino: 10 instancias bajo demanda
+ Total de reservas de capacidad `targeted` sin utilizar: 6 (menos que la capacidad de destino bajo demanda de 10 instancias bajo demanda de la flota)
+ Número de grupos de reservas de capacidad: 2 (`us-east-1a` y `us-east-1b`)
+ Número de reservas de capacidad por grupo: 3
+ Estrategia de asignación bajo demanda: `lowest-price` (cuando el número de reservas de capacidad sin utilizar es menor que la capacidad de destino bajo demanda, la flota determina los grupos en los que iniciará la capacidad bajo demanda restante en función de la estrategia de asignación bajo demanda).

  Tenga en cuenta que también puede utilizar la estrategia de asignación `prioritized` en lugar de la `lowest-price`.

**Para iniciar instancias bajo demanda en reservas de capacidad `targeted`, debe realizar una serie de pasos, como se indica a continuación:**
+ [Paso 1: crear reservas de capacidad](#ec2-fleet-odcr-step1)
+ [Paso 2: crear un grupo de recursos de reserva de capacidad](#ec2-fleet-odcr-step2)
+ [Paso 3: agregar las reservas de capacidad al grupo de recursos de reserva de capacidad](#ec2-fleet-odcr-step3)
+ [(Opcional) Paso 4: ver las reservas de capacidad en el grupo de recursos](#ec2-fleet-odcr-step4)
+ [Paso 5: crear una plantilla de inicialización que especifique que la reserva de capacidad se dirige a un grupo de recursos específico](#ec2-fleet-odcr-step5)
+ [(Opcional) Paso 6: describir la plantilla de inicialización](#ec2-fleet-odcr-step6)
+ [Paso 7: crear una flota de EC2](#ec2-fleet-odcr-step7)
+ [(Opcional) Paso 8: ver el número de reservas de capacidad sin utilizar restantes](#ec2-fleet-odcr-step8)

## Paso 1: crear reservas de capacidad
<a name="ec2-fleet-odcr-step1"></a>

Utilice el comando [create-capacity-reservation](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-capacity-reservation.html) a fin de crear las reservas de capacidad, tres para `us-east-1a` y otras tres para `us-east-1b`. Excepto por la zona de disponibilidad, los demás atributos de las reservas de capacidad son idénticos.

**3 reservas de capacidad en `us-east-1a`**

```
aws ec2 create-capacity-reservation \
    --availability-zone us-east-1a \
    --instance-type c5.xlarge \
    --instance-platform Linux/UNIX \
    --instance-count 3 \
    --instance-match-criteria targeted
```

Ejemplo del ID de reserva de capacidad resultante

```
cr-1234567890abcdef1
```

**3 reservas de capacidad en `us-east-1b`**

```
aws ec2 create-capacity-reservation \
    --availability-zone us-east-1b \
    --instance-type c5.xlarge \
    --instance-platform Linux/UNIX \
    --instance-count 3 \
    --instance-match-criteria targeted
```

Ejemplo del ID de reserva de capacidad resultante

```
cr-54321abcdef567890
```

## Paso 2: crear un grupo de recursos de reserva de capacidad
<a name="ec2-fleet-odcr-step2"></a>

Utilice el servicio `resource-groups` y el comando [create-group](https://docs.aws.amazon.com/cli/latest/reference/resource-groups/create-group.html) para crear un grupo de recursos de reserva de capacidad. En este ejemplo, el grupo de recursos se llama `my-cr-group`. Para obtener información sobre por qué debe crear un grupo de recursos, consulte [Utilice las reservas de capacidad para reservar capacidad bajo demanda en la flota de EC2](ec2-fleet-on-demand-capacity-reservations.md).

```
aws resource-groups create-group \
    --name my-cr-group \
    --configuration '{"Type":"AWS::EC2::CapacityReservationPool"}' '{"Type":"AWS::ResourceGroups::Generic", "Parameters": [{"Name": "allowed-resource-types", "Values": ["AWS::EC2::CapacityReservation"]}]}'
```

## Paso 3: agregar las reservas de capacidad al grupo de recursos de reserva de capacidad
<a name="ec2-fleet-odcr-step3"></a>

Utilice el servicio `resource-groups` y el comando [group-resources](https://docs.aws.amazon.com/cli/latest/reference/resource-groups/group-resources.html) para agregar las reservas de capacidad que creó en el paso 1 al grupo de recursos de reserva de capacidad. Tenga en cuenta que debe hacer referencia a las reservas de capacidad bajo demanda por sus ARN.

```
aws resource-groups group-resources \
    --group my-cr-group \
    --resource-arns \
      arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-1234567890abcdef1 \
      arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-54321abcdef567890
```

Ejemplo de resultado

```
{
   "Failed": [], 
   "Succeeded": [ 
   "arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-1234567890abcdef1", 
   "arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-54321abcdef567890" 
   ] 
}
```

## (Opcional) Paso 4: ver las reservas de capacidad en el grupo de recursos
<a name="ec2-fleet-odcr-step4"></a>

Utilice el servicio `resource-groups` y el comando [list-group-resources](https://docs.aws.amazon.com/cli/latest/reference/resource-groups/list-group-resources.html) para describir opcionalmente el grupo de recursos y ver sus reservas de capacidad.

```
aws resource-groups list-group-resources --group my-cr-group
```

Ejemplo de resultado

```
{
    "ResourceIdentifiers": [
        {
            "ResourceType": "AWS::EC2::CapacityReservation",
            "ResourceArn": "arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-1234567890abcdef1"
        },
        {
            "ResourceType": "AWS::EC2::CapacityReservation",
            "ResourceArn": "arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-54321abcdef567890"
        }
    ]
}
```

## Paso 5: crear una plantilla de inicialización que especifique que la reserva de capacidad se dirige a un grupo de recursos específico
<a name="ec2-fleet-odcr-step5"></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 inicialización en la que se especificarán las reservas de capacidad que se utilizarán. En este ejemplo, la flota utilizará reservas de capacidad `targeted`, que se han agregado a un grupo de recursos. Por lo tanto, los datos de la plantilla de inicialización especifican que la reserva de capacidad se dirige a un grupo de recursos específico. En este ejemplo, la plantilla de inicialización se llama `my-launch-template`. 

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

## (Opcional) Paso 6: describir la plantilla de inicialización
<a name="ec2-fleet-odcr-step6"></a>

Utilice el comando [describe-launch-template-versions](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-launch-template-versions.html) para describir opcionalmente la plantilla de inicialización y ver su configuración.

```
aws ec2 describe-launch-template-versions --launch-template-name my-launch-template
```

Ejemplo de resultado

```
{
    "LaunchTemplateVersions": [
        {
            "LaunchTemplateId": "lt-01234567890example",
            "LaunchTemplateName": "my-launch-template",
            "VersionNumber": 1,
            "CreateTime": "2021-01-19T20:50:19.000Z",
            "CreatedBy": "arn:aws:iam::123456789012:user/Admin",
            "DefaultVersion": true,
            "LaunchTemplateData": {
                "ImageId": "ami-0947d2ba12ee1ff75",
                "CapacityReservationSpecification": {
                    "CapacityReservationTarget": {
                        "CapacityReservationResourceGroupArn": "arn:aws:resource-groups:us-east-1:123456789012:group/my-cr-group"
                    }
                }
            }
        }
    ]
}
```

## Paso 7: crear una flota de EC2
<a name="ec2-fleet-odcr-step7"></a>

Cree una flota de EC2 que especifique la información de configuración de las instancias que iniciará. La siguiente configuración de flota de EC2 solo muestra las configuraciones pertinentes para este ejemplo. La plantilla de inicialización `my-launch-template` es la plantilla de inicialización que creó en el paso 5. Hay dos grupos de instancias, cada uno con el mismo tipo de instancias (`c5.xlarge`), pero con diferentes zonas de disponibilidad (`us-east-1a` y `us-east-1b`). El precio de los grupos de instancias es el mismo porque los precios se definen para la región, no por zona de disponibilidad. La capacidad total de destino es de 10 y el tipo de capacidad de destino predeterminado es `on-demand`. La estrategia de asignación bajo demanda es `lowest-price`. La estrategia de uso para las reservas de capacidad es `use-capacity-reservations-first`.

**nota**  
El tipo de flota debe ser `instant`. Otros tipos de flotas no admiten `use-capacity-reservations-first`.

```
{
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateName": "my-launch-template",
                "Version": "1"
            },
            "Overrides": [
               {
                   "InstanceType": "c5.xlarge",
                   "AvailabilityZone": "us-east-1a"
               },
               {
                    "InstanceType": "c5.xlarge",
                    "AvailabilityZone": "us-east-1b"
               }
            ]
        }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 10,
        "DefaultTargetCapacityType": "on-demand"
    },
    "OnDemandOptions": {
        "AllocationStrategy": "lowest-price",
        "CapacityReservationOptions": {
             "UsageStrategy": "use-capacity-reservations-first"
         }
    },
    "Type": "instant"
}
```

Después de crear la flota `instant` con la configuración anterior, se inician las siguientes 10 instancias para cumplir con la capacidad de destino:
+ Las reservas de capacidad se utilizan en primer lugar para iniciar 6 instancias bajo demanda de la siguiente manera:
  + 3 instancias bajo demanda se lanzan en las 3 reservas de capacidad `targeted` `c5.xlarge` en `us-east-1a`
  + 3 instancias bajo demanda se lanzan en las 3 reservas de capacidad `targeted` `c5.xlarge` en `us-east-1b`
+ Para alcanzar la capacidad de destino, se inician 4 instancias bajo demanda adicionales en la capacidad bajo demanda normal de acuerdo con la estrategia de asignación bajo demanda, que es `lowest-price` en este ejemplo. Sin embargo, dado que los grupos tienen el mismo precio (porque el precio es por región y no por zona de disponibilidad), la flota inicia las 4 instancias bajo demanda restantes en cualquiera de los grupos.

## (Opcional) Paso 8: ver el número de reservas de capacidad sin utilizar restantes
<a name="ec2-fleet-odcr-step8"></a>

Después de iniciar la flota, opcionalmente puede ejecutar [describe-capacity-reservations](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-capacity-reservations.html) para ver cuántas reservas de capacidad sin utilizar quedan. En este ejemplo, debería ver la siguiente respuesta, que muestra que se utilizaron todas las reservas de capacidad de todos los grupos.

```
{ "CapacityReservationId":  "cr-111",
     "InstanceType":  "c5.xlarge",  
     "AvailableInstanceCount":  0
}

 { "CapacityReservationId":  "cr-222",
     "InstanceType":  "c5.xlarge", 
     "AvailableInstanceCount":  0
}
```