Especifique atributos para la selección del tipo de instancia para la EC2 Fleet o flota de spot - Amazon Elastic Compute Cloud

Especifique atributos para la selección del tipo de instancia para la EC2 Fleet o flota de spot

Al crear una EC2 Fleet o flota de spot, debe especificar uno o varios tipos de instancias para configurar las instancias bajo demanda y las instancias de spot de la flota. Como alternativa a especificar de forma manual los tipos de instancia, puede especificar los atributos que debe tener una instancia y Amazon EC2 identificará todos los tipos de instancias con esos atributos. Esto se conoce como selección de tipo de instancia basada en atributos. Por ejemplo, puede especificar el número mínimo y máximo de vCPU necesarios para sus instancias y la flota iniciará las instancias mediante cualquier tipo de instancia disponible que cumpla con esos requisitos de vCPU.

La selección de tipo de instancia basada en atributos es ideal para cargas de trabajo y marcos que pueden ser flexibles sobre los tipos de instancias que utilizan, como cuando se ejecutan contenedores o flotas web, se procesan macrodatos y se implementan herramientas de integración e implementación continuas (CI/CD).

Beneficios

La selección de tipo de instancia basada en atributos posee los siguientes beneficios:

  • Uso fácil de los tipos de instancias correctos: con tantos tipos de instancias disponibles, encontrar los tipos de instancias adecuados para su carga de trabajo puede necesitar mucho tiempo. Cuando especifica atributos de instancia, los tipos de instancia tendrán automáticamente los atributos necesarios para la carga de trabajo.

  • Configuración simplificada: para especificar de forma manual varios tipos de instancias para una flota, debe crear una anulación de la plantilla de inicialización independiente para cada tipo de instancia. Sin embargo, con la selección de tipo de instancia basada en atributos, para proporcionar varios tipos de instancias solo necesita especificar los atributos de instancia en la plantilla de lanzamiento o en una anulación de la plantilla de lanzamiento.

  • Uso automático de nuevos tipos de instancias: cuando se especifican atributos de instancia en lugar de tipos de instancias, su flota puede utilizar tipos de instancias de nueva generación a medida que se publican, con lo que se prueba la eficiencia futura de la configuración de la flota.

  • Flexibilidad del tipo de instancia: cuando se especifican atributos de instancias en lugar de tipos de instancias, la flota puede seleccionar entre una amplia gama de tipos de instancias para iniciar instancias de spot, de forma que se siguen las prácticas recomendadas de spot con respecto a la flexibilidad del tipo de instancia.

Cómo funciona la selección de tipo de instancia basada en atributos

Para utilizar la selección de tipo de instancia basada en atributos en la configuración de la flota, debe reemplazar la lista de tipos de instancias por una lista de atributos de instancia que requieren las instancias. La EC2 Fleet o la flota de spot iniciará instancias en cualquier tipo de instancia disponible que tenga los atributos de instancia especificados.

Tipos de atributos de instancia

Hay varios atributos de instancia que puede especificar para expresar los requisitos de computación, como, por ejemplo:

  • Recuento de vCPU: el número mínimo y máximo de vCPU por instancia.

  • Memoria: los GiB de memoria mínimos y máximos por instancia.

  • Almacenamiento local: si se usarán volúmenes de almacén de instancias o EBS para el almacenamiento local.

  • Rendimiento ampliable: si se usará la familia de instancias T, incluidos los tipos T4g, T3a, T3 y T2.

Para obtener una descripción de cada atributo y los valores predeterminados, consulte InstanceRequirements en la Referencia de la API de Amazon EC2.

Dónde configurar la selección de tipo de instancia basada en atributos

Según si utiliza la consola o la AWS CLI, puede especificar los atributos de instancia para la selección de tipo de instancia basada en atributos de la siguiente manera:

En la consola, puede especificar los atributos de la instancia en los siguientes componentes de configuración de la flota:

  • En una plantilla de inicialización y, luego, hacer referencia a la plantilla de inicialización en la solicitud de flota.

  • (Solo flota de spot) En la solicitud de flota

En la AWS CLI puede especificar los atributos de la instancia en uno o todos los siguientes componentes de configuración de la flota:

  • En una plantilla de lanzamiento y, luego, hacer referencia a la plantilla de lanzamiento en la solicitud de flota

  • En una anulación de la plantilla de inicialización

    Si desea una combinación de instancias que utilizan diferentes AMI, puede especificar atributos de instancia en varias anulaciones de plantillas de lanzamiento. Por ejemplo, distintos tipos de instancias pueden utilizar procesadores x86 y basados en Arm.

  • (Solo flota de spot) En una especificación de inicio

Cómo utiliza la EC2 Fleet o flota de spot la selección de tipo de instancia basada en atributos al aprovisionar una flota.

La EC2 Fleet o flota de spot aprovisiona una flota de la siguiente manera:

  • Identifica los tipos de instancias que tienen los atributos especificados.

  • Utiliza la protección de precios para determinar qué tipos de instancias excluir.

  • Determina los grupos de capacidad desde los que considerará iniciar las instancias en función de las regiones de AWS o zonas de disponibilidad que tienen tipos de instancias coincidentes.

  • Aplica la estrategia de asignación especificada para determinar desde qué grupos de capacidad se van a iniciar las instancias.

    Tenga en cuenta que la selección de tipo de instancia basada en atributos no selecciona los grupos de capacidad desde los que se aprovisiona la flota; eso depende de las estrategias de asignación.

    Si especifica una estrategia de asignación, la flota iniciará instancias según la estrategia de asignación especificada.

    • Para las instancias de spot, la selección del tipo de instancia basada en atributos admite las estrategias de asignación de la capacidad de precio optimizada, la capacidad optimizada, y el precio más bajo. Tenga en cuenta que no recomendamos la estrategia de asignación de spot del precio más bajo porque presenta el mayor riesgo de interrupción para las instancias de spot.

    • Para las instancias bajo demanda, la selección de tipo de instancia basada en atributos admite la estrategia de asignación del precio más bajo.

  • Si no hay capacidad para los tipos de instancias con los atributos de instancia especificados, no se pueden lanzar instancias y la flota devuelve un error.

Protección de precios

La protección de precios es una característica que impide que su EC2 Fleet o flota de spot utilice tipos de instancias que consideraría demasiado caros, incluso si se ajustan a los atributos especificados. Para utilizar la protección de precios, debe establecer un umbral de precios. A continuación, cuando Amazon EC2 selecciona tipos de instancias con sus atributos, excluye los tipos de instancias con precios superiores al umbral.

La forma en que Amazon EC2 calcula el umbral de precio es la siguiente:

  • En primer lugar, Amazon EC2 identifica el tipo de instancia con el precio más bajo entre los que coinciden con sus atributos.

  • A continuación, Amazon EC2 toma el valor (expresado como porcentaje) que especificó para el parámetro de protección de precios y lo multiplica por el precio del tipo de instancias identificado. El resultado es el precio que se utiliza como umbral de precio.

Existen límites de precios diferentes para las instancias bajo demanda y las instancias de spot.

Cuando crea una flota con la selección del tipo de instancia basada en atributos, se habilita la protección de precios de forma predeterminada. Puede mantener los valores predeterminados o especificar los suyos.

También puede desactivar la protección de precios. Para indicar que no hay umbral de protección de precios, especifique un valor de porcentaje alto, como 999999.

Cómo se identifica el tipo de instancia con el precio más bajo

Amazon EC2 determina el precio en el que se basará el umbral de precios mediante la identificación del tipo de instancia con el precio más bajo entre los que coinciden con los atributos especificados. Lo hace de la siguiente forma:

  • En primer lugar, analiza los tipos de instancias C, M o R de la generación actual que coincidan con sus atributos. Si encuentra alguna coincidencia, identifica el tipo de instancia con el precio más bajo.

  • Si no hay ninguna coincidencia, analiza los tipos de instancias de la generación actual que coincidan con sus atributos. Si encuentra alguna coincidencia, identifica el tipo de instancia con el precio más bajo.

  • Si no hay ninguna coincidencia, analiza los tipos de instancias de la generación anterior que coincidan con sus atributos e identifica el tipo de instancia con el precio más bajo.

Protección de precios de las instancias bajo demanda

El umbral de protección de precios para los tipos de instancias bajo demanda se calcula como un porcentaje superior al tipo de instancia bajo demanda identificado con el precio más bajo (OnDemandMaxPricePercentageOverLowestPrice). Especificará el porcentaje más alto que está dispuesto a pagar. Si no especifica este parámetro, se utilizará el valor predeterminado 20 para calcular un umbral de protección de precios superior en un 20 % al precio identificado.

Por ejemplo, si el precio de la instancia bajo demanda identificada es 0.4271 y usted especificó 25, el umbral de precios es un 25 % superior a 0.4271. Se calcula como se indica a continuación: 0.4271 * 1.25 = 0.533875. El precio calculado es el máximo que está dispuesto a pagar por las instancias bajo demanda y, en este ejemplo, Amazon EC2 excluirá cualquier tipo de instancia bajo demanda que cueste más de 0.533875.

Protección de precios de instancias de spot

De manera predeterminada, Amazon EC2 aplicará automáticamente una protección óptima del precio de las instancias de spot para seleccionar de manera coherente entre una amplia gama de tipos de instancia. También puede configurar manualmente la protección de precios. Sin embargo, dejar que Amazon EC2 lo haga puede aumentar la probabilidad de que se agote la capacidad de spot.

Puede especificar manualmente la protección de precios con una de las opciones siguientes. Si configura manualmente la protección de precios, le recomendamos utilizar la primera opción.

  • Un porcentaje del tipo de instancia bajo demanda identificado con el precio más bajo [MaxSpotPriceAsPercentageOfOptimalOnDemandPrice]

    Por ejemplo, si el precio del tipo de instancia bajo demanda identificado es 0.4271 y usted especificó 60, el umbral de precios es un 60 % de 0.4271. Se calcula como se indica a continuación: 0.4271 * 0.60 = 0.25626. El precio calculado es el máximo que está dispuesto a pagar por las instancias de spot y, en este ejemplo, Amazon EC2 excluirá cualquier tipo de instancia de spot que cueste más de 0.25626.

  • Un porcentaje superior al tipo de instancia de spot identificado con el precio más bajo [SpotMaxPricePercentageOverLowestPrice]

    Por ejemplo, si el precio del tipo de instancia de spot identificado es 0.1808 y usted especificó 25, el umbral de precios es un 25 % superior a 0.1808. Se calcula como se indica a continuación: 0.1808 * 1.25 = 0.226. El precio calculado es el máximo que está dispuesto a pagar por las instancias de spot y, en este ejemplo, Amazon EC2 excluirá cualquier tipo de instancia de spot que cueste más de 0.266. No le recomendamos utilizar este parámetro porque los precios de spot pueden fluctuar y, por lo tanto, su umbral de protección de precios también puede fluctuar.

Especificación del umbral de protección de precios

Para especificar el límite de protección de precios mediante la AWS CLI

Cuando cree una EC2 Fleet o la flota de spot mediante la AWS CLI, configure la flota para la selección del tipo de instancia basada en atributos y, a continuación, haga lo siguiente:

  • Para especificar el límite de protección de precios de las instancias bajo demanda, en el archivo de configuración JSON, en la estructura InstanceRequirements, en OnDemandMaxPricePercentageOverLowestPrice, ingrese el límite de protección de precios en forma de porcentaje.

  • Para especificar el umbral de protección de precios de las instancias de spot, en el archivo de configuración JSON, en la estructura InstanceRequirements, especifique uno de los siguientes parámetros:

    • En MaxSpotPriceAsPercentageOfOptimalOnDemandPrice, ingrese el umbral de protección de precios en forma de porcentaje.

    • En SpotMaxPricePercentageOverLowestPrice, ingrese el umbral de protección de precios en forma de porcentaje.

Para obtener más información, consulte Cree una flota de EC2 con selección de tipo de instancia basada en atributos o Cree una flota de spot con la selección de tipo de instancia basada en atributos.

(Solo en la flota de spot) Para especificar el límite de protección de precios mediante la consola

Cuando cree una flota de spot en la consola, configure la flota para la selección del tipo de instancia basada en atributos y, a continuación, haga lo siguiente:

  • Para especificar el límite de protección de precios de la instancia bajo demanda, en Atributo de instancia adicional, elija Protección de precios bajo demanda elija Agregar atributo, y luego ingrese el límite de protección de precios en forma de porcentaje.

  • Para especificar el límite de protección de precios de la instancia de spot, Atributo de instancia adicional, elija Protección de precios de spot, elija Agregar atributo, elija un valor base en el que asentar su precio y, a continuación, ingrese el límite de protección de precios en forma de porcentaje.

nota

Cuando crea la flota, si establece TargetCapacityUnitType en vcpu o memory-mib, el límite de protección de precios se aplica en función del precio por vCPU o por memoria en lugar del precio por instancia.

Consideraciones

  • Puede especificar tipos de instancias o atributos de instancia en una EC2 Fleet o en una flota de spot, pero no ambos al mismo tiempo.

    Al utilizar la CLI, las anulaciones de la plantilla de lanzamiento anularán la plantilla de lanzamiento. Por ejemplo, si la plantilla de inicialización contiene un tipo de instancia y la anulación de la plantilla de inicialización contiene atributos de instancia, las instancias identificadas por los atributos de instancia anularán el tipo de instancia en la plantilla de inicialización.

  • Al utilizar la CLI, cuando especifica atributos de instancia como anulaciones, no puede especificar ponderaciones ni prioridades al mismo tiempo.

  • Puede especificar un máximo de cuatro estructuras InstanceRequirements en una configuración de solicitud.

Cree una flota de EC2 con selección de tipo de instancia basada en atributos

Puede configurar una EC2 Fleet para que utilice la selección de tipo de instancia basada en atributos mediante la AWS CLI.

Para crear una flota de EC2 con selección de tipo de instancia basada en atributos (AWS CLI)

Utilice el comando create-fleet (AWS CLI) para crear una flota de EC2. Especifique la configuración de la flota en un archivo JSON.

aws ec2 create-fleet \ --region us-east-1 \ --cli-input-json file://file_name.json

Archivo file_name.json de ejemplo

En el siguiente ejemplo, se incluyen los parámetros que configuran una flota de EC2 para utilizar la selección de tipos de instancia basada en atributos y va seguida de una explicación de texto.

{ "SpotOptions": { "AllocationStrategy": "price-capacity-optimized" }, "LaunchTemplateConfigs": [{ "LaunchTemplateSpecification": { "LaunchTemplateName": "my-launch-template", "Version": "1" }, "Overrides": [{ "InstanceRequirements": { "VCpuCount": { "Min": 2 }, "MemoryMiB": { "Min": 4 } } }] }], "TargetCapacitySpecification": { "TotalTargetCapacity": 20, "DefaultTargetCapacityType": "spot" }, "Type": "instant" }

Los atributos para la selección de tipos de instancia basada en atributos se especifican en la estructura InstanceRequirements. En este ejemplo, se especifican dos atributos:

  • VCpuCount: se especifica un mínimo de 2 vCPU. Como no se especifica ningún máximo, no hay ningún límite máximo.

  • MemoryMiB: se especifica un mínimo de 4 MiB de memoria. Como no se especifica ningún máximo, no hay ningún límite máximo.

Se identificarán los tipos de instancia que tengan 2 o más vCPU y 4 MiB o más de memoria. Sin embargo, la protección de precios y la estrategia de asignación pueden excluir algunos tipos de instancia cuando la flota de EC2 aprovisiona la flota.

Para obtener una lista y descripciones de todos los atributos posibles que se pueden especificar, consulte InstanceRequirements en la Referencia de la API de Amazon EC2.

nota

Cuando InstanceRequirements se incluye en la configuración de la flota, InstanceType y WeightedCapacity deben excluirse; no pueden determinar la configuración de la flota al mismo tiempo que los atributos de instancia.

El objeto JSON también contiene la siguiente configuración de flota:

  • "AllocationStrategy": "price-capacity-optimized": la estrategia de asignación de las instancias de spot de la flota.

  • "LaunchTemplateName": "my-launch-template", "Version": "1": la plantilla de inicialización contiene información sobre la configuración de las instancias, pero, si se especifican los tipos de instancias, se anularán con los atributos especificados en InstanceRequirements.

  • "TotalTargetCapacity": 20: la capacidad de destino es de 20 instancias.

  • "DefaultTargetCapacityType": "spot": la capacidad predeterminada es de instancias de spot.

  • "Type": "instant": el tipo de solicitud para la flota es instant.

Cree una flota de spot con la selección de tipo de instancia basada en atributos

Puede configurar una flota para utilizar la selección de tipo de instancia basada en atributos mediante la consola de Amazon EC2 o la AWS CLI.

Creación de una flota de spot mediante la consola

Para configurar una flota de spot para la selección de tipo de instancia basada en atributos (consola)
  1. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.

  2. En el panel de navegación, elija Solicitudes de spot y, a continuación, elija Solicitar instancias de spot.

  3. Siga los pasos para crear una flota de spot. Para obtener más información, consulte Creación de una solicitud de flota de spot con los parámetros definidos (consola).

    Al crear la flota de spot, configure la flota para la selección de tipo de instancia basada en atributos de la siguiente manera:

    1. En Requisitos de tipo de instancia, elija Especificar los atributos de instancia que coinciden con los requisitos de computación.

    2. En vCPU, ingrese el número mínimo y máximo deseado de vCPU. Para no especificar ningún límite, seleccione No minimum (Sin mínimo), No maximum (Sin máximo) o ambos.

    3. En Memory (GiB) (Memoria [GiB]), ingrese la cantidad mínima y máxima de memoria deseada. Para no especificar ningún límite, seleccione No minimum (Sin mínimo), No maximum (Sin máximo) o ambos.

    4. (Opcional) En Additional instance attributes (Atributos de instancia adicionales), puede especificar opcionalmente uno o varios atributos para expresar sus requisitos de computación con más detalle. Cada atributo adicional agrega más restricciones a la solicitud.

    5. (Opcional) Expanda Vista previa de tipos de instancia coincidentes para ver los tipos de instancias que tienen los atributos especificados.

Creación de una flota de spot mediante la AWS CLI

Para configurar una flota de spot para la selección de tipo de instancia basada en atributos (AWS CLI)

Utilice el comando request-spot-fleet (AWS CLI) para crear una flota de spot. Especifique la configuración de la flota en un archivo JSON.

aws ec2 request-spot-fleet \ --region us-east-1 \ --spot-fleet-request-config file://file_name.json

Archivo file_name.json de ejemplo

En el siguiente ejemplo, se incluyen los parámetros que configuran una flota de spot para utilizar la selección de tipos de instancia basada en atributos y va seguida de una explicación de texto.

{ "AllocationStrategy": "priceCapacityOptimized", "TargetCapacity": 20, "Type": "request", "LaunchTemplateConfigs": [{ "LaunchTemplateSpecification": { "LaunchTemplateName": "my-launch-template", "Version": "1" }, "Overrides": [{ "InstanceRequirements": { "VCpuCount": { "Min": 2 }, "MemoryMiB": { "Min": 4 } } }] }] }

Los atributos para la selección de tipos de instancia basada en atributos se especifican en la estructura InstanceRequirements. En este ejemplo, se especifican dos atributos:

  • VCpuCount: se especifica un mínimo de 2 vCPU. Como no se especifica ningún máximo, no hay ningún límite máximo.

  • MemoryMiB: se especifica un mínimo de 4 MiB de memoria. Como no se especifica ningún máximo, no hay ningún límite máximo.

Se identificarán los tipos de instancia que tengan 2 o más vCPU y 4 MiB o más de memoria. Sin embargo, la protección de precios y la estrategia de asignación pueden excluir algunos tipos de instancias cuando la flota de spot aprovisiona la flota.

Para obtener una lista y descripciones de todos los atributos posibles que se pueden especificar, consulte InstanceRequirements en la Referencia de la API de Amazon EC2.

nota

Cuando InstanceRequirements se incluye en la configuración de la flota, InstanceType y WeightedCapacity deben excluirse; no pueden determinar la configuración de la flota al mismo tiempo que los atributos de instancia.

El objeto JSON también contiene la siguiente configuración de flota:

  • "AllocationStrategy": "priceCapacityOptimized": la estrategia de asignación de las instancias de spot de la flota.

  • "LaunchTemplateName": "my-launch-template", "Version": "1": la plantilla de inicialización contiene información sobre la configuración de las instancias, pero, si se especifican los tipos de instancias, se anularán con los atributos especificados en InstanceRequirements.

  • "TargetCapacity": 20: la capacidad de destino es de 20 instancias.

  • "Type": "request": el tipo de solicitud para la flota es request.

Ejemplos de configuraciones de EC2 Fleet válidas y no válidas

Si utiliza la AWS CLI para crear una flota de EC2, debe asegurarse de que la configuración de su flota sea válida. En los siguientes ejemplos, se muestran configuraciones válidas y no válidas.

Las configuraciones no se consideran válidas cuando contienen lo siguiente:

  • Una única estructura Overrides con InstanceRequirements y InstanceType a la vez

  • Dos estructuras Overrides, una con InstanceRequirements y la otra con InstanceType

  • Dos estructuras InstanceRequirements con valores de atributo superpuestos dentro de la misma LaunchTemplateSpecification

Configuración válida: plantilla de inicialización única con anulaciones

La siguiente configuración es válida. Contiene una plantilla de inicialización y otra estructura Overrides que contiene una estructura InstanceRequirements. A continuación, se presenta una explicación de texto de la configuración de ejemplo.

{ "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "My-launch-template", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 2, "Max": 8 }, "MemoryMib": { "Min": 0, "Max": 10240 }, "MemoryGiBPerVCpu": { "Max": 10000 }, "RequireHibernateSupport": true } } ] } ], "TargetCapacitySpecification": { "TotalTargetCapacity": 5000, "DefaultTargetCapacityType": "spot", "TargetCapacityUnitType": "vcpu" } } }
InstanceRequirements

Para utilizar la selección de instancias basada en atributos, debe incluir la estructura InstanceRequirements en la configuración de la flota y especificar los atributos deseados para las instancias de la flota.

En el ejemplo anterior, se especifican los siguientes atributos de instancia:

  • VCpuCount: los tipos de instancia deben tener un mínimo de 2 y un máximo de 8 vCPU.

  • MemoryMiB: los tipos de instancia deben tener un máximo de 10 240 MiB de memoria. Un mínimo de 0 indica que no hay un límite mínimo.

  • MemoryGiBPerVCpu: los tipos de instancia deben tener un máximo de 10 000 GiB de memoria por vCPU. El parámetro Min es opcional. Al omitirlo, indica que no hay un límite mínimo.

TargetCapacityUnitType

El parámetro TargetCapacityUnitType especifica la unidad de la capacidad de destino. En el ejemplo, la capacidad objetivo es 5000 y el tipo de unidad de capacidad objetivo es vcpu, que en conjunto especifican una capacidad de destino deseada de 5000 vCPU. La flota de EC2 iniciará suficientes instancias para que el número total de vCPU de la flota sea de 5000 vCPU.

Configuración válida: plantilla de inicialización única con varios requisitos de instancia

La siguiente configuración es válida. Contiene una plantilla de inicialización y una estructura Overrides que contiene dos estructuras InstanceRequirements. Los atributos especificados en InstanceRequirements son válidos porque los valores no se superponen; la primera estructura InstanceRequirements especifica un VCpuCount de 0 a 2 vCPU, mientras que la segunda estructura InstanceRequirements especifica de 4 a 8 vCPU.

{ "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "MyLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } } }, { "InstanceRequirements": { "VCpuCount": { "Min": 4, "Max": 8 }, "MemoryMiB": { "Min": 0 } } } ] } ], "TargetCapacitySpecification": { "TotalTargetCapacity": 1, "DefaultTargetCapacityType": "spot" } } }

Configuración válida: dos plantillas de inicialización, cada una con anulaciones

La siguiente configuración es válida. Contiene dos plantillas de inicialización, cada una con una estructura Overrides que contiene una estructura InstanceRequirements. Esta configuración resulta útil para el soporte de arquitectura arm y x86 en la misma flota.

{ "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "armLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } } }, { "LaunchTemplateSpecification": { "LaunchTemplateName": "x86LaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } } } ] } ], "TargetCapacitySpecification": { "TotalTargetCapacity": 1, "DefaultTargetCapacityType": "spot" } } }

Configuración válida: solo InstanceRequirements especificado, sin valores de atributo superpuestos

La siguiente configuración es válida. Contiene dos estructuras LaunchTemplateSpecification, cada una con una plantilla de inicialización y una estructura Overrides que contiene una estructura InstanceRequirements. Los atributos especificados en InstanceRequirements son válidos porque los valores no se superponen; la primera estructura InstanceRequirements especifica un VCpuCount de 0 a 2 vCPU, mientras que la segunda estructura InstanceRequirements especifica de 4 a 8 vCPU.

{ "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "MyLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } } } ] }, { "LaunchTemplateSpecification": { "LaunchTemplateName": "MyOtherLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 4, "Max": 8 }, "MemoryMiB": { "Min": 0 } } } ] } ], "TargetCapacitySpecification": { "TotalTargetCapacity": 1, "DefaultTargetCapacityType": "spot" } } }

La configuración no es válida: Overrides contiene InstanceRequirements y InstanceType

La siguiente configuración no es válida. La estructura Overrides contiene tanto InstanceRequirements como InstanceType. En Overrides, puede especificar InstanceRequirements o InstanceType, pero no ambos.

{ "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "MyLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } } }, { "InstanceType": "m5.large" } ] } ], "TargetCapacitySpecification": { "TotalTargetCapacity": 1, "DefaultTargetCapacityType": "spot" } } }

La configuración no es válida: dos Overrides contienen InstanceRequirements y InstanceType

La siguiente configuración no es válida. Las estructuras Overrides contienen tanto InstanceRequirements como InstanceType. Puede especificar InstanceRequirements o InstanceType, pero no ambos, incluso si están en diferentes estructuras Overrides.

{ "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "MyLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } } } ] }, { "LaunchTemplateSpecification": { "LaunchTemplateName": "MyOtherLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceType": "m5.large" } ] } ], "TargetCapacitySpecification": { "TotalTargetCapacity": 1, "DefaultTargetCapacityType": "spot" } } }

La configuración no es válida: valores de atributo superpuestos

La siguiente configuración no es válida. Cada una de las dos estructuras InstanceRequirements contienen "VCpuCount": {"Min": 0, "Max": 2}. Los valores de estos atributos se superponen, lo que dará lugar a grupos de capacidad duplicados.

{ "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "MyLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } }, { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } } } } ] } ], "TargetCapacitySpecification": { "TotalTargetCapacity": 1, "DefaultTargetCapacityType": "spot" } } }

Ejemplos de configuraciones de flota de spot válidas y no válidas

Si utiliza la AWS CLI para crear una flota de spot, debe asegurarse de que la configuración de la flota sea válida. En los siguientes ejemplos, se muestran configuraciones válidas y no válidas.

Las configuraciones no se consideran válidas cuando contienen lo siguiente:

  • Una única estructura Overrides con InstanceRequirements y InstanceType a la vez

  • Dos estructuras Overrides, una con InstanceRequirements y la otra con InstanceType

  • Dos estructuras InstanceRequirements con valores de atributo superpuestos dentro de la misma LaunchTemplateSpecification

Configuración válida: plantilla de inicialización única con anulaciones

La siguiente configuración es válida. Contiene una plantilla de inicialización y otra estructura Overrides que contiene una estructura InstanceRequirements. A continuación, se presenta una explicación de texto de la configuración de ejemplo.

{ "SpotFleetRequestConfig": { "AllocationStrategy": "priceCapacityOptimized", "ExcessCapacityTerminationPolicy": "default", "IamFleetRole": "arn:aws:iam::000000000000:role/aws-ec2-spot-fleet-tagging-role", "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "My-launch-template", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 2, "Max": 8 }, "MemoryMib": { "Min": 0, "Max": 10240 }, "MemoryGiBPerVCpu": { "Max": 10000 }, "RequireHibernateSupport": true } } ] } ], "TargetCapacity": 5000, "OnDemandTargetCapacity": 0, "TargetCapacityUnitType": "vcpu" } }
InstanceRequirements

Para utilizar la selección de instancias basada en atributos, debe incluir la estructura InstanceRequirements en la configuración de la flota y especificar los atributos deseados para las instancias de la flota.

En el ejemplo anterior, se especifican los siguientes atributos de instancia:

  • VCpuCount: los tipos de instancia deben tener un mínimo de 2 y un máximo de 8 vCPU.

  • MemoryMiB: los tipos de instancia deben tener un máximo de 10 240 MiB de memoria. Un mínimo de 0 indica que no hay un límite mínimo.

  • MemoryGiBPerVCpu: los tipos de instancia deben tener un máximo de 10 000 GiB de memoria por vCPU. El parámetro Min es opcional. Al omitirlo, indica que no hay un límite mínimo.

TargetCapacityUnitType

El parámetro TargetCapacityUnitType especifica la unidad de la capacidad de destino. En el ejemplo, la capacidad objetivo es 5000 y el tipo de unidad de capacidad objetivo es vcpu, que en conjunto especifican una capacidad de destino deseada de 5000 vCPU. La flota de spot iniciará suficientes instancias para que el número total de vCPU de la flota sea de 5000 vCPU.

Configuración válida: plantilla de lanzamiento única con varios requisitos de instancia

La siguiente configuración es válida. Contiene una plantilla de inicialización y una estructura Overrides que contiene dos estructuras InstanceRequirements. Los atributos especificados en InstanceRequirements son válidos porque los valores no se superponen; la primera estructura InstanceRequirements especifica un VCpuCount de 0 a 2 vCPU, mientras que la segunda estructura InstanceRequirements especifica de 4 a 8 vCPU.

{ "SpotFleetRequestConfig": { "AllocationStrategy": "priceCapacityOptimized", "ExcessCapacityTerminationPolicy": "default", "IamFleetRole": "arn:aws:iam::000000000000:role/aws-ec2-spot-fleet-tagging-role", "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "MyLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } } }, { "InstanceRequirements": { "VCpuCount": { "Min": 4, "Max": 8 }, "MemoryMiB": { "Min": 0 } } } ] } ], "TargetCapacity": 1, "OnDemandTargetCapacity": 0, "Type": "maintain" } }

Configuración válida: dos plantillas de inicialización, cada una con anulaciones

La siguiente configuración es válida. Contiene dos plantillas de inicialización, cada una con una estructura Overrides que contiene una estructura InstanceRequirements. Esta configuración resulta útil para el soporte de arquitectura arm y x86 en la misma flota.

{ "SpotFleetRequestConfig": { "AllocationStrategy": "priceCapacityOptimized", "ExcessCapacityTerminationPolicy": "default", "IamFleetRole": "arn:aws:iam::000000000000:role/aws-ec2-spot-fleet-tagging-role", "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "armLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } } }, { "LaunchTemplateSpecification": { "LaunchTemplateName": "x86LaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } } } ] } ], "TargetCapacity": 1, "OnDemandTargetCapacity": 0, "Type": "maintain" } }

Configuración válida: solo InstanceRequirements especificado, sin valores de atributo superpuestos

La siguiente configuración es válida. Contiene dos estructuras LaunchTemplateSpecification, cada una con una plantilla de inicialización y una estructura Overrides que contiene una estructura InstanceRequirements. Los atributos especificados en InstanceRequirements son válidos porque los valores no se superponen; la primera estructura InstanceRequirements especifica un VCpuCount de 0 a 2 vCPU, mientras que la segunda estructura InstanceRequirements especifica de 4 a 8 vCPU.

{ "SpotFleetRequestConfig": { "AllocationStrategy": "priceCapacityOptimized", "ExcessCapacityTerminationPolicy": "default", "IamFleetRole": "arn:aws:iam::000000000000:role/aws-ec2-spot-fleet-tagging-role", "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "MyLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } } } ] }, { "LaunchTemplateSpecification": { "LaunchTemplateName": "MyOtherLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 4, "Max": 8 }, "MemoryMiB": { "Min": 0 } } } ] } ], "TargetCapacity": 1, "OnDemandTargetCapacity": 0, "Type": "maintain" } }

La configuración no es válida: Overrides contiene InstanceRequirements y InstanceType

La siguiente configuración no es válida. La estructura Overrides contiene tanto InstanceRequirements como InstanceType. En Overrides, puede especificar InstanceRequirements o InstanceType, pero no ambos.

{ "SpotFleetRequestConfig": { "AllocationStrategy": "priceCapacityOptimized", "ExcessCapacityTerminationPolicy": "default", "IamFleetRole": "arn:aws:iam::000000000000:role/aws-ec2-spot-fleet-tagging-role", "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "MyLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } } }, { "InstanceType": "m5.large" } ] } ], "TargetCapacity": 1, "OnDemandTargetCapacity": 0, "Type": "maintain" } }

La configuración no es válida: dos Overrides contienen InstanceRequirements y InstanceType

La siguiente configuración no es válida. Las estructuras Overrides contienen tanto InstanceRequirements como InstanceType. Puede especificar InstanceRequirements o InstanceType, pero no ambos, incluso si están en diferentes estructuras Overrides.

{ "SpotFleetRequestConfig": { "AllocationStrategy": "priceCapacityOptimized", "ExcessCapacityTerminationPolicy": "default", "IamFleetRole": "arn:aws:iam::000000000000:role/aws-ec2-spot-fleet-tagging-role", "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "MyLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } } } ] }, { "LaunchTemplateSpecification": { "LaunchTemplateName": "MyOtherLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceType": "m5.large" } ] } ], "TargetCapacity": 1, "OnDemandTargetCapacity": 0, "Type": "maintain" } }

La configuración no es válida: valores de atributo superpuestos

La siguiente configuración no es válida. Cada una de las dos estructuras InstanceRequirements contienen "VCpuCount": {"Min": 0, "Max": 2}. Los valores de estos atributos se superponen, lo que dará lugar a grupos de capacidad duplicados.

{ "SpotFleetRequestConfig": { "AllocationStrategy": "priceCapacityOptimized", "ExcessCapacityTerminationPolicy": "default", "IamFleetRole": "arn:aws:iam::000000000000:role/aws-ec2-spot-fleet-tagging-role", "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "MyLaunchTemplate", "Version": "1" }, "Overrides": [ { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } }, { "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 2 }, "MemoryMiB": { "Min": 0 } } } } ] } ], "TargetCapacity": 1, "OnDemandTargetCapacity": 0, "Type": "maintain" } }

Vista previa de tipos de instancia con atributos especificados

Puede utilizar el comando de la AWS CLI get-instance-types-from-instance-requirements para obtener una vista previa de los tipos de instancias que coinciden con los atributos especificados. Esto resulta particularmente útil para determinar qué atributos se deben especificar en la configuración de la solicitud sin iniciar ninguna instancia. Considere que el comando no tiene en cuenta la capacidad disponible.

Para obtener una vista previa de una lista de tipos de instancias al especificar atributos mediante la AWS CLI
  1. (Opcional) Para generar todos los atributos posibles que se pueden especificar, utilice el comando get-instance-types-from-instance-requirements y el parámetro --generate-cli-skeleton. Puede dirigir de manera opcional el resultado a un archivo para guardarlo mediante input > attributes.json.

    aws ec2 get-instance-types-from-instance-requirements \ --region us-east-1 \ --generate-cli-skeleton input > attributes.json

    Resultado previsto

    { "DryRun": true, "ArchitectureTypes": [ "i386" ], "VirtualizationTypes": [ "hvm" ], "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 0 }, "MemoryMiB": { "Min": 0, "Max": 0 }, "CpuManufacturers": [ "intel" ], "MemoryGiBPerVCpu": { "Min": 0.0, "Max": 0.0 }, "ExcludedInstanceTypes": [ "" ], "InstanceGenerations": [ "current" ], "SpotMaxPricePercentageOverLowestPrice": 0, "OnDemandMaxPricePercentageOverLowestPrice": 0, "BareMetal": "included", "BurstablePerformance": "included", "RequireHibernateSupport": true, "NetworkInterfaceCount": { "Min": 0, "Max": 0 }, "LocalStorage": "included", "LocalStorageTypes": [ "hdd" ], "TotalLocalStorageGB": { "Min": 0.0, "Max": 0.0 }, "BaselineEbsBandwidthMbps": { "Min": 0, "Max": 0 }, "AcceleratorTypes": [ "gpu" ], "AcceleratorCount": { "Min": 0, "Max": 0 }, "AcceleratorManufacturers": [ "nvidia" ], "AcceleratorNames": [ "a100" ], "AcceleratorTotalMemoryMiB": { "Min": 0, "Max": 0 }, "NetworkBandwidthGbps": { "Min": 0.0, "Max": 0.0 }, "AllowedInstanceTypes": [ "" ] }, "MaxResults": 0, "NextToken": "" }
  2. Cree un archivo de configuración JSON con el resultado del paso anterior y configúrelo de la siguiente manera:

    nota

    Debe proporcionar valores para ArchitectureTypes, VirtualizationTypes, VCpuCount y MemoryMiB. Puede omitir los demás atributos; cuando se omiten, se utilizan los valores predeterminados.

    Para obtener una descripción de cada atributo y sus valores predeterminados, consulte get-instance-types-from-instance-requirements en la Referencia de la línea de comandos de Amazon EC2.

    1. En ArchitectureTypes, especifique uno o varios tipos de arquitectura de procesador.

    2. En VirtualizationTypes, especifique uno o varios tipos de virtualización.

    3. En VCpuCount, especifique el número mínimo y máximo de vCPU. Para no especificar un límite mínimo, en Min, especifique 0. Para no especificar un límite máximo, omita el parámetro Max.

    4. En MemoryMiB, especifique la cantidad mínima y máxima de memoria en MiB. Para no especificar un límite mínimo, en Min, especifique 0. Para no especificar un límite máximo, omita el parámetro Max.

    5. De manera opcional, puede especificar uno o varios de los otros atributos para restringir aún más la lista de tipos de instancias que se devuelven.

  3. Para obtener una vista previa de los tipos de instancias que tienen los atributos especificados en el archivo JSON, utilice el comando get-instance-types-from-instance-requirements y especifique el nombre y la ruta de acceso al archivo JSON mediante el parámetro --cli-input-json. De manera opcional, puede dar formato al resultado para que aparezca en formato de tabla.

    aws ec2 get-instance-types-from-instance-requirements \ --cli-input-json file://attributes.json \ --output table

    Archivo de ejemplo attributes.json

    En este ejemplo, los atributos requeridos se incluyen en el archivo JSON. Ellos son ArchitectureTypes, VirtualizationTypes, VCpuCount y MemoryMiB. Además, el atributo opcional InstanceGenerations también se incluye. Tenga en cuenta que en MemoryMiB, el valor Max puede omitirse para indicar que no hay un límite.

    { "ArchitectureTypes": [ "x86_64" ], "VirtualizationTypes": [ "hvm" ], "InstanceRequirements": { "VCpuCount": { "Min": 4, "Max": 6 }, "MemoryMiB": { "Min": 2048 }, "InstanceGenerations": [ "current" ] } }

    Ejemplo de resultado

    ------------------------------------------ |GetInstanceTypesFromInstanceRequirements| +----------------------------------------+ || InstanceTypes || |+--------------------------------------+| || InstanceType || |+--------------------------------------+| || c4.xlarge || || c5.xlarge || || c5a.xlarge || || c5ad.xlarge || || c5d.xlarge || || c5n.xlarge || || d2.xlarge || ...
  4. Después de identificar los tipos de instancia que se ajusten a sus necesidades, anote los atributos de instancia utilizados para poder utilizarlos al configurar su solicitud de flota.