Detención segura de las cargas de trabajo de Amazon ECS que se ejecutan en instancias de EC2 - Amazon Elastic Container Service

Detención segura de las cargas de trabajo de Amazon ECS que se ejecutan en instancias de EC2

El vaciado de instancias administradas facilita la terminación gradual de instancias de Amazon EC2. Esto permite que sus cargas de trabajo se detengan de forma segura y se reprogramen para convertirlas en instancias que no terminan. El mantenimiento y las actualizaciones de la infraestructura se llevan a cabo sin preocuparse por la interrupción de las cargas de trabajo. Al utilizar el drenaje de instancias administradas, simplifica los flujos de trabajo de administración de la infraestructura que requieren el reemplazo de las instancias de Amazon EC2 y, al mismo tiempo, garantiza la resiliencia y la disponibilidad de sus aplicaciones.

El drenaje de instancias administradas por Amazon ECS funciona con los reemplazos de instancias de grupos de escalado automático. En función de la actualización de las instancias y de su vida útil máxima, los clientes pueden asegurarse de cumplir con las normas de seguridad y sistema operativo más recientes en lo que respecta a su capacidad.

El drenaje de instancias administradas solo se puede utilizar con los proveedores de capacidad de Amazon ECS. Puede activar el drenaje de instancias administradas al crear o actualizar los proveedores de capacidad del grupo de escalado automático mediante la consola de Amazon ECS, la AWS CLI o el SDK.

El drenaje de instancias administradas por Amazon ECS cubre los siguientes eventos.

  • Actualización de instancias de grupos de escalado automático: utilice la actualización de instancias para reemplazar de forma continua las instancias de Amazon EC2 del grupo de escalado automático, en lugar de hacerlo manualmente por lotes. Esto es útil cuando necesita reemplazar un gran número de instancias. La actualización de instancias se inicia a través de la consola de Amazon EC2 o la API StartInstanceRefresh. Asegúrese de seleccionar Replace para la protección de la reducción horizontal cuando llame a StartInstanceRefresh si utiliza la protección contra terminación administrada.

  • Duración máxima de la instancia: puede definir una vida útil máxima cuando se trata de reemplazar las instancias del grupo de escalado automático. Esto resulta útil para programar las instancias de reemplazo en función de las políticas de seguridad internas o el cumplimiento.

  • Reducción horizontal de grupos de escalado automático: en función de las políticas de escalado y las acciones de escalado programadas, el grupo de escalado automático admite el escalado automático de instancias. Al utilizar un grupo de escalado automático como proveedor de capacidad de Amazon ECS, puede reducir horizontalmente las instancias de grupo de escalado automático cuando no se esté ejecutando ninguna tarea en ellas.

  • Comprobaciones de estado de grupos de escalado automático: el grupo de escalado automático admite muchas comprobaciones de estado para administrar la terminación de instancias en mal estado.

  • Actualizaciones de pila de CloudFormation: puede agregar un atributo UpdatePolicy a su pila de CloudFormation para llevar a cabo actualizaciones continuas cuando el grupo cambie.

  • Reequilibrio de la capacidad de spot: el grupo de escalado automático intenta reemplazar de forma proactiva las instancias de spot que tienen un mayor riesgo de interrupción en función del aviso de reequilibrio de capacidad de Amazon EC2. El grupo de escalado automático finaliza la instancia anterior cuando se inicia la instancia de reemplazo y está en buen estado. El drenaje de instancias administradas por Amazon ECS drena la instancia de spot del mismo modo que drena una instancia que no es de spot.

  • Interrupción de spot: las instancias de spot se finalizan con dos minutos de antelación. El drenaje de instancias administradas por Amazon ECS pone a la instancia en estado de drenaje como respuesta.

Enlaces de ciclo de vida de Amazon EC2 Auto Scaling con el drenaje de instancias administradas

Los enlaces de ciclo de vida de los grupos de escalado automático permiten al cliente crear soluciones que se activan mediante ciertos eventos del ciclo de vida de la instancia, así como llevar a cabo una acción personalizada cuando se produce ese evento determinado. Un grupo de escalado automático permite hasta 50 enlaces. Pueden existir varios enlaces de terminación y se ejecutan en paralelo, y el grupo de escalado automático espera a que todos los enlaces terminen antes de terminar una instancia.

Además de la terminación de enlace administrada por Amazon ECS, también puede configurar sus propios enlaces de terminación del ciclo de vida. Los enlaces de ciclo de vida tienen una default action y recomendamos configurar continue como valor predeterminado para garantizar que otros enlaces, como el enlace administrado por Amazon ECS, no se vean afectados por ningún error de los enlaces personalizados.

Si ya configuró un enlace de ciclo de vida de terminación de un grupo de escalado automático y también habilitó el drenaje de instancias administradas por Amazon ECS, se ejecutarán ambos enlaces de ciclo de vida. Sin embargo, los tiempos relativos no están garantizados. Los enlaces de ciclo de vida tienen una configuración de default action para especificar la acción que se debe llevar a cabo cuando se agota el tiempo de espera. En caso de errores, le recomendamos el uso de continue como resultado predeterminado en su enlace personalizado. Esto garantiza que otros enlaces, especialmente los administrados por Amazon ECS, no se vean afectados por ningún error en su enlace de ciclo de vida personalizado. El resultado alternativo de abandon provoca que se omitan los demás ganchos y debe evitarse. Para obtener más información sobre los enlaces de ciclo de vida del grupo de escalado automático, consulte Amazon EC2 Auto Scaling lifecycle hooks en la Guía del usuario de Amazon EC2 Auto Scaling.

Drenaje de instancias administradas y tareas

El drenaje de instancias administradas por Amazon ECS utiliza la característica de drenaje existente que se encuentra en las instancias de contenedor. La característica de drenaje de instancias de contenedor reemplaza y detiene las tareas de réplica que pertenecen a un servicio de Amazon ECS. Una tarea independiente, como una invocada por RunTask, que esté en estado PENDING o RUNNING no se ve afectada. Tiene que esperar a que se completen o detenerlas manualmente. La instancia de contenedor permanece en ese estado DRAINING hasta que se detienen todas las tareas o hasta que hayan transcurrido 48 horas. Las tareas de daemon son las últimas en detenerse una vez que se hayan detenido todas las tareas de réplica.

Drenaje de instancias administradas y protección contra terminación administrada

El drenaje de instancias administradas funciona incluso si la terminación administrada está deshabilitada. Para obtener más información sobre la protección contra la terminación administrada, consulte Control de las instancias que Amazon ECS termina.

En la siguiente tabla se resume el comportamiento de las diferentes combinaciones de terminación administrada y drenaje administrado.

Terminación administrada Drenaje administrado Resultado

Habilitado

Habilitado Amazon ECS protege las instancias de Amazon EC2 que ejecutan tareas para que no se terminen debido a eventos de reducción horizontal. Todas las instancias en proceso de terminación, como las que no tienen configurada la protección contra terminación, las que han recibido una interrupción de spot o las que se ven forzadas por una actualización de la instancia, se drenan sin problemas.

Deshabilitado

Habilitado Amazon ECS no protege las instancias de Amazon EC2 que ejecutan tareas para que no se reduzcan horizontalmente. Sin embargo, cualquier instancia que se termine se drena sin problemas.

Habilitado

Deshabilitado Amazon ECS protege las instancias de Amazon EC2 que ejecutan tareas para que no se terminen debido a eventos de reducción horizontal. Sin embargo, las instancias aún se pueden terminar si se produce una interrupción de spot o se fuerza una actualización de la instancia, o si no se está ejecutando ninguna tarea. Amazon ECS no lleva a cabo correctamente el drenaje de estas instancias e inicia tareas de servicio de reemplazo una vez que se detienen.

Deshabilitad

Deshabilitado Las instancias de Amazon EC2 se pueden reducir horizontalmente o terminar en cualquier momento, incluso si ejecutan tareas de Amazon ECS. Amazon ECS iniciará las tareas de servicio de reemplazo una vez que se detengan.
Drenaje de instancias administradas y drenaje de instancias de spot

Con el drenaje de instancias de spot, puede configurar una variable de entorno ECS_ENABLE_SPOT_INSTANCE_DRAINING en el agente de Amazon ECS que permita a Amazon ECS colocar una instancia en estado de drenaje en respuesta a la interrupción de spot de dos minutos. El drenaje de instancias administradas por Amazon ECS facilita el cierre correcto de las instancias de Amazon EC2 que se están terminando por muchos motivos, no solo por una interrupción de spot. Por ejemplo, puede utilizar el reequilibrio de capacidad de Amazon EC2 Auto Scaling para reemplazar de forma proactiva la instancia de spot con un riesgo elevado de interrupción, y el drenaje de instancias administradas cierra sin problemas la instancia de spot que se está reemplazando. Cuando utiliza el drenaje de instancias administradas, no necesita habilitar el drenaje de instancias de spot por separado, por lo que ECS_ENABLE_SPOT_INSTANCE_DRAINING en los datos de usuario del grupo de escalado automático es redundante. Para obtener más información sobre el drenaje de instancias de spot, consulte Spot Instances.

Funcionamiento del drenaje de instancias administradas con EventBridge

Los eventos de drenaje de instancias administradas por Amazon ECS se publican en Amazon EventBridge, y Amazon ECS crea una regla administrada de EventBridge en el bus predeterminado de su cuenta para admitir el drenaje de instancias administradas. Puede filtrar estos eventos a otros servicios de AWS, como Lambda, Amazon SNS y Amazon SQS, para supervisar y solucionar problemas.

  • Amazon EC2 Auto Scaling envía un evento a EventBridge cuando se invoca un enlace de ciclo de vida.

  • Los avisos de interrupción de spot se publican en EventBridge.

  • Amazon ECS genera mensajes de error que puede recuperar a través de la consola y las API de Amazon ECS.

  • EventBridge cuenta con mecanismos de reintento integrados para mitigar los errores temporales.

Solución de problemas de drenaje de instancias administradas por Amazon ECS

Es posible que tenga que solucionar problemas relacionados con el drenaje de instancias administradas. A continuación, se incluye un ejemplo de un problema y de una solución que puede encontrar al usarlo.

Las instancias no se terminan después de superar la vida útil máxima de las instancias cuando se usa el escalado automático.

Si sus instancias no se terminan incluso después de alcanzar y superar la vida útil máxima de las instancias mientras usa un grupo de escalado automático, es posible que se deba a que están protegidas contra la reducción horizontal. Puede desactivar la terminación administrada y permitir que el drenaje administrado se encargue del reciclaje de instancias.

Comportamiento de vaciado de instancias administradas de Amazon ECS

Instancias administradas de Amazon ECS implementa procesos sofisticados de vaciado y terminación que garantizan transiciones de carga de trabajo graduales y, al mismo tiempo, optimizan los costos y mantienen el sistema en buen estado. El sistema de terminación ofrece tres vías de decisión distintas para la terminación de instancias, cada una con características temporales y perfiles de impacto en los clientes diferentes.

Rutas de decisión de terminación

Todas las rutas de terminación convergen en el mismo mecanismo de puesta en marcha a través del enlace de ciclo de vida POST_DEREGISTER que desencadena la API ReleaseNode de Node Manager para la terminación inmediata de la instancia de Amazon EC2.

Terminación iniciada por el cliente

Proporciona un control directo sobre la eliminación de instancias cuando es necesario eliminar inmediatamente las instancias de contenedor del servicio. Se invoca la API DeregisterContainerInstance con el indicador de fuerza establecido en true, lo que indica que es necesaria la terminación inmediata a pesar de que haya cargas de trabajo en marcha.

Terminación de inactividad iniciada por el sistema

Implementa la optimización de costos mediante la detección inteligente de inactividad que identifica las instancias que ya no atienden las cargas de trabajo. Elastic Workload Service (EWS) implementa sofisticados algoritmos de detección de inactividad que supervisan el uso de las instancias e inician la terminación de las instancias que permanecen inactivas durante periodos configurables.

Terminación de actualización de la infraestructura

Implementa una administración proactiva de la infraestructura mediante la política de degradación natural de Node Manager, según la cual las instancias se actualizan periódicamente para garantizar que se pongan en marcha en las versiones más recientes de la plataforma y mantener la seguridad. Node Manager implementa políticas de tiempo de vida (TTL) que inician la terminación sin problemas de las instancias que han alcanzado su vida útil operativa máxima.

Migración gradual de cargas de trabajo y vaciado

El sistema de vaciado gradual implementa una coordinación sofisticada con la administración de servicios de Amazon ECS para garantizar que las tareas administradas por el servicio se migren correctamente de las instancias cuya terminación está programada.

Coordinación del vaciado de las tareas de servicio

Cuando una instancia pasa al estado VACIANDO, el programador de Amazon ECS deja de colocar automáticamente nuevas tareas en la instancia y, al mismo tiempo, implementa procedimientos de cierre eficientes para las tareas de servicio existentes. El vaciado de las tareas de servicio incluye la coordinación con las estrategias de implementación del servicio, los requisitos de comprobación de estado y sus preferencias de vaciado para garantizar un tiempo de migración y unos índices de éxito óptimos.

Administración de tareas independientes

Las tareas independientes requieren una gestión diferente porque no se benefician de la administración automática del servicio. El sistema evalúa las características de las tareas independientes, incluidas las estimaciones de la duración de las tareas, el análisis de la probabilidad de finalización y la evaluación del impacto en el cliente. La eficiente estrategia de finalización permite que las tareas independientes se completen de forma natural durante un periodo de gracia prolongado, mientras que la terminación forzada garantiza que la actualización de la infraestructura se lleve a cabo en plazos aceptables cuando las tareas no se hayan completado de forma natural.

Estrategia de finalización de dos fases

El sistema de terminación implementa un enfoque de dos fases que equilibra la continuidad de la carga de trabajo con los requisitos de administración de la infraestructura.

Fase 1: periodo de finalización eficiente

Durante esta fase, el sistema implementa estrategias de vaciado gradual que priorizan la continuidad de la carga de trabajo. Las tareas de servicio se vacían gradualmente gracias a los procesos de programación normales de Amazon ECS, las tareas independientes continúan en marcha y pueden completarse de forma natural, y el sistema supervisa que todas las tareas lleguen al estado de parada mediante procesos de finalización natural.

Fase 2: cumplimiento de plazos estrictos

Cuando la finalización eficiente no permite alcanzar los objetivos de terminaci´n dentro de los plazos aceptables, el sistema implementa un estricto cumplimiento de los plazos. Por lo general, el plazo fijo consiste en vaciar el tiempo de iniciación más siete días, lo que proporciona un tiempo considerable para completarlo de forma gradual y, al mismo tiempo, mantener los requisitos operativos. El cumplimiento incluye la invocación automática de los procedimientos de terminación del registro forzoso y la terminación inmediata de todas las tareas pendientes, independientemente del estado en que estén terminadas.

Coordinación entre servicios y administración de estados

El proceso de terminación requiere una coordinación sofisticada entre el servicio de backend de administración de clústeres (CMBS) y Node Manager para garantizar que la anulación del registro de las instancias de contenedor y la limpieza de los recursos de Amazon EC2 se realicen en la secuencia adecuada y, al mismo tiempo, mantengan la coherencia.

Puesta en marcha del enlace POST_DEREGISTER

El enlace de ciclo de vida POST_DEREGISTER representa el punto de convergencia en el que las tres rutas de decisión de terminación ponen en marcha la misma lógica de limpieza. Cuando una instancia de contenedor alcanza el estado REGISTRO ANULADO, el enlace POST_DEREGISTER desencadena automáticamente la API ReleaseNode de Node Manager para iniciar las operaciones de limpieza de recursos de Amazon EC2. La implementación del enlace incluye una gestión sofisticada de errores para varios escenarios de falla, incluidos problemas de conectividad de red, problemas de disponibilidad del servicio Amazon EC2 y fallas de coordinación entre los componentes del sistema.

Limpieza y desasignación de recursos de Amazon EC2

El proceso de terminación de instancias de Amazon EC2 implementa una coordinación integral con los servicios de AWS para garantizar que los recursos computacionales subyacentes se desasignen correctamente. Esto incluye la limpieza de la interfaz de red para evitar la pérdida de recursos, la administración de los registros de las bases de datos con registros de auditoría exhaustivos y los mecanismos adecuados de gestión y recuperación de errores para diversos escenarios de fallo.