Proteja sus tareas de Amazon ECS para que no se den por terminadas por eventos de reducción horizontal - Amazon Elastic Container Service

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 atributo ProtectionEnabled 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. Use GetTaskProtection 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ámetro maximumPercentage 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 cuando protectionEnabled 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 estado UPDATE_COMPLETE. Si la implementación se detiene en UPDATE_IN_PROGRESS durante más de 3 horas, se producirá un error, se mostrará el estado UPDATE_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ón protectionEnabled configurada en false 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 a GetTaskProtection.

  • ecs:UpdateTaskProtection: permite que el agente de contenedor de Amazon ECS llame a UpdateTaskProtection.