Diseño de aplicaciones para gestionar sin problemas la terminación de instancias - Amazon EC2 Auto Scaling

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Diseño de aplicaciones para gestionar sin problemas la terminación de instancias

En este tema se describen las funciones que puede utilizar para impedir que su grupo de Amazon EC2 Auto Scaling termine las instancias de Amazon EC2 que aún no están listas para finalizar. De forma predeterminada, Auto Scaling no tiene visibilidad de las aplicaciones que se ejecutan en sus instancias. Puede finalizar las instancias antes de que la aplicación pueda cerrar o completar las tareas asignadas sin problemas. Estas funciones le dan tiempo a la aplicación para completar el trabajo en curso, transferir el estado o realizar una limpieza antes de que se cierre la instancia. Puede utilizarlas individualmente o en combinación, en función de los requisitos de la aplicación.

Estas funciones son especialmente útiles para las cargas de trabajo con estado, en las que cada instancia de la flota contiene datos, trabajos o estados diferentes a los de otras instancias. La finalización de las instancias activas sin un cierre correcto puede provocar que los trabajos que se estén ejecutando durante mucho tiempo se reinicien desde el principio, se reduzca la redundancia o la pérdida de datos y se interrumpan las transacciones o los cálculos en curso. Para cerrar correctamente una instancia con estado, su carga de trabajo debe agotarse (completando todos los trabajos actualmente asignados) o transferirse (mover los trabajos, los datos o la configuración a otra instancia activa).

Enlaces de ciclo de vida de terminación

Un enlace del ciclo de vida de terminación prolonga la vida útil de la instancia de Amazon EC2 que ya está seleccionada para la terminación. Proporciona tiempo adicional para completar el trabajo en curso asignado actualmente a la instancia o para guardar el progreso y transferir el trabajo a otra instancia.

En el caso de muchas cargas de trabajo, una interrupción del ciclo de vida de terminación puede ser suficiente para cerrar sin problemas una aplicación en una instancia seleccionada para su finalización. Este es el enfoque que se hace todo lo posible y no se puede utilizar para impedir la rescisión si se abandona una acción relacionada con el ciclo de vida de la rescisión. Si su carga de trabajo tiene una baja tolerancia a los fallos en las acciones del ciclo de vida de las instancias, configure las políticas del ciclo de vida de las instancias en combinación con los enlaces del ciclo de vida de las terminaciones para conservar las instancias.

Para usar un enlace del ciclo de vida de las terminaciones, debes saber cuándo se selecciona una instancia para su terminación. Tiene dos formas de saberlo:

Opción Description (Descripción) Más adecuado para Enlace a la documentación
Dentro de la instancia El Servicio de metadatos de instancias (IMDS) es un punto de conexión seguro en el que se puede sondear el estado de una instancia directamente desde la instancia. Si los metadatos arrojan Terminated, entonces está previsto que la instancia sea terminada. Aplicaciones en las que debe realizar una acción en la instancia antes de que se cierre. Recupera el estado del ciclo de vida objetivo
Fuera de la instancia Cuando una instancia finaliza, se genera una notificación de evento. Puede crear reglas con Amazon EventBridge, Amazon SQS, Amazon SNS AWS Lambda o para capturar estos eventos e invocar una respuesta, por ejemplo, con una función Lambda. Aplicaciones que deben realizar acciones fuera de la instancia. Configure un objetivo de notificación

Para usar un enlace de ciclo de vida, también necesitas saber cuándo la instancia está lista para finalizar por completo. Amazon EC2 Auto Scaling no finalizará la instancia hasta que reciba una llamada a la CompleteLifecycleActionAPI o hasta que se agote el tiempo de espera, lo que ocurra primero.

De forma predeterminada, una instancia puede seguir ejecutándose durante una hora (tiempo de espera) debido a un enlace de ciclo de vida de terminación. Puede configurar el tiempo de espera predeterminado si una hora no es suficiente para completar la acción del ciclo de vida. Cuando se está llevando a cabo una acción del ciclo de vida, puede extender el tiempo de espera con llamadas a la API. RecordLifecycleActionHeartbeat

Para obtener más información, consulte Enlaces de ciclo de vida de Amazon EC2 Auto Scaling.

Protección contra la reducción horizontal de instancias

Puedes usar la protección escalable de instancias para controlar qué instancias se seleccionan para su cierre durante los eventos de escalamiento interno, especialmente para evitar que se termine una instancia que está procesando activamente un trabajo de larga duración. Por ejemplo, cuando se ejecutan cargas de trabajo en contenedores, es habitual querer proteger todas las instancias y eliminar la protección solo para las instancias que no tienen tareas actuales o programadas. Las instancias pueden seguir buscando nuevos trabajos y volver a habilitar la protección cuando se les asignen nuevos trabajos.

Puede habilitar la protección escalable a nivel de grupo e instancia de Auto Scaling. Al habilitar la protección escalable en el nivel de grupo de Auto Scaling, solo se protegen las instancias nuevas cuando se crean. En el caso de las instancias existentes, puede habilitar la protección de forma individual.

Las aplicaciones pueden configurar la protección desde las propias instancias o desde un plano de control centralizado que gestiona si cada instancia es finalizable. Recomendamos el enfoque centralizado para flotas grandes o cuando sea necesario cambiar la protección con frecuencia, ya que permite realizar llamadas por lotes SetInstanceProtectiony evitar problemas de limitación de la API.

Para obtener más información, consulte Uso de la protección frente a la reducción horizontal de instancias para controlar la terminación de instancias.

Política de terminación personalizada

Al igual que la protección escalable de instancias, una política de terminación personalizada le ayuda a evitar que su grupo de Auto Scaling de Amazon EC2 termine instancias EC2 específicas. Las instancias que no estén en buen estado pueden cancelarse independientemente de la política de terminación personalizada que tenga.

Su grupo de Auto Scaling usa una política de terminación predeterminada para determinar qué instancias de Amazon EC2 termina primero. Si quieres tener más control sobre qué instancias terminan primero, puedes implementar una política de terminación personalizada mediante una función Lambda. Auto Scaling llama a esta función siempre que necesite seleccionar una instancia para su terminación y solo terminará las instancias que devuelva la función. Si la función produce un error, se agota el tiempo de espera o devuelve una lista vacía, Auto Scaling no termina ninguna instancia a menos que la instancia no esté en buen estado.

Una política de terminación personalizada resulta útil cuando la aplicación puede identificar qué instancias están inactivas o qué instancias se pueden terminar de forma segura. Por lo general, esto requiere un plano de control que haga un seguimiento de la carga de trabajo en todo el grupo.

Para obtener más información, consulte Creación de una política de terminación personalizada con Lambda.

Política del ciclo de vida de las

Las políticas del ciclo de vida de las instancias brindan protección contra las terminaciones de Auto Scaling de Amazon EC2 cuando se abandona una acción del ciclo de vida de la terminación. A diferencia de los enlaces del ciclo de vida por sí solos, las políticas del ciclo de vida de las instancias están diseñadas para garantizar que las instancias pasen a un estado retenido cuando los procedimientos de cierre correctos no se completen correctamente.

Cuando Auto Scaling selecciona una instancia para su finalización, se invocan los enlaces del ciclo de vida de terminación configurados y la aplicación inicia procedimientos de cierre sin problemas. Si las acciones del ciclo de vida de terminación se completan correctamenteCONTINUE, la instancia finaliza normalmente. Sin embargo, si se abandona una acción de cancelación del ciclo de vida por cualquier motivo, la política del ciclo de vida de la instancia pasa la instancia a un estado retenido en lugar de finalizarla. Las instancias retenidas no cuentan para la capacidad deseada de su grupo de Auto Scaling, por lo que las instancias de reemplazo se lanzan automáticamente. Se le cobrarán los cargos estándar de Amazon EC2 tanto por la instancia retenida como por su reemplazo hasta que cancele manualmente la instancia retenida mediante TerminateInstanceInAutoScalingGroupla API.

Para usar esta función, debe configurar una política de ciclo de vida de la instancia con el activador de TerminateHookAbandon retención establecido enretain, así como al menos un enlace del ciclo de vida de la terminación. Dado que las instancias retenidas conllevan costos continuos de Amazon EC2 y requieren una acción manual, la supervisión es fundamental. Debería habilitar CloudWatch métricas como estas GroupTerminatingRetainedInstances y crear CloudWatch alarmas que le avisen cuando las instancias entren en estados de retención.

Para obtener más información, consulte Controle la retención de instancias con políticas de ciclo de vida de las instancias.

Suspenda las terminaciones por completo

Si necesita un control total sobre todas las terminaciones de instancias EC2 de su grupo de Amazon EC2 Auto Scaling, Terminate suspenda el proceso. Solo recomendamos usar esta opción si las opciones anteriores no le ofrecen el control que necesita para su servicio. Al SuspendProcessessolicitar la suspensión del Terminate proceso, evitas que Auto Scaling intente cancelarlo por cualquier motivo, excepto por aquellos iniciados por una solicitud del usuario a la TerminateInstanceInAutoScalingGroupAPI.

Para obtener más información, consulte Suspensión y reanudación de procesos de Amazon EC2 Auto Scaling.

Limitaciones

importante

Al diseñar su aplicación en Amazon EC2 Auto Scaling para gestionar correctamente las terminaciones de instancias, tenga en cuenta las siguientes limitaciones.

Las instancias en mal estado eluden algunas protecciones

Si una instancia no está en buen estado, Auto Scaling de Amazon EC2 empezará a cancelarla incluso si cuenta con políticas de terminación personalizadas o protección escalable. La única forma de evitar que Auto Scaling sustituya las instancias en mal estado es suspender el Terminate proceso HealthCheckReplaceUnhealthy, o. Puede usar enlaces de ciclo de vida y una política de ciclo de vida de la instancia para permitir que la aplicación se cierre correctamente o copiar cualquier dato que necesite recuperar antes de que finalice la instancia en mal estado.

Característica Controla las instancias en buen estado Controla las instancias en mal estado
Políticas de rescisión personalizadas No
Protección de reducción horizontal No
Suspender HealthCheck o Terminate procesar ReplaceUnhealthy
Enlaces de ciclo de vida
Política del ciclo de vida de las

Los enlaces del ciclo de vida por sí solos no garantizan un cierre correcto

De forma predeterminada, los enlaces del ciclo de vida de las terminaciones funcionan con el máximo esfuerzo. Si se suspende una acción del ciclo de vida de terminación, Amazon EC2 Auto Scaling procederá a terminar la instancia inmediatamente. Puede combinar los enlaces del ciclo de vida de la terminación con una política del ciclo de vida de la instancia para conservar las instancias cuando se abandonen las acciones relacionadas con el ciclo de vida de la terminación. Con esta combinación:

  • Los enlaces del ciclo de vida de terminación intentan cerrar correctamente la aplicación después de que Auto Scaling active la finalización de una instancia y se complete el drenaje de cualquier balanceador de carga de Elastic Load Balancing configurado.

  • Si se suspende una acción del ciclo de vida de terminación por cualquier motivo, la instancia pasa a un estado retenido en lugar de cerrarse.

  • La instancia retenida permanece en su estado actual de Amazon EC2, lo que le permite completar manualmente los procedimientos de cierre o investigar el error.

  • Puede finalizar manualmente las instancias retenidas llamando a la TerminateInstanceInAutoScalingGroupAPI después de completar las acciones necesarias.

Para obtener más información, consulte Controle la retención de instancias con políticas de ciclo de vida de las instancias.

En algunos casos, las opciones del mercado pueden interrumpirse con un aviso limitado

Si utiliza opciones del mercado de instancias, como instancias puntuales y reservas de capacidad interrumpible en su grupo de Auto Scaling, Amazon EC2 puede interrumpir y recuperar sus instancias en cualquier momento. Estas interrupciones eluden todos los mecanismos de protección de Auto Scaling de Amazon EC2, incluidos:

  • Enlaces de ciclo de vida de terminación

  • Protección contra la reducción horizontal de instancias

  • Políticas de rescisión personalizadas

  • Políticas de ciclo de vida de las

  • Procesos suspendidos

Cuando una instancia puntual recibe una notificación de interrupción, dispone de aproximadamente dos minutos para realizar tareas de cierre sin problemas. Si bien puede utilizar los enlaces del ciclo de vida de terminación para responder a las interrupciones de las instancias puntuales, la instancia se cancelará forzosamente al final del período de dos minutos, incluso si el enlace del ciclo de vida aún está en curso. Las políticas del ciclo de vida de las instancias tampoco pueden evitar las interrupciones de las instancias puntuales.

Para obtener más información sobre la gestión de las interrupciones de instancias puntuales, consulte Interrupciones de instancias puntuales y prácticas recomendadas para Amazon EC2 Spot en la Guía del usuario de Amazon EC2.

Las terminaciones directas de Amazon EC2 eluden todas las protecciones

Si finaliza una instancia de su grupo de Auto Scaling directamente con la TerminateInstancesAPI de Amazon EC2, la terminación omite todos los mecanismos de protección de Auto Scaling de Amazon EC2.

Para terminar las instancias de su grupo de Auto Scaling y, al mismo tiempo, respetar las protecciones configuradas, utilice la TerminateInstanceInAutoScalingGroupAPI en su lugar.

Ejemplos de escenarios de

Cuando utiliza Auto Scaling de Amazon EC2, puede elegir la cantidad de gestión de flotas que Auto Scaling gestiona en su nombre en lugar del control directo que conserva sobre las decisiones de cancelación de instancias de EC2. Cuanto más sensible sea su carga de trabajo a las cancelaciones de instancias, más control querrá conservar. En los siguientes ejemplos, se describen las cargas de trabajo con diferentes niveles de tolerancia y las configuraciones recomendadas:

Ejemplo 1: Nodos de bases de datos distribuidas (tolerancia baja)

Ejecuta una base de datos distribuida en la que cada instancia de EC2 contiene una partición de los datos con un factor de replicación de 3. La pérdida de varias instancias que contienen réplicas de la misma partición podría provocar la pérdida de datos o hacer que la partición no esté disponible.

Desafío: Auto Scaling puede terminar las instancias más rápido de lo que se pueden volver a replicar los datos en otros nodos, y las terminaciones pueden reducir la capacidad por debajo de lo necesario para mantener el factor de replicación.

Tenga en cuenta las siguientes configuraciones:

Ejemplo 2: Procesamiento de trabajos de larga duración (tolerancia media)

Tiene una cola de Amazon SQS que recopila los mensajes entrantes para tareas de larga duración. Cuando llega un mensaje nuevo, una instancia de EC2 lo recupera e inicia un trabajo que tarda 3 horas en procesarse. A medida que la cola crece, Auto Scaling agrega instancias en función de sus políticas de escalado. A medida que la cola se reduce, Auto Scaling termina las instancias.

Desafío: Auto Scaling podría terminar una instancia que lleva 3 horas procesando un trabajo en lugar de una instancia inactiva. El trabajo se puede reiniciar en otra instancia, pero se pierde un progreso significativo.

Tenga en cuenta las siguientes configuraciones:

Ejemplo 3: Flota de trabajadores para entornos de prueba (tolerancia alta)

Usted ejecuta una flota de instancias EC2 que ejecutan pruebas automatizadas, trabajos en CI/CD proceso o cargas de trabajo de desarrollo. Estas instancias de trabajo extraen tareas de una cola y los resultados de las pruebas se pueden regenerar si un trabajo falla.

Desafío: es posible que los trabajos de prueba se interrumpan durante los eventos de escalado, pero dado que las pruebas se pueden volver a intentar sin ningún impacto, es mejor optimizar los costos y la simplicidad en lugar de una disponibilidad sin interrupciones.

Tenga en cuenta las siguientes configuraciones: