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 evitar que su grupo de Amazon EC2 Auto Scaling finalice las instancias de Amazon EC2 que aún no están listas para terminar. De forma predeterminada, Auto Scaling no tiene visibilidad de las aplicaciones que se ejecutan en sus instancias. Puede terminar las instancias antes de que la aplicación pueda cerrar correctamente o completar las tareas asignadas. Estas funciones dan tiempo a la aplicación para completar el trabajo en curso, transferir el estado o realizar la limpieza antes de que finalice la instancia. Puedes usarlas de forma individual o en combinación, según los requisitos de tu aplicación.
Estas funciones son especialmente útiles para las cargas de trabajo en estado, en las que cada instancia de la flota contiene datos, tareas o estados diferentes a los de otras instancias. La finalización de las instancias con estado sin cerrarlas correctamente puede provocar que los trabajos de larga duración se reinicien desde el principio, reducir la redundancia o la pérdida de datos e interrumpir las transacciones o los cálculos en curso. Para cerrar correctamente una instancia con estado, su carga de trabajo debe agotarse (completar todos los trabajos actualmente asignados) o transferirse (mover los trabajos, los datos o la configuración a otra instancia activa).
Contenido
Enlaces de ciclo de vida de terminación
Un enlace al ciclo de vida de la terminación prolonga la vida útil de la instancia de Amazon EC2 que ya esté seleccionada para su finalizació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, un enlace al ciclo de vida de terminación puede ser suficiente para cerrar correctamente una aplicación en una instancia seleccionada para su finalización. Se trata de hacer todo lo posible y no se puede usar para evitar la terminación si se abandona una acción del ciclo de vida de terminación. Si tu carga de trabajo tolera poco los errores en las acciones del ciclo de vida de terminación, configura las políticas del ciclo de vida de las instancias en combinación con los ganchos del ciclo de vida de terminación para retener las instancias.
Para usar un enlace del ciclo de vida de terminación, 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 o Amazon SNS o AWS Lambda para capturar estos eventos e invocar una respuesta, por ejemplo, con una función de 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 terminará la instancia hasta que reciba una llamada a la CompleteLifecycleAction API o haya transcurrido 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 hay una acción del ciclo de vida en curso, puede ampliar 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 de escalamiento de instancias para controlar qué instancias se seleccionan para su finalización durante los eventos de escalamiento, especialmente para evitar que se cancele 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 haya nuevos trabajos asignados.
Puede habilitar la protección escalable a nivel de grupo e instancia de Auto Scaling. Cuando habilitas la protección escalable a nivel de grupo de Auto Scaling, solo las instancias nuevas están protegidas cuando se crean. Para las instancias existentes, puedes 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 gestione si cada instancia es terminable. Recomendamos el enfoque centralizado para flotas grandes o cuando sea necesario cambiar la protección con frecuencia, ya que permite realizar llamadas por lotes SetInstanceProtection y evitar problemas de limitación de las 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 Amazon EC2 Auto Scaling cancele instancias de EC2 específicas. Las instancias en mal estado pueden cancelarse de todos modos, independientemente de cuál sea su política de terminación personalizada.
Su grupo de Auto Scaling utiliza una política de terminación predeterminada para determinar qué instancias de Amazon EC2 finaliza primero. Si desea tener más control sobre qué instancias terminan primero, puede implementar una política de terminación personalizada mediante una función de Lambda. Auto Scaling llama a esta función siempre que necesita 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 cierra ninguna instancia a menos que la instancia esté en mal estado.
Una política de terminación personalizada resulta útil cuando la aplicación puede identificar qué instancias están inactivas o si es seguro cancelarlas. 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 Amazon EC2 Auto Scaling cuando se abandona una acción del ciclo de vida de terminación. A diferencia de los ganchos del ciclo de vida, las políticas del ciclo de vida de las instancias están diseñadas para garantizar que las instancias pasen a un estado de retención cuando los procedimientos de cierre correctos no se completen correctamente.
Cuando Auto Scaling selecciona una instancia para su terminación, se invocan los enlaces del ciclo de vida de terminación configurados y la aplicación inicia los procedimientos de cierre correctos. 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 del ciclo de vida de la instancia por cualquier motivo, la política del ciclo de vida de la instancia la mueve a un estado retenido en lugar de terminarla. Las instancias retenidas no se tienen en cuenta 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 la de reemplazo hasta que cancele manualmente la instancia retenida mediante la TerminateInstanceInAutoScalingGroup API.
Para utilizar esta función, debe configurar una política del ciclo de vida de la instancia con el activador de TerminateHookAbandon retención activado yretain, al menos, un enlace del ciclo de vida de terminación. Dado que las instancias retenidas implican costes continuos de Amazon EC2 y requieren acciones manuales, la supervisión es fundamental. Debe habilitar CloudWatch métricas comoGroupTerminatingRetainedInstances, por ejemplo, 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.
Suspende por completo las terminaciones
Si necesita un control total sobre todas las terminaciones de instancias EC2 de su grupo de Amazon EC2 Auto Scaling, suspenda el proceso. Terminate Solo recomendamos usar esta opción si las opciones anteriores no le ofrecen el control que necesita para su servicio. Al SuspendProcesses solicitar la suspensión del Terminate proceso, evitas que Auto Scaling intente terminar por cualquier motivo, excepto cuando el usuario lo solicite a la TerminateInstanceInAutoScalingGroup API.
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, Amazon EC2 Auto Scaling empezará a cancelarla aunque tenga políticas de terminación personalizadas o una protección escalable. La única forma de evitar que Auto Scaling sustituya las instancias en mal estado es suspender el proceso HealthCheck o. ReplaceUnhealthy Terminate Puedes usar enlaces del ciclo de vida y una política del ciclo de vida de la instancia para permitir que la aplicación se cierre correctamente o copiar cualquier dato que necesites 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 terminación personalizadas | ||
| Scale-in protección | ||
Suspender HealthCheck o Terminate procesar ReplaceUnhealthy |
||
| Enlaces de ciclo de vida | ||
| Política del ciclo de vida de las |
Los ganchos del ciclo de vida por sí solos no garantizan un cierre correcto
De forma predeterminada, los ganchos del ciclo de vida de terminación funcionan en la medida de lo posible. Si se abandona una acción del ciclo de vida de terminación, Amazon EC2 Auto Scaling procederá a la terminación inmediata de la instancia. Puede combinar los ganchos del ciclo de vida de terminación con una política del ciclo de vida de la instancia para retener las instancias cuando se abandonen las acciones del ciclo de vida de terminación. Con esta combinación:
-
Los ganchos del ciclo de vida de terminación intentan cerrar correctamente la aplicación después de que Auto Scaling active la terminación de una instancia y se complete el proceso de desactivación de todos los balanceadores de carga de Elastic Load Balancing configurados.
-
Si se abandona una acción del ciclo de vida de terminación por cualquier motivo, la instancia pasa a un estado de retención en lugar de terminarse.
-
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 terminar manualmente las instancias retenidas llamando a la TerminateInstanceInAutoScalingGroup API 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.
Algunas opciones de mercado de instancias pueden interrumpirse sin previo aviso
Si utiliza opciones del mercado de instancias, como las instancias puntuales y las reservas de capacidad interrumpible, en su grupo de Auto Scaling, Amazon EC2 puede interrumpir sus instancias y recuperarlas en cualquier momento. Estas interrupciones eluden todos los mecanismos de protección de Amazon EC2 Auto Scaling, incluidos los siguientes:
-
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 del ciclo de vida de las
-
Procesos suspendidos
Cuando una instancia puntual recibe un aviso de interrupción, dispone de aproximadamente dos minutos para realizar correctamente las tareas de cierre. Si bien puede utilizar los ganchos del ciclo de vida de terminación para responder a las interrupciones de una instancia puntual, 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 cómo gestionar las interrupciones de las instancias puntuales, consulte las interrupciones de las instancias puntuales y las mejores prácticas para Amazon EC2 Spot en la guía del usuario de Amazon EC2.
Las terminaciones directas de Amazon EC2 eluden todas las protecciones
Si cancela una instancia de su grupo de Auto Scaling directamente con la TerminateInstances API de Amazon EC2, la terminación omite todos los mecanismos de protección de Amazon EC2 Auto Scaling.
Para cancelar las instancias de su grupo de Auto Scaling sin dejar de respetar las protecciones configuradas, utilice la TerminateInstanceInAutoScalingGroup API en su lugar.
Ejemplos de escenarios de
Cuando utiliza Amazon EC2 Auto Scaling, puede elegir la gestión de la flota que Auto Scaling gestiona en su nombre y no el control directo que tiene sobre las decisiones de finalización de las instancias de EC2. Cuanto más sensible sea su carga de trabajo a la terminación 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 distribuidos (tolerancia baja)
Ejecuta una base de datos distribuida en la que cada instancia 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 puede provocar la pérdida de datos o hacer que esa partición no esté disponible.
Desafío: el escalado automático puede terminar las instancias más rápido de lo que se puede volver a replicar los datos en otros nodos, y las terminaciones pueden reducir la capacidad por debajo de lo que se necesita para mantener el factor de replicación.
Tenga en cuenta las siguientes configuraciones:
-
Habilite la protección escalable de instancias en todas las instancias de bases de datos; elimínela mediante programación solo después de confirmar que los datos se han replicado de forma segura en otros lugares.
-
Configura los enlaces del ciclo de vida de terminación con tiempos de espera prolongados en combinación con una política del ciclo de vida de las instancias para permitir que se complete la transferencia de datos.
-
Establece una política de mantenimiento de instancias con un porcentaje mínimo en buen estado del 100% para mantener la capacidad requerida.
Ejemplo 2: procesamiento de Long-running trabajos (tolerancia media)
Tiene una cola de Amazon SQS que recopila los mensajes entrantes para los trabajos de larga duración. Cuando llega un mensaje nuevo, una instancia EC2 lo recupera e inicia un trabajo que tarda 3 horas en procesarse. A medida que aumenta la cola, 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 puede cerrar 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:
-
Configure una política de terminación personalizada que priorice primero la terminación de las instancias inactivas.
-
Usa los ganchos del ciclo de vida de terminación para permitir que se completen los trabajos en curso.
-
Habilite la protección escalable de instancias de forma programática cuando una instancia inicie un trabajo y elimínela cuando finalice el trabajo.
Ejemplo 3: Flota de trabajadores para entornos de prueba (alta tolerancia)
Usted administra una flota de instancias EC2 que ejecutan pruebas automatizadas, trabajos de CI/CD canalización o cargas de trabajo de desarrollo. Estas instancias de trabajo extraen las 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 escalamiento, 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 lograr una disponibilidad sin interrupciones.
Tenga en cuenta las siguientes configuraciones:
-
Utilice los enlaces del ciclo de vida de terminación para permitir que se completen las solicitudes en curso.
-
Considere la posibilidad de usar instancias puntuales con una estrategia de asignación optimizada en cuanto a capacidad para reducir aún más los costos.