Proveedores de capacidad de AWS Fargate - Amazon Elastic Container Service

Proveedores de capacidad de AWS Fargate

Los proveedores de capacidad de Amazon ECS en AWS Fargate permiten utilizar la capacidad de Fargate y de Fargate Spot para las tareas de Amazon ECS. Para obtener más información acerca de los proveedores de capacidad, consulte Proveedores de capacidad de Amazon ECS.

Con Fargate Spot, puede ejecutar tareas de Amazon ECS tolerantes a interrupciones con un descuento respecto al precio de Fargate. Fargate Spot ejecuta las tareas en la capacidad de cómputo adicional. Cuando AWS necesita recuperar esa capacidad, las tareas se interrumpen previa advertencia con dos minutos de antelación. Esto se describe con más detalle a continuación.

Consideraciones sobre proveedores de capacidad de Fargate

Cuando se utilizan proveedores de capacidad de Fargate, se debe tener en cuenta lo siguiente.

  • El proveedor de capacidad de Fargate Spot no es compatible con los contenedores Windows de Fargate.

  • El proveedor de capacidad de Fargate Spot no es compatible con tareas Linux con la arquitectura ARM64, Fargate Spot solo admite tareas Linux con la arquitectura X86_64.

  • No es necesario crear proveedores de capacidad de Fargate y Fargate Spot. Están disponibles para todas las cuentas y solo es preciso asociarlos a un clúster para poder utilizarlos.

  • Para asociar proveedores de capacidad de Fargate y Fargate Spot a un clúster existente, debe utilizar la API de Amazon ECS o la AWS CLI. Para obtener más información, consulte Adición de proveedores de capacidad de Fargate a un clúster existente .

  • Los proveedores de capacidad de Fargate y Fargate Spot están reservados y no se pueden eliminar. Puede desasociarlos de un clúster mediante la API PutClusterCapacityProviders.

  • Cuando se crea un nuevo clúster mediante la consola clásica de Amazon ECS junto con la plantilla de clúster Networking only (Solo redes), los proveedores de capacidad de FARGATE y de FARGATE_SPOT se asocian automáticamente al nuevo clúster.

  • Para usar Fargate Spot, la tarea debe utilizar la versión 1.3.0 o una posterior (de Linux) de la plataforma. Para obtener más información, consulte Versiones de la plataforma AWS Fargate .

  • Cuando se detienen las tareas que utilizan los proveedores de capacidad de Fargate y Fargate Spot, se envía un evento de cambio de estado de tarea a Amazon EventBridge. En el motivo de la parada se describe la causa. Para obtener más información, consulte Eventos de cambio de estado de tarea .

  • Un clúster puede contener proveedores de capacidad de Fargate y de grupos de Auto Scaling combinados; sin embargo, una estrategia de proveedores de capacidad solo puede contener proveedores de capacidad de Fargate o de grupos de Auto Scaling, pero no ambos. Para obtener más información, consulte Proveedores de capacidad de grupos de Auto Scaling en la Guía para desarrolladores de Amazon Elastic Container Service.

Manejo de avisos de terminación de Fargate Spot

Cuando se detienen tareas que utilizan capacidad de Fargate Spot debido a una interrupción de spot, se envía una advertencia dos minutos antes de la detención de la tarea. La advertencia se envía como un evento de cambio de estado de tarea a Amazon EventBridge y como una señal SIGTERM a la tarea en ejecución. Cuando se utiliza Fargate Spot como parte de un servicio, el programador del servicio recibe la señal de interrupción e intenta lanzar tareas adicionales en Fargate Spot si hay capacidad disponible. Un servicio con una sola tarea se interrumpirá hasta que haya capacidad disponible.

Para asegurarse de que los contenedores realicen una salida correcta antes de que se detenga la tarea, se puede configurar lo siguiente:

  • Se puede especificar un valor de stopTimeout de 120 segundos o menos en la definición del contenedor que la tarea utiliza. Especificar un valor de stopTimeout permite disponer de un tiempo desde el momento en que se recibe el evento de cambio de estado de tarea hasta el punto en el que se detiene forzosamente el contenedor. Si no especifica un valor para stopTimeout, se utiliza el valor predeterminado de 30 segundos. Para obtener más información, consulte Tiempos de espera de contenedor .

  • La señal SIGTERM debe recibirse desde dentro del contenedor para realizar cualquier acción de limpieza. Si no se procesa esta señal, la tarea recibirá una señal SIGKILL una vez transcurrido el stopTimeout configurado, lo que puede provocar pérdida o corrupción de datos.

A continuación, se muestra un fragmento de código de un evento de cambio de estado de tarea que indica el motivo y el código de detención de una interrupción de Fargate Spot.

{ "version": "0", "id": "9bcdac79-b31f-4d3d-9410-fbd727c29fab", "detail-type": "ECS Task State Change", "source": "aws.ecs", "account": "111122223333", "resources": [ "arn:aws:ecs:us-east-1:111122223333:task/b99d40b3-5176-4f71-9a52-9dbd6f1cebef" ], "detail": { "clusterArn": "arn:aws:ecs:us-east-1:111122223333:cluster/default", "createdAt": "2016-12-06T16:41:05.702Z", "desiredStatus": "STOPPED", "lastStatus": "RUNNING", "stoppedReason": "Your Spot Task was interrupted.", "stopCode": "TerminationNotice", "taskArn": "arn:aws:ecs:us-east-1:111122223333:task/b99d40b3-5176-4f71-9a52-9dbd6fEXAMPLE", ... } }

El patrón de eventos siguiente se utiliza para crear una regla de EventBridge para los eventos de cambio de estado de tarea de Amazon ECS. Opcionalmente, puede especificar un clúster en el campo detail para recibir eventos de cambio de estado de tarea. Para obtener más información, consulte Creación de una regla de EventBridge en la Guía del usuario de Amazon EventBridge.

{ "source": [ "aws.ecs" ], "detail-type": [ "ECS Task State Change" ], "detail": { "clusterArn": [ "arn:aws:ecs:us-west-2:111122223333:cluster/default" ] } }

Creación de un nuevo clúster que utiliza proveedores de capacidad de Fargate

Cuando se crea un nuevo clúster de Amazon ECS, puede especificar uno o varios proveedores de capacidad para asociarlos al clúster. Los proveedores de capacidad se utilizan para definir una estrategia de proveedores de capacidad que determina la infraestructura en la que se ejecutan las tareas.

Cuando se utiliza la AWS Management Console, los proveedores de capacidad de FARGATE y de FARGATE_SPOT se asocian automáticamente al clúster al utilizar la plantilla de clúster Networking Only (Solo redes). Para obtener más información, consulte Creación de un clúster mediante la consola clásica .

Para crear un clúster de Amazon ECS mediante proveedores de capacidad de Fargate (AWS CLI)

Utilice el siguiente comando para crear un clúster y asociarle los proveedores de capacidad de Fargate y de Fargate Spot.

  • create-cluster (AWS CLI)

    aws ecs create-cluster \ --cluster-name FargateCluster \ --capacity-providers FARGATE FARGATE_SPOT \ --region us-west-2

Adición de proveedores de capacidad de Fargate a un clúster existente

Para actualizar el grupo de proveedores de capacidad disponibles para un clúster de Amazon ECS existente, puede utilizar la API PutClusterCapacityProviders.

No se admite la adición de proveedores de capacidad Fargate ni Fargate Spot a un clúster existente en la AWS Management Console. Debe crear un nuevo clúster de Fargate en la consola, o bien agregar los proveedores de capacidad de Fargate o de Fargate Spot al clúster existente mediante la API de Amazon ECS o la AWS CLI.

Para agregar proveedores de capacidad de Fargate a un clúster existente (AWS CLI)

Utilice el siguiente comando para agregar los proveedores de capacidad de Fargate y de Fargate Spot a un clúster existente. Si el clúster especificado tiene asociados proveedores de capacidad existentes, debe especificar todos los proveedores de capacidad existentes además de los nuevos que desee añadir. Todos los proveedores de capacidad existentes asociados a un clúster que se omitan en una llamada a la API PutClusterCapacityProviders se desasociarán del clúster. Solo puede desasociar un proveedor de capacidad existente de un clúster si ninguna tarea existente lo está utilizando. Estas mismas reglas se aplican a la estrategia de proveedores de capacidad predeterminada del clúster. Si el clúster tiene definida una estrategia de proveedores de capacidad predeterminada existente, debe incluirse en la llamada a la API PutClusterCapacityProviders. De lo contrario, se sobrescribirá.

  • put-cluster-capacity-providers (AWS CLI)

    aws ecs put-cluster-capacity-providers \ --cluster FargateCluster \ --capacity-providers FARGATE FARGATE_SPOT existing_capacity_provider1 existing_capacity_provider2 \ --default-capacity-provider-strategy existing_default_capacity_provider_strategy \ --region us-west-2

Ejecución de tareas mediante un proveedor de capacidad de Fargate

Para ejecutar una tarea o crear un servicio mediante los proveedores de capacidad de Fargate o Fargate Spot, puede especificar una estrategia de proveedores de capacidad. Si no se proporciona ninguna estrategia de proveedores de capacidad, se utiliza la estrategia de proveedores de capacidad predeterminada del clúster.

Se admite la ejecución de una tarea mediante los proveedores de capacidad de Fargate o Fargate Spot en la AWS Management Console. Si utiliza la AWS Management Console, debe agregar los proveedores de capacidad de Fargate o Fargate Spot a la estrategia de proveedores de capacidad predeterminada del clúster. Cuando se utiliza la API de Amazon ECS o la AWS CLI, es posible especificar una estrategia de proveedores de capacidad, o bien utilizar la estrategia predeterminada del clúster.

Para ejecutar una tarea mediante un proveedor de capacidad de Fargate (AWS CLI)

Utilice el siguiente comando para ejecutar una tarea mediante los proveedores de capacidad de Fargate y Fargate Spot.

  • run-task (AWS CLI)

    aws ecs run-task \ --capacity-provider-strategy capacityProvider=FARGATE,weight=1 capacityProvider=FARGATE_SPOT,weight=1 \ --cluster FargateCluster \ --task-definition task-def-family:revision \ --network-configuration "awsvpcConfiguration={subnets=[string,string],securityGroups=[string,string],assignPublicIp=string}" \ --count integer \ --region us-west-2
nota

Al ejecutar tareas independientes con Fargate Spot, es importante tener en cuenta que la tarea se puede interrumpir antes de que pueda completarse y salir. Por lo tanto, es importante que codifique su aplicación para que realice una salida correcta en un plazo de 2 minutos cuando reciba una señal SIGTERM y se pueda reanudar. Para obtener más información, consulte Manejo de avisos de terminación de Fargate Spot .

Creación de un servicio mediante un proveedor de capacidad de Fargate (AWS CLI)

Utilice el siguiente comando para crear un servicio mediante los proveedores de capacidad de Fargate y Fargate Spot.

  • create-service (AWS CLI)

    aws ecs create-service \ --capacity-provider-strategy capacityProvider=FARGATE,weight=1 capacityProvider=FARGATE_SPOT,weight=1 \ --cluster FargateCluster \ --service-name FargateService \ --task-definition task-def-family:revision \ --network-configuration "awsvpcConfiguration={subnets=[string,string],securityGroups=[string,string],assignPublicIp=string}" \ --desired-count integer \ --region us-west-2