Quelle est la différence entre une tâche et un service dans AWS ECS?

114

Il semble que l'on puisse exécuter une tâche ou un service basé sur une définition de tâche. Quelles sont les différences et les similitudes entre la tâche et le service? Y a-t-il un indice dans le fait que l'on peut spécifier "Groupe de tâches" lors de la création d'une tâche mais pas d'un service? La tâche et le service sont-ils des instanciations hiérarchiquement égales de la définition de tâche ou le service est-il composé de tâches?

Bob Jones
la source

Réponses:

235

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.

talentueux
la source
1
Merci beaucoup @talentedmrjones! Est-ce alors aussi simple que «utiliser Task pour un travail à court terme et utiliser Service pour des services de longue durée»? Y a-t-il une chance que vous puissiez commenter sur "Les instanciations de tâche et de service sont-elles hiérarchiquement égales de la définition de tâche, ou le service est-il composé de tâches"?
Bob Jones
Ce que je ne comprends pas: pourquoi lorsque la tâche est créée, je peux changer les valeurs des variables d'environnement mais cela ne semble pas possible pour le service
Nikolay Klimchuk
1
Les services @NikolayKlimchuk ne gèrent que les tâches - ce sont les tâches elles-mêmes qui définissent et utilisent les envars.
bwobst
qu'est-ce qu'un "groupe de travail"
red888
@NikolayKlimchuk désolé pour la réponse tardive. Les services sont utilisés pour planifier les conteneurs, les tâches sont utilisées pour définir les conteneurs. C'est pourquoi vous utilisez les tâches pour contrôler les variables d'environnement.
talentedmrjones
42

Magnifiquement expliqué en mots par @talentedmrjones. L'image ci-dessous vous aidera à le visualiser facilement :)

Cluster, Service, Instance EC2 et Tâche en action

realPK
la source
Belle visualisation! :-)
sgsi
2
Si un lecteur de réponses souhaite se plonger dans Amazon ECS, veuillez visiter freecodecamp.org/news/… . Magnifiquement expliqué!
realPK
@realPK page très utile en effet, merci pour la recommandation!
Christophe
2

Définition de la tâche:

Il s'agit du plan directeur décrivant les conteneurs Docker à exécuter et représentant votre application. Il comprend plusieurs tâches.

Définition de tâche

Un service:

Une instance de définition de tâche. Il définit également les tâches minimales et maximales d'une définition de tâche exécutée à un moment donné, l'autoscaling et l'équilibrage de charge.

Instances de conteneur ECS:

Il s'agit d'une instance EC2 sur laquelle Docker et un agent de conteneur ECS sont exécutés. L'agent s'occupe de la communication entre ECS et l'instance, fournissant l'état des conteneurs en cours d'exécution et en gérant les nouveaux en cours d'exécution.

Relation:

entrez la description de l'image ici

xwa130
la source