Saltar al contenido

¿Cómo configuro mi proveedor de capacidad para retener las instancias de Amazon EC2 en un grupo de Amazon EC2 Auto Scaling que tenga tareas de Amazon ECS en ejecución?

5 minutos de lectura
0

Mi clúster de Amazon Elastic Container Service (Amazon ECS) utiliza proveedores de capacidad. Quiero mantener activas mis instancias de Amazon Elastic Compute Cloud (Amazon EC2) de un grupo de escalamiento automático cuando tengan tareas en ejecución.

Descripción corta

Si utilizas un proveedor de capacidad, debes configurar los ajustes del clúster de Amazon ECS para no interrumpir las tareas en ejecución cuando se desescala verticalmente. Implementa la protección de instancias de desescalamiento horizontal en el grupo de EC2 Auto Scaling y la protección de escalamiento administrado en la configuración del proveedor de capacidad de Amazon ECS. Esta configuración garantiza que Amazon ECS conserve las instancias con tareas en ejecución.

O bien, configura Amazon ECS para que agote correctamente las tareas al detener las instancias y protege instancias específicas para que no se detengan prematuramente.

La configuración utiliza los siguientes componentes:

  • Proveedores de capacidad: Los proveedores de capacidad utilizan los grupos de escalamiento automático para aprovisionar instancias de EC2 de forma dinámica.
  • Drenaje de instancias: Cuando una instancia de EC2 de un grupo de escalamiento automático está marcada para su terminación, pasa a un estado EN DRENAJE y ya no acepta nuevas tareas. Las tareas en ejecución deben finalizar o trasladarse a otra instancia.
  • Escalamiento automático de clústeres: El escalamiento automático de clústeres utiliza proveedores de capacidad para escalar automáticamente los grupos de escalamiento automático en función de los requisitos de las tareas.

Resolución

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.

Asegurarse de que Amazon ECS o el grupo de escalamiento automático no terminen prematuramente una instancia durante el desescalamiento horizontal

Para usar la protección de terminación administrada en el escalamiento automático de clústeres, debes activar la protección de desescalamiento horizontal de instancias en el grupo de escalamiento automático. Esta acción garantiza que el grupo de escalamiento automático conserve las instancias con tareas en ejecución.

Para activar la protección de desescalamiento horizontal, ejecute el siguiente comando update-auto-scaling-group de la AWS CLI:

aws autoscaling update-auto-scaling-group \
  --auto-scaling-group-name my-asg \
  --new-instances-protected-from-scale-in

Nota: Sustituye my-asg por el nombre del grupo de escalamiento automático.

A continuación, ejecuta el siguiente comando put-cluster-capacity-providers para activar la protección de terminación administrada y asegurarte de que Amazon ECS retiene las instancias con tareas en ejecución:

aws ecs put-cluster-capacity-providers \
  --cluster my-cluster \
  --capacity-providers my-capacity-provider \
  --enable-managed-scaling \
  --managed-termination-protection ENABLED

Nota: Sustituye my-cluster por el nombre de tu clúster y my-capacity provider por el nombre de tu proveedor de capacidad.

Configuración de Amazon ECS para drenar correctamente las tareas al eliminar una instancia

Se recomienda drenar correctamente las tareas cuando las eliminas de una instancia. Utiliza el drenaje de instancias administrado para permitir que Amazon ECS reprograme las tareas en otras instancias antes de la terminación.

Para activar el drenaje de instancias administrado, ejecuta el siguiente comando update-capacity-provider:

aws ecs update-capacity-provider \
--name my-cp \
--auto-scaling-group-provider '{
  "managedDraining": "ENABLED"
}

Nota: Sustituye my-cp por el nombre de tu proveedor de capacidad.

Amazon ECS traslada las tareas de la instancia a otras instancias según lo permita la capacidad. Sin embargo, Amazon ECS permite un máximo de 48 horas para drenar las instancias. Si aún quedan tareas en la instancia después de este periodo, Amazon ECS termina la instancia y detiene las tareas restantes.

Retención de una tarea crítica específica

Utiliza la protección de tareas para asegurarte de que las acciones de escalamiento o despliegue de Amazon ECS no detengan las tareas críticas.

Importante: Incluso si activas la protección de tareas, Amazon ECS puede terminar la instancia subyacente. La protección de tareas solo protege las tareas para que no se detengan.

Para activar la protección de tareas, ejecuta el siguiente comando update-task-protection:

aws ecs update-task-protection \
--cluster my-cluster \
--tasks my-task-id \
--protection-enabled

Nota: Sustituye my-cluster por el nombre del clúster y my-task-id por el ID de la tarea. De forma predeterminada, la protección dura 2 horas. Para cambiar esta duración, utiliza la opción --expires-in-minutes.

Para comprobar el estado de la protección de tareas en el clúster, ejecuta el siguiente comando get-task-protection:

aws ecs get-task-protection \
--cluster my-cluster \
--tasks my-task-id

Nota: Sustituye my-cluster por el nombre del clúster y my-task-id por el ID de la tarea.

Solución de otros problemas

Si activas la protección para tu grupo de escalamiento automático, proveedor de capacidad y tareas y sigues teniendo problemas, toma las siguientes medidas:

Información relacionada

Protección de las tareas de Amazon ECS para que no terminen debido a eventos de desescalamiento horizontal

GetTaskProtection

UpdateTaskProtection

Ejemplos de protección de tareas de Amazon Elastic Container Service (Amazon ECS) en el sitio web de GitHub

OFICIAL DE AWSActualizada hace un año