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.
Contenido
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
orequest
puede tener instancias de ejecución después de que la solicitud de flota de EC2 sea eliminada. No se admite una flotainstant
eliminada con instancias en ejecución. Este estado no se aplica ainstant
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
Para crear una flota de EC2, deben existir los requisitos previos siguientes:
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
Abra la consola de IAM en https://console.aws.amazon.com/iam/
. -
En el panel de navegación, seleccione Roles y luego seleccione Crear rol.
-
En la página Seleccionar tipo de entidad de confianza, haga lo siguiente:
-
En Tipo de entidad de confianza, elija Servicio de AWS.
-
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.
-
Elija Siguiente.
-
-
En la página Agregar permisos, elija Siguiente.
-
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ámetrograntee-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
Abra la consola de IAM en https://console.aws.amazon.com/iam/
. -
En el panel de navegación, seleccione Políticas.
-
Elija Crear política.
-
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óniam:PassRole
para especificar el rol de la flota de EC2 y a la accióniam: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
-
-
En la página Revisar política, escriba un nombre y descripción de política y, a continuación, elija Crear política.
-
Para dar acceso, agregue permisos a los usuarios, grupos o roles:
-
Usuarios y grupos en AWS IAM Identity Center:
Cree un conjunto de permisos. Siga las instrucciones de Creación de un conjunto de permisos en la Guía del usuario de AWS IAM Identity Center.
-
Usuarios administrados en IAM a través de un proveedor de identidades:
Cree un rol para la federación de identidades. Siga las instrucciones de Creación de un rol para un proveedor de identidades de terceros (federación) en la Guía del usuario de IAM.
-
Usuarios de IAM:
-
Cree un rol que el usuario pueda aceptar. Siga las instrucciones descritas en Creación de un rol para un usuario de IAM en la Guía del usuario de IAM.
-
(No recomendado) Adjunte una política directamente a un usuario o agregue un usuario a un grupo de usuarios. Siga las instrucciones descritas en Adición de permisos a un usuario (consola) de la Guía del usuario de IAM.
-
-
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 tiporequest
oinstant
. -
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
-
Siga los pasos para crear una flota de EC2. Para obtener más información, consulte Crear una flota de EC2.
-
Para configurar la flota que sustituya la instancias de spot en mal estado, en el archivo JSON, para
ReplaceUnhealthyInstances
, escribatrue
.
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
oLaunchTemplateName
: 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:
-
Usuarios y grupos en AWS IAM Identity Center:
Cree un conjunto de permisos. Siga las instrucciones de Creación de un conjunto de permisos en la Guía del usuario de AWS IAM Identity Center.
-
Usuarios administrados en IAM a través de un proveedor de identidades:
Cree un rol para la federación de identidades. Siga las instrucciones de Creación de un rol para un proveedor de identidades de terceros (federación) en la Guía del usuario de IAM.
-
Usuarios de IAM:
-
Cree un rol que el usuario pueda aceptar. Siga las instrucciones descritas en Creación de un rol para un usuario de IAM en la Guía del usuario de IAM.
-
(No recomendado) Adjunte una política directamente a un usuario o agregue un usuario a un grupo de usuarios. Siga las instrucciones descritas en Adición de permisos a un usuario (consola) de la Guía del usuario de IAM.
-
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 paraTotalTargetCapacity
,OnDemandTargetCapacity
ySpotTargetCapacity
. -
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 sonno-termination
ytermination
.
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
yrequest
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": "*" } ] }