Diseñe sus aplicaciones para gestionar correctamente 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ñe sus aplicaciones para gestionar correctamente la terminación de instancias

En este tema se describen las funciones que puede usar para evitar que su grupo de Auto Scaling termine instancias que aún no están listas para ser terminadas o que termine las instancias demasiado rápido para que puedan completar sus tareas asignadas. Puede utilizar estas tres funciones en combinación o por separado para diseñar sus aplicaciones de forma que gestionen sin problemas la terminación de instancias.

Por ejemplo, supongamos que tiene una cola de Amazon SQS que recopila los mensajes entrantes para tareas de larga duración. Cuando llega un mensaje nuevo, una instancia del grupo de escalado automático recupera el mensaje y comienza a procesarlo. Cada mensaje tarda 3 horas en procesarse. A medida que aumenta el número de mensajes, se agregan automáticamente nuevas instancias al grupo de escalado automático. A medida que disminuye el número de mensajes, las instancias existentes se cancelan automáticamente. En este caso, Amazon EC2 Auto Scaling debe decidir qué instancia debe terminar. De forma predeterminada, es posible que Amazon EC2 Auto Scaling termine una instancia que lleva 2,9 horas procesando un trabajo de 3 horas, en lugar de una instancia que está inactiva en ese momento. Para evitar problemas con las terminaciones inesperadas al utilizar Amazon EC2 Auto Scaling, debe diseñar la aplicación para que responda a este escenario.

importante

Cuando diseñe sus aplicaciones en Amazon EC2 Auto Scaling para gestionar correctamente la terminación de instancias, tenga en cuenta estos puntos.

  • Si una instancia está en mal estado, Amazon EC2 Auto Scaling la reemplazará independientemente de la característica que utilice (a menos que suspenda el proceso ReplaceUnhealthy). Puede usar un enlace de ciclo de vida para permitir que la aplicación se cierre correctamente o copiar cualquier dato que necesite recuperar antes de que finalice la instancia.

  • No se garantiza que un enlace de ciclo de vida de terminación se ejecute o finalice antes de que se dé por finalizada la instancia. Si se produce algún error, Amazon EC2 Auto Scaling termina la instancia de todas formas.

Protección contra la reducción horizontal de instancias

Puede utilizar la protección contra la reducción horizontal de instancias en muchas situaciones en las que la terminación de las instancias es una acción fundamental que debería denegarse de forma predeterminada y solo estar permitida de forma explícita para instancias específicas. 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. Servicios como Amazon ECS han incorporado integraciones con protección contra la reducción horizontal de instancias en sus productos.

Puede habilitar la protección contra la reducción horizontal en el grupo de escalado automático para aplicar la protección contra la reducción horizontal a las instancias cuando se crean y habilitarla para las instancias existentes. Cuando una instancia no tiene más trabajo por hacer, puede desactivar la protección. La instancia puede seguir buscando nuevos trabajos y volver a habilitar la protección cuando se asignen nuevos trabajos.

Las aplicaciones pueden configurar la protección desde un plano de control centralizado que gestiona si una instancia es terminable o no, o desde las propias instancias. Sin embargo, una flota grande podría tener problemas de limitación si un gran número de instancias cambian continuamente su protección contra la reducción horizontal.

Para obtener más información, consulte Utilice la protección escalable de instancias para controlar la terminación de las instancias.

Política de terminación personalizada

Al igual que la protección frente a la reducción horizontal de instancias, una política de terminación personalizada le ayuda a impedir que el grupo de escalado automático termine instancias específicas.

De forma predeterminada, el grupo de escalado automático utiliza una política de terminación predeterminada para determinar qué instancias termina primero. Si desea tener más control sobre qué instancias terminan primero, puede implementar su propia política de terminación personalizada mediante una función de Lambda. Amazon EC2 Auto Scaling llama a la función siempre que debe decidir qué instancia ha de terminar. Solo finalizará una instancia devuelta por la función. Si la función produce un error, se agota el tiempo de espera o produce una lista vacía, Amazon EC2 Auto Scaling no finaliza las instancias.

Una política de terminación personalizada es útil si se sabe cuándo una instancia es lo suficientemente redundante o infrautilizada como para poder cancelarla. Para ello, debe implementar la aplicación con un plano de control que supervise la carga de trabajo de todo el grupo. De esta forma, si una instancia sigue procesando tareas, la función de Lambda sabrá que no debe incluirla.

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

Enlaces de ciclo de vida de terminación

Un enlace de ciclo de vida de terminación prolonga la vida útil de una instancia que ya está seleccionada para su terminación. Proporciona tiempo adicional para completar todos los mensajes o solicitudes actualmente asignados 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 de ciclo de vida puede ser suficiente para cerrar sin problemas una aplicación en una instancia seleccionada para su finalización. Se trata de un enfoque que hace todo lo posible y no se puede utilizar para evitar la rescisión en caso de que se produzca un error.

Para usar un enlace de ciclo de vida, debe saber cuándo se selecciona una instancia para su finalización. Tiene dos formas de saberlo:

Opción 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. Recuperación del estado de ciclo de vida de destino
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 para capturar estos eventos e invocar una respuesta, por ejemplo, con una función Lambda. Aplicaciones que deben realizar acciones fuera de la instancia. Configuración de un destino 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 le indicará a Amazon EC2 que termine la instancia hasta que reciba CompleteLifecycleActionuna llamada 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 una acción del ciclo de vida esté realmente en curso, puede extender el tiempo de espera mediante llamadas a la API. RecordLifecycleActionHeartbeat

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