Parece que uno puede ejecutar una Tarea o un Servicio basado en una Definición de Tarea. ¿Cuáles son las diferencias y similitudes entre Tarea y Servicio? ¿Hay alguna pista en el hecho de que uno puede especificar "Grupo de tareas" al crear una tarea pero no un servicio? ¿La tarea y el servicio son instanciaciones jerárquicamente iguales de la definición de la tarea, o el servicio está compuesto por tareas?
Definición de tarea : (Es una configuración) Una definición de tarea es un modelo para su aplicación y describe uno o más contenedores a través de atributos. Algunos atributos se configuran a nivel de tarea, pero la mayoría de los atributos se configuran por contenedor.
Está definiendo sus contenedores y cómo lanzarlos a través de definiciones de tareas. Describe cómo se deben aprovisionar los contenedores (enlace a las imágenes de contenedor guardadas de ECR, unidades de CPU, memoria, puertos de contenedor para exponer, tipo de red).
Las definiciones de tareas especifican la información del contenedor para su aplicación (web), como cuántos contenedores forman parte de su tarea, qué recursos usarán, cómo interactúan entre sí y qué puerto de host usarán. Puede ser de tipo Fargate y EC2.
Definición de tarea:
Este es el modelo 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 ejecución de definición de tareas en un momento dado, el escalado automático y el equilibrio de carga.
Instancias de contenedor de ECS:
Esta es una instancia de EC2 que tiene Docker y un agente de contenedor de ECS 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 la ejecución de nuevos.
Relación:
Una definición de tarea es una colección de 1 o más configuraciones de contenedores . Algunas tareas pueden necesitar solo un contenedor, mientras que otras tareas pueden necesitar 2 o más contenedores potencialmente vinculados que se ejecutan simultáneamente. La definición de tareas 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 que no se reemplazan automáticamente . Ejecutar tareas directamente es ideal para trabajos de corta duración, tal vez como un ejemplo de cosas que se lograron a través de 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 se cierra debido a un error, o si la instancia EC2 subyacente falla y se reemplaza, el servicio ECS reemplazará la tarea fallida. Es por eso que creamos Clusters para que el Servicio tenga muchos recursos en términos de puertos de CPU, Memoria y Red para usar. Para nosotros, realmente no importa en qué instancia se ejecutan las tareas, siempre y cuando 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 ejecución prolongada, como servidores web. Por ejemplo, si implementé mi sitio web con la tecnología de Node.JS en Oregón (us-west-2), querría decir al menos tres tareas que se ejecutan en las tres zonas de disponibilidad (AZ) por el bien de la alta disponibilidad; si uno falla, tengo otros dos y el que falló será reemplazado (¡léase eso como autocuración !). Crear un servicio es la manera de hacer esto. 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, al tiempo que considera los recursos de CPU, memoria y red.
ACTUALIZAR:
No estoy seguro de que ayude a pensar en estas cosas jerárquicamente.
Otro punto muy importante es que un Servicio puede configurarse para usar un balanceador de carga, de modo que a medida que crea las Tareas, es decir, lanza contenedores definidos en la Definición de tareas, 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 por @talentedmrjones. La imagen a continuación lo ayudará a visualizarlo fácilmente :)