Tengo un clúster de ECS Fargate con un servicio que genera tareas en función de cuántos mensajes hay en una cola. Cada tarea realiza un sondeo largo en la cola y procesa un mensaje a la vez. Si la cola supera los 5 mensajes, se activa una nueva tarea y comienza a recibir mensajes. Cuando la cola cae por debajo de 5 mensajes desde el umbral anterior, cierra una tarea.
Mi pregunta es, cuando el servicio decide reducir la escala, ¿cómo sabe qué tarea eliminar? Todas las tareas podrían estar procesando un mensaje. Cada tarea se ejecuta continuamente y realiza extracciones prolongadas de SQS, entonces, ¿cómo sabría que una tarea está en un estado de apagado válido (acaba de completar un mensaje) y un estado de apagado no válido (actualmente procesando un mensaje).
Hay un problema abierto para mejorar la finalización de las tareas, ya que las personas tienen las mismas preocupaciones que usted:
A partir del problema, puede minimizar el impacto de la terminación de tareas en sus procesos utilizando stopTimeout . El parámetro es:
Duración del tiempo (en segundos) para esperar antes de que el contenedor se elimine por la fuerza si no sale normalmente por sí solo.
Pero también hay una nueva función para ESC:
Con esto puedes configurar:
dependencias para el inicio y apagado del contenedor, así como un valor de tiempo de espera de inicio y parada por contenedor.
Por lo general, no hay un control total sobre la terminación de tareas, como en la terminación de instancias en AutoScaling Group. Pero las cosas se están trabajando.