¿Cuál es la diferencia entre una tarea y un servicio en AWS ECS?
Parece que se puede ejecutar una tarea o un servicio según una definición de tarea. ¿Cuáles son las diferencias y similitudes entre Tarea y Servicio? ¿Hay alguna pista en el hecho de que se puede especificar un "Grupo de tareas" al crear una tarea pero no un servicio? ¿La tarea y el servicio son instancias jerárquicamente iguales de la definición de tarea, o el servicio está compuesto de tareas?
Una definición de tarea es una colección de 1 o más configuraciones de contenedor . Es posible que algunas tareas necesiten solo un contenedor, mientras que otras tareas pueden necesitar 2 o más contenedores potencialmente vinculados que se ejecuten simultáneamente. La definición de tarea le permite especificar qué imagen de Docker usar, qué puertos exponer, cuánta CPU y memoria asignar, cómo recopilar registros y definir variables de entorno.
Una Tarea se crea cuando ejecuta una Tarea directamente, que inicia contenedores (definidos en la definición de la tarea) hasta que se detienen o salen por sí solos, momento en el cual no se reemplazan automáticamente . Ejecutar tareas directamente es ideal para trabajos de ejecución corta, tal vez como ejemplo de cosas que se lograron mediante CRON.
Un Servicio se utiliza para garantizar que siempre tenga una cierta cantidad de Tareas ejecutándose en todo momento . Si el contenedor de una tarea sale debido a un error, o la instancia EC2 subyacente falla y se reemplaza, el servicio ECS reemplazará la tarea fallida. Es por eso que creamos Clústeres para que el Servicio tenga muchos recursos en términos de CPU, Memoria y puertos de red para usar. Para nosotros realmente no importa en qué instancia se ejecuten las Tareas mientras se ejecuten. Una configuración de Servicio hace referencia a una definición de Tarea. Un Servicio es responsable de crear Tareas .
Los servicios se utilizan normalmente para aplicaciones de larga duración, como servidores web. Por ejemplo, si implementé mi sitio web con tecnología Node.JS en Oregón (us-west-2), me gustaría decir que al menos tres tareas se ejecutan en las tres zonas de disponibilidad (AZ) en aras de la alta disponibilidad; si uno falla, tengo otros dos y el que falla será reemplazado (¡léalo como autocuración !). Crear un Servicio es la forma de hacerlo. Si tuviera 6 instancias EC2 en mi clúster, 2 por AZ, el Servicio equilibrará automáticamente las Tareas entre zonas lo mejor que pueda y al mismo tiempo considerará los recursos de CPU, memoria y red.
ACTUALIZAR:
No estoy seguro de que ayude pensar en estas cosas jerárquicamente.
Otro punto muy importante es que un Servicio se puede configurar para usar un balanceador de carga, de modo que cuando crea las Tareas (es decir, lanza contenedores definidos en la Definición de tarea), el Servicio registrará automáticamente la instancia EC2 del contenedor con el balanceador de carga. Las tareas no se pueden configurar para usar un balanceador de carga, solo los Servicios pueden hacerlo.
Bellamente explicado en palabras de @talentedmrjones. La imagen a continuación te ayudará a visualizarla fácilmente :)
Definición de tarea:
Este es el plano que describe qué contenedores Docker ejecutar y representa su aplicación. Incluye varias tareas.
Servicio:
Una instancia de definición de tarea. También define las tareas mínimas y máximas de una definición de tarea ejecutada en un momento dado, el escalado automático y el equilibrio de carga.
Instancias de contenedores ECS:
Esta es una instancia EC2 que tiene Docker y un ECS Container Agent ejecutándose en ella. El Agente se encarga de la comunicación entre ECS y la instancia, proporcionando el estado de los contenedores en ejecución y administrando los nuevos en ejecución.
Relación: