Une définition de tâche est une collection d'une ou plusieurs configurations de conteneur . Certaines tâches peuvent nécessiter un seul conteneur, tandis que d'autres tâches peuvent nécessiter 2 conteneurs potentiellement liés ou plus s'exécutant simultanément. La définition de tâche vous permet de spécifier l'image Docker à utiliser, les ports à exposer, la quantité de CPU et de mémoire à allouer, comment collecter les journaux et définir les variables d'environnement.
Une tâche est créée lorsque vous exécutez directement une tâche, qui lance le ou les conteneurs (définis dans la définition de la tâche) jusqu'à ce qu'ils soient arrêtés ou quittés d'eux-mêmes, auquel cas ils ne sont pas remplacés automatiquement . L'exécution directe des tâches est idéale pour les tâches à exécution courte, peut-être comme exemple de choses qui ont été accomplies via CRON.
Un service est utilisé pour garantir que vous avez toujours un certain nombre de tâches en cours d'exécution à tout moment . Si le conteneur d'une tâche se ferme en raison d'une erreur ou si l'instance EC2 sous-jacente échoue et est remplacée, le service ECS remplacera la tâche ayant échoué. C'est pourquoi nous créons des clusters afin que le service dispose de nombreuses ressources en termes de CPU, de mémoire et de ports réseau à utiliser. Pour nous, l'instance sur laquelle les tâches s'exécutent n'a pas vraiment d'importance tant qu'elles s'exécutent. Une configuration de service fait référence à une définition de tâche. Un service est responsable de la création de tâches .
Les services sont généralement utilisés pour les applications de longue durée telles que les serveurs Web. Par exemple, si j'ai déployé mon site Web alimenté par Node.JS dans l'Oregon (us-west-2), je voudrais dire au moins trois tâches exécutées sur les trois zones de disponibilité (AZ) pour des raisons de haute disponibilité; si l'un échoue, j'en ai deux autres et celui qui a échoué sera remplacé (lisez cela comme une auto-guérison !). Créer un service est le moyen d'y parvenir. Si j'avais 6 instances EC2 dans mon cluster, 2 par AZ, le service équilibrera automatiquement les tâches entre les zones du mieux qu'il le peut, tout en tenant également compte des ressources du processeur, de la mémoire et du réseau.
METTRE À JOUR:
Je ne suis pas sûr qu'il soit utile de penser à ces choses de manière hiérarchique.
Un autre point très important est qu'un service peut être configuré pour utiliser un équilibreur de charge, de sorte que lorsqu'il crée les tâches, c'est-à-dire qu'il lance les conteneurs définis dans la définition de tâche, le service enregistre automatiquement l'instance EC2 du conteneur auprès de l'équilibreur de charge. Les tâches ne peuvent pas être configurées pour utiliser un équilibreur de charge, seuls les services le peuvent.