Trabajar con Flotas de EC2 - Amazon Elastic Compute Cloud

Trabajar con Flotas de EC2

Para usar una flota de EC2, cree una solicitud que incluya la capacidad de destino total, la capacidad en diferido, la capacidad de spot, una o varias especificaciones de inicialización para las instancias y el precio máximo que está dispuesto a pagar. La solicitud de flota deberá incluir una plantilla de inicialización que defina la información que la flota requiere para iniciar una instancia, como una AMI, un tipo de instancia, una subred o una zona de disponibilidad y uno o varios grupos de seguridad. Puede especificar anulaciones de las especificaciones de inicialización para el tipo de instancia, la subred, la zona de disponibilidad y el precio máximo que está dispuesto a pagar, así como asignar una capacidad ponderada a cada anulación de las especificaciones de inicialización.

La flota de EC2 inicia las instancias en diferido cuando hay capacidad disponible e inicia las instancias de spot cuando el precio máximo que ha indicado es superior al precio de spot y hay capacidad disponible.

Si la flota incluye instancias de spot, Amazon EC2 puede intentar mantener la capacidad de destino de la flota cuando los precios de spot cambien.

Una solicitud de flota de EC2 de tipo maintain o request permanece activa hasta que caduca o hasta que usted la elimina. Al eliminar una flota de tipo maintain o request, puede especificar si la eliminación terminará las instancias contenidas en esa flota. De lo contrario, las instancias bajo demanda se ejecutarán hasta que usted las termine, y las instancias de spot se ejecutarán hasta que se interrumpan o usted las termine.

Estados de una solicitud de flota de EC2

Una solicitud de flota de EC2 puede tener uno de los siguientes estados:

submitted

La solicitud de flota de EC2 está en evaluación y Amazon EC2 se prepara para iniciar el número de instancias de destino. La solicitud puede incluir instancias bajo demanda, instancias de spot o ambos. Si una solicitud excede los límites de la flota, se elimina inmediatamente.

active

La solicitud de flota de EC2 se ha validado y Amazon EC2 está intentando mantener el número de destino de instancias de ejecución. La solicitud permanece en este estado hasta que se modifica o se elimina.

modifying

La solicitud de flota de EC2 se está modificando. La solicitud permanece en este estado hasta que la modificación se procesa completamente o se elimina la solicitud. Sólo un tipo de flota maintain se puede modificar. Este estado no se aplica a otros tipos de solicitud.

deleted_running

La solicitud de flota de EC2 se ha eliminado y no inicia instancias adicionales. Las instancias existentes de la flota continúan en ejecución hasta que se interrumpen o se terminan manualmente. La solicitud permanece en este estado hasta que se interrumpan o terminen todas las instancias. Solo una flota de EC2 de tipo maintain o request puede tener instancias de ejecución después de que la solicitud de flota de EC2 sea eliminada. No se admite una flota instant eliminada con instancias en ejecución. Este estado no se aplica a instant las flotas.

deleted_terminating

La solicitud de flota de EC2 se ha eliminado y sus instancias están en proceso de terminación. La solicitud permanece en este estado hasta que se terminen todas las instancias.

deleted

La flota de EC2 se elimina y no tiene ninguna instancia de ejecución. La solicitud se elimina dos días después de que todas sus instancias se hayan terminado.

Requisitos previos de flota de EC2

Plantilla de inicialización

Una plantilla de inicialización incluye información acerca de las instancias que se van a iniciar, como el tipo de instancia, la zona de disponibilidad y el precio máximo que está dispuesto a pagar. Para obtener más información, consulte iniciar una instancia desde una plantilla de inicialización.

Rol vinculado al servicio de flota de EC2

El rol de AWSServiceRoleForEC2Fleet concede permiso a la flota de EC2 para solicitar, iniciar, terminar y etiquetar instancias en su nombre. Amazon EC2 utiliza este rol vinculado al servicio para completar las siguientes acciones:

  • ec2:RunInstances: para iniciar las instancias.

  • ec2:RequestSpotInstances: solicitar instancias de spot.

  • ec2:TerminateInstances: para terminar las instancias.

  • ec2:DescribeImages: describir las imágenes de máquina de Amazon (AMI) para instancias de spot.

  • ec2:DescribeInstanceStatus: describir el estado de las instancias de spot.

  • ec2:DescribeSubnets: describir las subredes de las instancias de spot.

  • ec2:CreateTags: agregar etiquetas a la flota de EC2, instancias y volúmenes.

Asegúrese de que este rol exista antes de utilizar la AWS CLI o una API para crear una flota de EC2.

nota

Una flota de EC2 instant no requiere este rol.

Para crear el rol, use la consola de IAM como se indica a continuación.

Para crear el rol AWSServiceRoleForEC2Fleet para la flota de EC2
  1. Abra la consola de IAM en https://console.aws.amazon.com/iam/.

  2. En el panel de navegación, seleccione Roles y luego seleccione Crear rol.

  3. En la página Seleccionar tipo de entidad de confianza, haga lo siguiente:

    1. En Tipo de entidad de confianza, elija Servicio de AWS.

    2. En la sección Caso de uso, en Servicio o caso de uso, elija EC2 - Flota.

      sugerencia

      Asegúrese de elegir EC2 - Flota. Si elige EC2, el caso de uso EC2 - Flota no aparece en la lista de Caso de uso. El caso de uso EC2 - Flota creará automáticamente una política con los permisos de IAM necesarios y sugerirá AWSServiceRoleForEC2Fleet como nombre del rol.

    3. Elija Siguiente.

  4. En la página Agregar permisos, elija Siguiente.

  5. En la página Nombrar, revisar y crear, elija Crear rol.

Si ya no tiene que utilizar la flota de EC2, le recomendamos que elimine el rol AWSServiceRoleForEC2Fleet. Después de haber eliminado este rol de la cuenta, podrá volver a crearlo si crea otra flota.

Para obtener más información, consulte Uso de roles vinculados a servicios en la Guía del usuario de IAM de .

Conceder acceso a las claves administradas por el cliente para su uso con AMI cifradas e instantáneas de EBS

Si especifica una AMI cifrada o una instantánea de Amazon EBS cifrada en la flota de EC2 y utiliza una clave de AWS KMS para el cifrado, debe conceder permiso al rol AWSServiceRoleForEC2Fleet para que utilice la clave administrada por el cliente a fin de que Amazon EC2 pueda iniciar instancias en su nombre. Para ello, debe agregar una concesión a la clave administrada por el cliente, como se muestra en el siguiente procedimiento.

Al proporcionar permisos, las concesiones son una alternativa a las políticas de claves. Para obtener más información, consulte Uso de concesiones y Uso de políticas de claves en AWS KMS en la Guía para desarrolladores de AWS Key Management Service.

Para conceder permisos al rol AWSServiceRoleForEC2Fleet para que use la clave administrada por el cliente
  • Utilice el comando create-grant para agregar una concesión a la clave administrada por el cliente y para especificar la entidad principal (el rol vinculado a un servicio AWSServiceRoleForEC2Fleet) que recibe permiso para realizar las operaciones que permite la concesión. La clave administrada por el cliente se especifica mediante el parámetro key-id y el ARN de la clave administrada por el cliente. La entidad principal se especifica con el parámetro grantee-principal y el ARN del rol vinculado a un servicio AWSServiceRoleForEC2Fleet.

    aws kms create-grant \ --region us-east-1 \ --key-id arn:aws:kms:us-east-1:444455556666:key/1234abcd-12ab-34cd-56ef-1234567890ab \ --grantee-principal arn:aws:iam::111122223333:role/AWSServiceRoleForEC2Fleet \ --operations "Decrypt" "Encrypt" "GenerateDataKey" "GenerateDataKeyWithoutPlaintext" "CreateGrant" "DescribeKey" "ReEncryptFrom" "ReEncryptTo"

Permisos para los usuarios de la flota de EC2

Si los usuarios van a crear o administrar una flota de EC2, asegúrese de concederles los permisos necesarios.

Creación de una política para la flota de EC2
  1. Abra la consola de IAM en https://console.aws.amazon.com/iam/.

  2. En el panel de navegación, seleccione Políticas.

  3. Elija Crear política.

  4. En la página Crear política, elija la pestaña JSON, sustituya el texto por lo siguiente y, a continuación, elija Revisar política.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:*" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:ListRoles", "iam:PassRole", "iam:ListInstanceProfiles" ], "Resource":"arn:aws:iam::123456789012:role/DevTeam*" } ] }

    ec2:* concede a un usuario permiso para llamar a todas las acciones de la API de Amazon EC2. Para limitar las acciones del usuario a unas determinadas acciones de la API de Amazon EC2, especifique dichas acciones.

    El usuario debe tener permiso para llamar a la acción iam:ListRoles para enumerar los roles de IAM existentes, a la acción iam:PassRole para especificar el rol de la flota de EC2 y a la acción iam:ListInstanceProfiles para enumerar los perfiles de instancia existentes.

    (Opcional) Para permitir a un usuario crear roles o perfiles de instancia mediante la consola de IAM, también tiene que agregar las siguientes acciones a la política:

    • iam:AddRoleToInstanceProfile

    • iam:AttachRolePolicy

    • iam:CreateInstanceProfile

    • iam:CreateRole

    • iam:GetRole

    • iam:ListPolicies

  5. En la página Revisar política, escriba un nombre y descripción de política y, a continuación, elija Crear política.

  6. Para dar acceso, agregue permisos a los usuarios, grupos o roles:

Comprobaciones de estado de la flota de EC2

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 para sus instancias.

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. Siga los pasos para crear una flota de EC2. Para obtener más información, consulte Crear una flota de EC2.

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

Generar un archivo de configuración JSON de flota de EC2

Para ver la lista completa de los parámetros de configuración de la flota de EC2 puede generar un archivo JSON. Para ver una descripción de cada uno de los parámetros, consulte create-fleet en la referencia de los comandos de la AWS CLI.

Para generar un archivo JSON con todos los parámetros de la flota de EC2 posibles usando la línea de comandos
  • Ejecute el comando create-fleet (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

    Ejemplo de resultados

    { "DryRun": true, "ClientToken": "", "SpotOptions": { "AllocationStrategy": "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": "" }

Crear una flota de EC2

Para crear una flota de EC2, solo se debe especificar los siguientes 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, la zona de disponibilidad y el precio máximo que está dispuesto a pagar)

  • TotalTargetCapacity: especifica la capacidad objetivo total de la flota

  • DefaultTargetCapacityType: especifica si la opción de compra predeterminada es bajo demanda o spot

Puede especificar varias especificaciones de inicialización que anulen la plantilla de inicialización. Las especificaciones de inicialización pueden 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, 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 Selección de tipo de instancia basada en atributos para la flota de EC2.

Si no especifica este parámetro, la flota utiliza el valor predeterminado para el parámetro.

Especifique los parámetros de flota en un archivo JSON. Para obtener más información, consulte Generar un archivo de configuración JSON de flota de EC2.

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

Para crear una flota de EC2 (AWS CLI)
  • Utilice el comando create-fleet (AWS CLI) para crear una flota de EC2 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

Para ver archivos de configuración de ejemplo, consulte Configuraciones de ejemplo de flota de EC2.

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": [] }

Etiquetar una flota de EC2

Para ayudarle a categorizar y a administrar las solicitudes de flota de EC2, puede etiquetarlas con metadatos personalizados. Puede asignar una etiqueta a una solicitud de flota de EC2 cuando la cree o posteriormente.

Al etiquetar una solicitud de flota, las instancias y volúmenes iniciados por la flota no se etiquetan automáticamente. Tiene que etiquetar explícitamente las instancias y volúmenes iniciados por la flota. Puede elegir asignar etiquetas solo a la solicitud de flota, solo a las instancias iniciadas por la flota, solo a los volúmenes asociados a las instancias iniciadas por la flota o a las tres.

nota

Para los tipos de flota instant, puede etiquetar volúmenes asociados a instancias bajo demanda e instancias de spot. Para los tipos de flota request o maintain, solo puede etiquetar volúmenes asociados a instancias bajo demanda.

Para obtener más información sobre cómo funcionan las etiquetas, consulte Etiquetar los recursos de Amazon EC2.

Requisito previo

Otorgue al usuario el permiso para etiquetar recursos. Para obtener más información, consulte Ejemplo: Etiquetar recursos.

Para conceder a un usuario el permiso para etiquetar recursos

Cree una política de IAM que incluya lo siguiente:

  • La acción ec2:CreateTags. Esto concede al usuario permiso para crear etiquetas.

  • La acción ec2:CreateFleet. De esta forma, se concede al usuario permiso para crear una solicitud de flota de EC2.

  • Para Resource, le recomendamos que especifique "*". Esto permite a los usuarios etiquetar todos los tipos de recursos.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "TagEC2FleetRequest", "Effect": "Allow", "Action": [ "ec2:CreateTags", "ec2:CreateFleet" ], "Resource": "*" }
importante

Actualmente, no admitimos permisos de nivel de recursos para el recurso create-fleet. Si especifica create-fleet como recurso, obtendrá una excepción no autorizada cuando intente etiquetar la flota. En el ejemplo siguiente se muestra cómo no establecer la política.

{ "Effect": "Allow", "Action": [ "ec2:CreateTags", "ec2:CreateFleet" ], "Resource": "arn:aws:ec2:us-east-1:111122223333:create-fleet/*" }

Para dar acceso, agregue permisos a los usuarios, grupos o roles:

Para etiquetar una nueva solicitud de flota de EC2

Para etiquetar una solicitud de flota de EC2 al crearla, especifique el par clave-valor en el archivo JSON utilizado para crear la flota. El valor para ResourceType debe ser fleet. Si especifica otro valor, la solicitud de flota devuelve un error.

Para etiquetar instancias y volúmenes iniciados por una flota de EC2

Para etiquetar instancias y volúmenes cuando los inicia la flota, especifique las etiquetas en la plantilla de inicialización a la que se hace referencia en la solicitud de flota de EC2.

nota

No puede etiquetar volúmenes asociados a los instancias de spot que se inicien por un tipo de flota request o maintain.

Para etiquetar una solicitud, una instancia y un volumen de flota de EC2 existentes (AWS CLI)

Utilice el comando create-tags para etiquetar recursos existentes.

aws ec2 create-tags \ --resources fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE i-1234567890abcdef0 vol-1234567890EXAMPLE \ --tags Key=purpose,Value=test

Describir la flota de EC2

Puede describir la configuración de la flota de EC2, sus instancias en la flota y el historial de eventos de dicha flota.

Para describir las flotas de EC2 (AWS CLI)

Utilice el comando describe-fleets para describir sus Flotas de EC2.

aws ec2 describe-fleets
importante

Si una flota es de tipo instant, debe especificar el ID de la flota; de lo contrario, no aparece en la respuesta. Incluya --fleet-ids de la siguiente manera:

aws ec2 describe-fleets --fleet-ids fleet-8a22eee4-f489-ab02-06b8-832a7EXAMPLE

Ejemplo de resultados

{ "Fleets": [ { "ActivityStatus": "fulfilled", "CreateTime": "2022-02-09T03:35:52+00:00", "FleetId": "fleet-364457cd-3a7a-4ed9-83d0-7b63e51bb1b7", "FleetState": "active", "ExcessCapacityTerminationPolicy": "termination", "FulfilledCapacity": 2.0, "FulfilledOnDemandCapacity": 0.0, "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "my-launch-template", "Version": "$Latest" } } ], "TargetCapacitySpecification": { "TotalTargetCapacity": 2, "OnDemandTargetCapacity": 0, "SpotTargetCapacity": 2, "DefaultTargetCapacityType": "spot" }, "TerminateInstancesWithExpiration": false, "Type": "maintain", "ReplaceUnhealthyInstances": false, "SpotOptions": { "AllocationStrategy": "capacity-optimized", "InstanceInterruptionBehavior": "terminate" }, "OnDemandOptions": { "AllocationStrategy": "lowestPrice" } } ] }

Utilice el comando describe-fleet-instances para describir las instancias de la flota de EC2 especificada. La lista devuelta de instancias en ejecución se actualiza periódicamente y podría no estar actualizada.

aws ec2 describe-fleet-instances --fleet-id fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE

Ejemplo de resultados

{ "ActiveInstances": [ { "InstanceId": "i-09cd595998cb3765e", "InstanceHealth": "healthy", "InstanceType": "m4.large", "SpotInstanceRequestId": "sir-86k84j6p" }, { "InstanceId": "i-09cf95167ca219f17", "InstanceHealth": "healthy", "InstanceType": "m4.large", "SpotInstanceRequestId": "sir-dvxi7fsm" } ], "FleetId": "fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" }

Utilice el comando describe-fleet-history para describir el historial de la flota de EC2 especificada durante el tiempo indicado.

aws ec2 describe-fleet-history --fleet-id fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE --start-time 2018-04-10T00:00:00Z

Ejemplo de resultados

{ "HistoryRecords": [ { "EventInformation": { "EventSubType": "submitted" }, "EventType": "fleetRequestChange", "Timestamp": "2020-09-01T18:26:05.000Z" }, { "EventInformation": { "EventSubType": "active" }, "EventType": "fleetRequestChange", "Timestamp": "2020-09-01T18:26:15.000Z" }, { "EventInformation": { "EventDescription": "t2.small, ami-07c8bc5c1ce9598c3, ...", "EventSubType": "progress" }, "EventType": "fleetRequestChange", "Timestamp": "2020-09-01T18:26:17.000Z" }, { "EventInformation": { "EventDescription": "{\"instanceType\":\"t2.small\", ...}", "EventSubType": "launched", "InstanceId": "i-083a1c446e66085d2" }, "EventType": "instanceChange", "Timestamp": "2020-09-01T18:26:17.000Z" }, { "EventInformation": { "EventDescription": "{\"instanceType\":\"t2.small\", ...}", "EventSubType": "launched", "InstanceId": "i-090db02406cc3c2d6" }, "EventType": "instanceChange", "Timestamp": "2020-09-01T18:26:17.000Z" } ], "FleetId": "fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE", "LastEvaluatedTime": "1970-01-01T00:00:00.000Z", "StartTime": "2018-04-09T23:53:20.000Z" }

Modificar una flota de EC2

Puede modificar una flota de EC2 que se encuentre en el estado submitted o active. Al modificar una flota, esta pasa al estado modifying.

Solo se puede modificar una flota de EC2 que sea de tipo maintain. No se puede modificar una flota de EC2 del tipo request o instant.

Puede modificar los parámetros siguientes de una flota de EC2:

  • target-capacity-specification: aumenta o reduce la capacidad de destino para TotalTargetCapacity, OnDemandTargetCapacity y SpotTargetCapacity.

  • excess-capacity-termination-policy: permite indicar si las instancias de ejecución deberán terminarse si se reduce la capacidad de destino total de la flota de EC2 por debajo del tamaño actual de la flota. Los valores válidos son no-termination y termination.

Cuando se aumenta la capacidad de destino, la flota de EC2 inicia instancias adicionales de acuerdo con la opción de compra de instancias especificada para DefaultTargetCapacityType, que pueden ser instancias en diferido o instancias de spot.

Si DefaultTargetCapacityType es spot, la flota de EC2 inicia las instancias de spot adicionales de acuerdo con su estrategia de asignación. Si la estrategia de asignación es lowest-price, la flota inicia las instancias del grupo de capacidad de spot con el precio más bajo en la solicitud. Si la estrategia de asignación es diversified, la flota distribuye las instancias entre los grupos restantes de la solicitud.

Cuando se reduce la capacidad de destino, la flota de EC2 elimina todas las solicitudes abiertas que superen la nueva capacidad de destino. Puede solicitar que la flota termine las instancias hasta que el tamaño de la flota alcance la nueva capacidad de destino. Si la estrategia de asignación es lowest-price, la flota terminará las instancias con el mayor precio por unidad. Si la estrategia de asignación es diversified, la flota terminará instancias de los distintos grupos. También puede solicitar que la flota de EC2 mantenga la flota con su tamaño actual, pero que no sustituya ninguna de las instancias de spot que se hayan interrumpido ni ninguna instancia que el usuario haya terminado manualmente.

Cuando una flota de EC2 termina una instancia de spot porque se ha reducido la capacidad de destino, la instancia recibe un aviso de interrupción de instancia de spot.

Para modificar una flota de EC2 (AWS CLI)

Utilice el comando modify-fleet para actualizar la capacidad de destino de la flota de EC2 especificada.

aws ec2 modify-fleet \ --fleet-id fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \ --target-capacity-specification TotalTargetCapacity=20

Si va a reducir la capacidad de destino pero quiere conservar la flota con su tamaño actual, puede modificar el comando anterior como se indica a continuación.

aws ec2 modify-fleet \ --fleet-id fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \ --target-capacity-specification TotalTargetCapacity=10 \ --excess-capacity-termination-policy no-termination

Eliminar una flota de EC2

Si ya no necesita una flota de EC2, puede eliminarla. Tras eliminar una flota, todas las solicitudes de spot asociadas con la flota se cancelan, de forma que no se iniciará ninguna instancia de spot nueva.

Al eliminar una flota de EC2, debe especificar si desea terminar también todas sus instancias. Esto incluye tanto las instancias bajo demanda como las instancias de spot. Para las flotas instant, la flota de EC2 debe terminar las instancias cuando se elimine la flota. No se admite una flota instant eliminada con instancias en ejecución.

Si especifica que se terminen las instancias cuando se elimine la flota, esta pasará al estado deleted_terminating. En caso contrario, pasará al estado deleted_running y las instancias seguirán ejecutándose hasta que se interrumpan o usted las termine manualmente.

Restricciones
  • Puede eliminar hasta 25 flotas del tipo instant en una sola solicitud.

  • Puede eliminar hasta 100 flotas del tipo maintain y request en una sola solicitud.

  • Puede eliminar hasta 125 flotas en una sola solicitud, siempre que no supere la cuota para cada tipo de flota, como se especificó anteriormente.

  • Si supera la cantidad especificada de flotas para eliminar, no se eliminan las flotas.

  • Se pueden terminar hasta 1000 instancias en una sola solicitud para eliminar las flotas instant.

Para eliminar una flota de EC2 y terminar sus instancias (AWS CLI)

Utilice el comando delete-fleets (eliminar flotas) y el parámetro --terminate-instances para eliminar la flota de EC2 especificada y terminar sus instancias asociadas.

aws ec2 delete-fleets \ --fleet-ids fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \ --terminate-instances

Ejemplo de resultados

{ "UnsuccessfulFleetDeletions": [], "SuccessfulFleetDeletions": [ { "CurrentFleetState": "deleted_terminating", "PreviousFleetState": "active", "FleetId": "fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" } ] }
Para eliminar una flota de EC2 sin terminar sus instancias (AWS CLI)

Puede modificar el comando anterior con el parámetro --no-terminate-instances para eliminar la flota de EC2 especificada sin terminar sus instancias asociadas.

nota

--no-terminate-instances no es compatible con las flotas instant.

aws ec2 delete-fleets \ --fleet-ids fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \ --no-terminate-instances

Ejemplo de resultados

{ "UnsuccessfulFleetDeletions": [], "SuccessfulFleetDeletions": [ { "CurrentFleetState": "deleted_running", "PreviousFleetState": "active", "FleetId": "fleet-4b8aaae8-dfb5-436d-a4c6-3dafa4c6b7dcEXAMPLE" } ] }

Solucionar problemas cuando una flota no se puede eliminar

Si una flota de EC2 devuelve un error al eliminarla, UnsuccessfulFleetDeletions devuelve el ID de la flota de EC2, un código de error y un mensaje de error.

Los códigos de error son:

  • ExceededInstantFleetNumForDeletion

  • fleetIdDoesNotExist

  • fleetIdMalformed

  • fleetNotInDeletableState

  • NoTerminateInstancesNotSupported

  • UnauthorizedOperation

  • unexpectedError

Solución de problemas de ExceededInstantFleetNumForDeletion

Si intenta eliminar más de 25 flotas instant en una sola solicitud, se devuelve el error ExceededInstantFleetNumForDeletion. A continuación, se muestra un ejemplo del resultado de este error.

{ "UnsuccessfulFleetDeletions": [ { "FleetId": " fleet-5d130460-0c26-bfd9-2c32-0100a098f625", "Error": { "Message": "Can’t delete more than 25 instant fleets in a single request.", "Code": "ExceededInstantFleetNumForDeletion" } }, { "FleetId": "fleet-9a941b23-0286-5bf4-2430-03a029a07e31", "Error": { "Message": "Can’t delete more than 25 instant fleets in a single request.", "Code": "ExceededInstantFleetNumForDeletion" } } . . . ], "SuccessfulFleetDeletions": [] }
Solucionar NoTerminateInstancesNotSupported

Si especifica que las instancias de una flota instant no deben finalizarse al eliminar la flota, se devuelve el error NoTerminateInstancesNotSupported. --no-terminate-instances no es compatible con las flotas instant. A continuación, se muestra un ejemplo del resultado de este error.

{ "UnsuccessfulFleetDeletions": [ { "FleetId": "fleet-5d130460-0c26-bfd9-2c32-0100a098f625", "Error": { "Message": "NoTerminateInstances option is not supported for instant fleet", "Code": "NoTerminateInstancesNotSupported" } } ], "SuccessfulFleetDeletions": []
Solucionar UnauthorizedOperation

Si no tiene permiso para terminar instancias, aparece el error UnauthorizedOperation al eliminar una flota que debe terminar sus instancias. La siguiente es la respuesta al error.

<Response><Errors><Error><Code>UnauthorizedOperation</Code><Message>You are not authorized to perform this operation. Encoded authorization failure message: VvuncIxj7Z_CPGNYXWqnuFV-YjByeAU66Q9752NtQ-I3-qnDLWs6JLFd KnSMMiq5s6cGqjjPtEDpsnGHzzyHasFHOaRYJpaDVravoW25azn6KNkUQQlFwhJyujt2dtNCdduJfrqcFYAjlEiRMkfDHt7N63SKlweKUl BHturzDK6A560Y2nDSUiMmAB1y9UNtqaZJ9SNe5sNxKMqZaqKtjRbk02RZu5V2vn9VMk6fm2aMVHbY9JhLvGypLcMUjtJ76H9ytg2zRlje VPiU5v2s-UgZ7h0p2yth6ysUdhlONg6dBYu8_y_HtEI54invCj4CoK0qawqzMNe6rcmCQHvtCxtXsbkgyaEbcwmrm2m01-EMhekLFZeJLr DtYOpYcEl4_nWFX1wtQDCnNNCmxnJZAoJvb3VMDYpDTsxjQv1PxODZuqWHs23YXWVywzgnLtHeRf2o4lUhGBw17mXsS07k7XAfdPMP_brO PT9vrHtQiILor5VVTsjSPWg7edj__1rsnXhwPSu8gI48ZLRGrPQqFq0RmKO_QIE8N8s6NWzCK4yoX-9gDcheurOGpkprPIC9YPGMLK9tug </Message></Error></Errors><RequestID>89b1215c-7814-40ae-a8db-41761f43f2b0</RequestID></Response>

Para resolver el error, debe agregar la acción ec2:TerminateInstances a la política de IAM, como se muestra en el siguiente ejemplo.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DeleteFleetsAndTerminateInstances", "Effect": "Allow", "Action": [ "ec2:DeleteFleets" "ec2:TerminateInstances" ], "Resource": "*" } ] }