

# Crear una flota de EC2
<a name="create-ec2-fleet"></a>

Para crear una flota de EC2, defina la configuración de la flota en un archivo JSON y haga referencia al archivo con el comando [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html). En el archivo JSON, especifique la capacidad objetivo total de la flota, las capacidades objetivo separadas para instancias de spot e instancias bajo demanda y una plantilla de inicialización que defina la configuración de las instancias de la flota, como una AMI, un tipo de instancia, una subred o una zona de disponibilidad, y uno o varios grupos de seguridad. Si lo desea, puede especificar configuraciones adicionales, como parámetros para anular la configuración de la plantilla de inicialización, estrategias de asignación para seleccionar instancias de spot e instancias bajo demanda de los grupos de capacidad de EC2 y el importe máximo que está dispuesto a pagar por la flota. Para obtener más información, consulte [Opciones de configuración para la flota de EC2 o la flota de spot](ec2-fleet-configuration-strategies.md).

La flota de EC2 inicia instancias bajo demanda cuando hay capacidad disponible e inicia instancias de spot cuando el precio máximo es superior al precio de spot y hay capacidad disponible.

Si la flota incluye instancias de spot y es de tipo `maintain`, Amazon EC2 intentará mantener la capacidad objetivo de la flota cuando las instancias de spot se interrumpan.

## Limitaciones de la flota de EC2
<a name="EC2-fleet-limitations"></a>

Las limitaciones siguientes son aplicables a la flota de EC2:
+ La creación de un flota de EC2 solo está disponible a través de la [API de Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html), [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html), [SDK de AWS](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html#API_CreateFleet_SeeAlso) y [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ec2fleet.html).
+ Una solicitud de flota de EC2 no puede abarcar varias regiones de AWS. Es preciso crear una flota de EC2 independiente para cada región.
+ Una solicitud de flota de EC2 no puede abarcar diferentes subredes de la misma zona de disponibilidad.

## Crear una flota de EC2
<a name="create-ec2-fleet-procedure"></a>

Para iniciar una flota de instancias con la flota de EC2, solo necesita especificar los siguientes parámetros en su solicitud de flota, y la flota utilizará los valores predeterminados para los demás parámetros:
+ `LaunchTemplateId` o `LaunchTemplateName`: especifica la plantilla de inicialización que se va a utilizar (que contiene los parámetros de las instancias que se van a iniciar, como el tipo de instancia y la zona de disponibilidad)
+ `TotalTargetCapacity`: especifica la capacidad objetivo total de la flota
+ `DefaultTargetCapacityType`: especifica si la opción de compra predeterminada es bajo demanda o spot

Para reemplazar los parámetros especificados en la plantilla de inicialización, puede especificar una o varias anulaciones. Cada anulación puede variar según el tipo de instancia, la zona de disponibilidad, la subred y el precio máximo. Además, pueden incluir una capacidad ponderada distinta. Como alternativa para especificar el tipo de instancia, puede especificar los atributos que debe tener una instancia y Amazon EC2 identificará todos los tipos de instancias con esos atributos. Para obtener más información, consulte [Especifique atributos para la selección del tipo de instancia para la flota de EC2 o flota de spot](ec2-fleet-attribute-based-instance-type-selection.md).

Para las flotas de EC2 de tipo `instant`, puede especificar un parámetro Systems Manager en lugar del ID de AMI. Puede especificar el parámetro Systems Manager en la plantilla de anulación o de inicialización. Para obtener más información, consulte [Uso de un parámetro de Systems Manager en lugar de un ID de AMI](create-launch-template.md#use-an-ssm-parameter-instead-of-an-ami-id).

Puede especificar los parámetros de flota en un archivo JSON. Para obtener información sobre todos los parámetros posibles que puede especificar, consulte [Ver todas las opciones de configuración de la flota de EC2](#ec2-fleet-cli-skeleton). 

Para obtener ejemplos de configuración de flota, consulte [Configuraciones de CLI de ejemplo para la flota de EC2](ec2-fleet-examples.md).

En este momento, no hay compatibilidad con la consola para crear una flota de EC2.

**Para crear una flota de EC2**  
Utilice el comando [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) para crear la flota y especificar el archivo JSON que contiene los parámetros de configuración de flota.

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

A continuación se muestra un resultado de ejemplo para una flota de tipo `request` o `maintain`.

```
{
    "FleetId": "fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE"
}
```

A continuación se muestra un resultado de ejemplo para una flota de tipo `instant` que lanzó la capacidad de destino.

```
{
  "FleetId": "fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE",
  "Errors": [],
  "Instances": [
    {
      "LaunchTemplateAndOverrides": {
        "LaunchTemplateSpecification": {
          "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE",
          "Version": "1"
        },
        "Overrides": {
          "InstanceType": "c5.large",
          "AvailabilityZone": "us-east-1a"
        }
      },
      "Lifecycle": "on-demand",
      "InstanceIds": [
        "i-1234567890abcdef0",
        "i-9876543210abcdef9" 
      ],
      "InstanceType": "c5.large",
      "Platform": null
    },
    {
      "LaunchTemplateAndOverrides": {
        "LaunchTemplateSpecification": {
          "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE",
          "Version": "1"
        },
        "Overrides": {
          "InstanceType": "c4.large",
          "AvailabilityZone": "us-east-1a"
        }
      },
      "Lifecycle": "on-demand",
      "InstanceIds": [
        "i-5678901234abcdef0",
        "i-5432109876abcdef9" 
      ]
  ]
}
```

A continuación se muestra un resultado de ejemplo para una flota de tipo `instant` que lanzó parte de la capacidad de destino con errores para instancias que no se habían iniciado.

```
{
  "FleetId": "fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE",
  "Errors": [
    {
      "LaunchTemplateAndOverrides": {
        "LaunchTemplateSpecification": {
          "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE",
          "Version": "1"
        },
        "Overrides": {
          "InstanceType": "c4.xlarge",
          "AvailabilityZone": "us-east-1a",
        }
      },
      "Lifecycle": "on-demand",
      "ErrorCode": "InsufficientInstanceCapacity",
      "ErrorMessage": ""
    },
  ],
  "Instances": [
    {
      "LaunchTemplateAndOverrides": {
        "LaunchTemplateSpecification": {
          "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE",
          "Version": "1"
        },
        "Overrides": {
          "InstanceType": "c5.large",
          "AvailabilityZone": "us-east-1a"
        }
      },
      "Lifecycle": "on-demand",
      "InstanceIds": [
        "i-1234567890abcdef0",
        "i-9876543210abcdef9" 
      ]
  ]
}
```

A continuación se muestra un resultado de ejemplo para una flota de tipo `instant` que lanzó sin instancias.

```
{
  "FleetId": "fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE",
  "Errors": [
    {
      "LaunchTemplateAndOverrides": {
        "LaunchTemplateSpecification": {
          "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE",
          "Version": "1"
        },
        "Overrides": {
          "InstanceType": "c4.xlarge",
          "AvailabilityZone": "us-east-1a",
        }
      },
      "Lifecycle": "on-demand",
      "ErrorCode": "InsufficientCapacity",
      "ErrorMessage": ""
    },
    {
      "LaunchTemplateAndOverrides": {
        "LaunchTemplateSpecification": {
          "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE",
          "Version": "1"
        },
        "Overrides": {
          "InstanceType": "c5.large",
          "AvailabilityZone": "us-east-1a",
        }
      },
      "Lifecycle": "on-demand",
      "ErrorCode": "InsufficientCapacity",
      "ErrorMessage": ""
    },
  ],
  "Instances": []
}
```

## Crear una flota de EC2 que sustituya instancias de spot en mal estado
<a name="ec2-fleet-health-checks"></a>

La flota de EC2 comprueba el estado de las instancias de la flota cada dos minutos. El estado de una instancia puede ser `healthy` o `unhealthy`.

La flota de EC2 determina el estado de una instancia a partir de las comprobaciones de estado que proporciona Amazon EC2. Una instancia se determina como `unhealthy` cuando el estado de la comprobación del estado de la instancia o de la comprobación del estado del sistema es `impaired` durante tres comprobaciones de estado de mantenimiento consecutivas. Para obtener más información, consulte [Comprobaciones de estado de las instancias de Amazon EC2](monitoring-system-instance-status-check.md).

Puede configurar la flota para sustituir la Instancias de spot en mal estado. Después de establecer `ReplaceUnhealthyInstances` en `true`, se sustituye una instancia de spot cuando se informa como `unhealthy`. La flota puede ver reducida su capacidad de destino durante unos minutos mientras se sustituye una instancia de spot en mal estado.

**Requisitos**
+ El reemplazo por comprobación de estado se admite solo para flotas de EC2 que mantengan una capacidad de destino (flotas de tipo `maintain`) y no para flotas de tipo `request` o `instant`.
+ Solo se admite el reemplazo por comprobación de estado para instancias de spot. Esta función no es compatible con instancias bajo demanda.
+ Solo puede configurar una flota de EC2 para sustituir instancias en mal estado al crearla.
+ Los usuarios pueden utilizar el reemplazo por comprobación de estado únicamente si tienen permiso para llamar a la acción `ec2:DescribeInstanceStatus`.

**Para configurar una flota de EC2 que sustituya instancias de spot en mal estado**

1. Utilice la información en [Crear una flota de EC2](#create-ec2-fleet-procedure) para crear una flota de EC2.

1. Para configurar la flota que sustituya instancias de spot en mal estado, en el archivo JSON, para `ReplaceUnhealthyInstances`, especifique `true`. 

## Ver todas las opciones de configuración de la flota de EC2
<a name="ec2-fleet-cli-skeleton"></a>

Para ver la lista completa de los parámetros de configuración de la flota de EC2 puede generar un archivo JSON. Para obtener una descripción de cada parámetro, consulte [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html).

**Para generar un archivo JSON con todos los parámetros de la flota de EC2 posibles**  
Ejecute el comando [create-fleet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-fleet.html) (AWS CLI) y el parámetro `--generate-cli-skeleton` para generar un archivo JSON de flota de EC2 y dirija el resultado a un archivo para guardarlo.

```
aws ec2 create-fleet \
    --generate-cli-skeleton input > ec2createfleet.json
```

A continuación, se muestra un ejemplo del resultado.

```
{
    "DryRun": true,
    "ClientToken": "",
    "SpotOptions": {
        "AllocationStrategy": "price-capacity-optimized",
        "MaintenanceStrategies": {
            "CapacityRebalance": {
                "ReplacementStrategy": "launch"
            }
        },
        "InstanceInterruptionBehavior": "hibernate",
        "InstancePoolsToUseCount": 0,
        "SingleInstanceType": true,
        "SingleAvailabilityZone": true,
        "MinTargetCapacity": 0,
        "MaxTotalPrice": ""
    },
    "OnDemandOptions": {
        "AllocationStrategy": "prioritized",
        "CapacityReservationOptions": {
            "UsageStrategy": "use-capacity-reservations-first"
        },
        "SingleInstanceType": true,
        "SingleAvailabilityZone": true,
        "MinTargetCapacity": 0,
        "MaxTotalPrice": ""
    },
    "ExcessCapacityTerminationPolicy": "termination",
    "LaunchTemplateConfigs": [
        {
            "LaunchTemplateSpecification": {
                "LaunchTemplateId": "",
                "LaunchTemplateName": "",
                "Version": ""
            },
            "Overrides": [
                {
                    "InstanceType": "r5.metal",
                    "MaxPrice": "",
                    "SubnetId": "",
                    "AvailabilityZone": "",
                    "WeightedCapacity": 0.0,
                    "Priority": 0.0,
                    "Placement": {
                        "AvailabilityZone": "",
                        "Affinity": "",
                        "GroupName": "",
                        "PartitionNumber": 0,
                        "HostId": "",
                        "Tenancy": "dedicated",
                        "SpreadDomain": "",
                        "HostResourceGroupArn": ""
                    },
                    "InstanceRequirements": {
                        "VCpuCount": {
                            "Min": 0,
                            "Max": 0
                        },
                        "MemoryMiB": {
                            "Min": 0,
                            "Max": 0
                        },
                        "CpuManufacturers": [
                            "amd"
                        ],
                        "MemoryGiBPerVCpu": {
                            "Min": 0.0,
                            "Max": 0.0
                        },
                        "ExcludedInstanceTypes": [
                            ""
                        ],
                        "InstanceGenerations": [
                            "previous"
                        ],
                        "SpotMaxPricePercentageOverLowestPrice": 0,
                        "OnDemandMaxPricePercentageOverLowestPrice": 0,
                        "BareMetal": "included",
                        "BurstablePerformance": "required",
                        "RequireHibernateSupport": true,
                        "NetworkInterfaceCount": {
                            "Min": 0,
                            "Max": 0
                        },
                        "LocalStorage": "excluded",
                        "LocalStorageTypes": [
                            "ssd"
                        ],
                        "TotalLocalStorageGB": {
                            "Min": 0.0,
                            "Max": 0.0
                        },
                        "BaselineEbsBandwidthMbps": {
                            "Min": 0,
                            "Max": 0
                        },
                        "AcceleratorTypes": [
                            "inference"
                        ],
                        "AcceleratorCount": {
                            "Min": 0,
                            "Max": 0
                        },
                        "AcceleratorManufacturers": [
                            "amd"
                        ],
                        "AcceleratorNames": [
                            "a100"
                        ],
                        "AcceleratorTotalMemoryMiB": {
                            "Min": 0,
                            "Max": 0
                        }
                    }
                }
            ]
        }
    ],
    "TargetCapacitySpecification": {
        "TotalTargetCapacity": 0,
        "OnDemandTargetCapacity": 0,
        "SpotTargetCapacity": 0,
        "DefaultTargetCapacityType": "on-demand",
        "TargetCapacityUnitType": "memory-mib"
    },
    "TerminateInstancesWithExpiration": true,
    "Type": "instant",
    "ValidFrom": "1970-01-01T00:00:00",
    "ValidUntil": "1970-01-01T00:00:00",
    "ReplaceUnhealthyInstances": true,
    "TagSpecifications": [
        {
            "ResourceType": "fleet",
            "Tags": [
                {
                    "Key": "",
                    "Value": ""
                }
            ]
        }
    ],
    "Context": ""
}
```