Proteja sus tareas de Amazon ECS para que no se den por terminadas por eventos de reducción horizontal
Puede usar la protección de reducción horizontal de tareas de Amazon ECS para proteger sus tareas y evitar que finalicen debido a eventos de reducción horizontal derivados del escalado automático o las implementaciones de un servicio.
Algunas aplicaciones requieren un mecanismo para evitar que las tareas de misión crítica finalicen por eventos de reducción horizontal en momentos de baja utilización o durante las implementaciones de servicios. Por ejemplo:
-
Tiene una aplicación asíncrona de procesamiento de colas, como un trabajo de transcodificación de video, en el que algunas tareas deben ejecutarse durante horas, incluso cuando la utilización acumulada del servicio es baja.
-
Tiene una aplicación de juegos que ejecuta servidores de juegos como tareas de Amazon ECS que deben seguir ejecutándose incluso si todos los usuarios han cerrado sesión para reducir la latencia de inicio del reinicio del servidor.
-
Al implementar una nueva versión de código, es necesario que las tareas sigan ejecutándose, ya que volver a procesarlas sería costoso.
Para proteger las tareas que pertenecen a su servicio y evitar que se terminen en un evento de reducción horizontal, establezca el atributo ProtectionEnabled
en true
. Si se establece ProtectionEnabled
como verdadero, las tareas quedan protegidas durante 2 horas de forma predeterminada. Puede personalizar el periodo de protección mediante el atributo ExpiresInMinutes
. Puede proteger sus tareas durante un mínimo de 1 minuto y hasta un máximo de 2880 minutos (48 horas). Si utiliza la AWS CLI, puede especificar la opción --protection-enabled
.
Cuando una tarea termine su trabajo requerido, puede establecer el atributo ProtectionEnabled
en false
, lo que permite que la tarea finalice mediante eventos de reducción horizontal posteriores. Si utiliza la AWS CLI, puede especificar la opción --no-protection-enabled
.
Mecanismos de protección de reducción horizontal de tareas
Puede configurar y obtener una protección de reducción horizontal de tareas mediante el punto de conexión del agente de contenedores de Amazon ECS o la API de Amazon ECS.
-
Punto de conexión del agente de contenedor de Amazon ECS
Recomendamos utilizar el punto de conexión del agente de contenedores de Amazon ECS para tareas que puedan determinar por sí mismas la necesidad de protección. Utilice este enfoque para cargas de trabajo basadas en colas o de procesamiento de trabajos.
Cuando un contenedor comienza a procesar el trabajo, por ejemplo, al consumir un mensaje SQS, puede configurar el atributo
ProtectionEnabled
a través de la ruta del punto de conexión de protección de reducción horizontal de tareas$ECS_AGENT_URI/task-protection/v1/state
desde el contenedor. Amazon ECS no finalizará esta tarea durante los eventos de reducción horizontal. Cuando la tarea termine su trabajo, puede borrar el atributoProtectionEnabled
con el mismo punto de conexión, lo que permite que la tarea pueda finalizarse durante eventos de reducción horizontal posteriores.Para obtener más información sobre cómo usar el punto de conexión del agente de contenedores de Amazon ECS, consulte Punto de conexión de protección de reducción horizontal de tareas de Amazon ECS.
-
API de Amazon ECS
Puede usar la API de Amazon ECS para configurar y recuperar la protección de reducción horizontal de tareas si su aplicación tiene un componente que rastrea el estado de las tareas activas. Utilice
UpdateTaskProtection
para marcar una o más tareas como protegidas. UseGetTaskProtection
para recuperar el estado de protección.Un ejemplo de este enfoque sería si su aplicación aloja sesiones de servidor de juegos como tareas de Amazon ECS. Cuando un usuario inicia sesión en el servidor (tarea), puede marcar la tarea como protegida. Cuando el usuario cierre la sesión, puede desactivar la protección específicamente para esta tarea o desactivar de forma periódica la protección para tareas similares que ya no tengan sesiones activas, según sus necesidades de mantener los servidores inactivos.
Para obtener más información, consulte UpdateTaskProtection y GetTaskProtection en la Referencia de la API de Amazon Elastic Container Service.
Puede combinar ambos enfoques. Por ejemplo, utilice el punto de conexión del agente de Amazon ECS para configurar la protección de tareas desde un contenedor y utilice la API de Amazon ECS para quitar la protección de tareas de su servicio de controlador externo.
Consideraciones
Tenga en cuenta los siguientes puntos antes de utilizar la protección de reducción horizontal de tareas:
-
Recomendamos utilizar el punto de conexión del agente de contenedor de Amazon ECS porque el agente de Amazon ECS tiene mecanismos de reintento incorporados y una interfaz más sencilla.
-
Para restablecer el periodo de caducidad de la protección de reducción horizontal de tareas, invoque
UpdateTaskProtection
en una tarea que ya tenga activada la protección. -
Determine cuánto tiempo necesitaría una tarea para completar el trabajo requerido y configure la propiedad
expiresInMinutes
en consecuencia. Si establece que la caducidad de la protección sea más larga de lo necesario, incurrirá en costos y se retrasará la implementación de nuevas tareas. -
La protección de reducción horizontal es compatible con el agente de contenedor de Amazon ECS
1.65.0
o una posterior.Puede agregar compatibilidad con esta característica en instancias de Amazon EC2 que utilizan versiones anteriores del agente de contenedor de Amazon ECS si actualiza el agente a la versión más reciente. Para obtener más información, consulte Actualización del agente de contenedor de Amazon ECS.
-
Consideraciones sobre la implementación:
-
Si el servicio utiliza una actualización continua, se crearán nuevas tareas, pero las tareas que ejecuten una versión anterior no se terminarán hasta que
protectionEnabled
se desactive o caduque. Puede ajustar el parámetromaximumPercentage
en la configuración de implementación a un valor que permita crear nuevas tareas cuando las tareas antiguas estén protegidas. -
Si se aplica una actualización azul/verde, la implementación azul con tareas protegidas no se eliminará si las tareas tienen
protectionEnabled
. El tráfico se desviará a las nuevas tareas que surjan y las tareas más antiguas solo se eliminarán cuandoprotectionEnabled
se desactive o caduque. Según el tiempo de espera de las actualizaciones de CodeDeploy o CloudFormation, es posible que se agote el tiempo de espera de la implementación y que las tareas azules más antiguas sigan presentes. -
Si usa CloudFormation, la pila de actualizaciones tiene un tiempo de espera de 3 horas. Por lo tanto, si configura la protección de sus tareas durante más de 3 horas, la implementación de CloudFormation puede provocar un error y una restauración.
Durante el tiempo en que sus tareas antiguas están protegidas, en la pila de CloudFormation se muestra
UPDATE_IN_PROGRESS
. Si se elimina la protección de reducción horizontal de tareas o esta caduca dentro del período de 3 horas, su implementación se realizará correctamente y pasará al estadoUPDATE_COMPLETE
. Si la implementación se detiene enUPDATE_IN_PROGRESS
durante más de 3 horas, se producirá un error, se mostrará el estadoUPDATE_FAILED
y, a continuación, se llevará a cabo una restauración al conjunto de tareas anterior. -
Amazon ECS vende eventos de servicio cuando las tareas protegidas impiden que una implementación (continua o azul/verde) alcance un estado estable, para que pueda tomar medidas correctivas. Al intentar actualizar el estado de protección de una tarea, si recibe un mensaje de error
DEPLOYMENT_BLOCKED
, significa que el servicio tiene más tareas protegidas que el recuento deseado de tareas para el servicio. Para corregir este error, realice alguna de las siguientes acciones:-
Espere a que caduque la protección de tareas actual. A continuación, establezca la protección de tareas.
-
Determine qué tareas se pueden detener. A continuación, utilice
UpdateTaskProtection
con la opciónprotectionEnabled
configurada enfalse
para estas tareas. -
Aumente el recuento de tareas deseado del servicio a un número mayor al de tareas protegidas.
-
-
Permisos de IAM requeridos para la protección de reducción horizontal de tareas
La tarea debe tener el rol de tarea de Amazon ECS con los siguientes permisos:
-
ecs:GetTaskProtection
: permite que el agente de contenedor de Amazon ECS llame aGetTaskProtection
. -
ecs:UpdateTaskProtection
: permite que el agente de contenedor de Amazon ECS llame aUpdateTaskProtection
.