web-dev-qa-db-fra.com

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

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 tâche et service? Y a-t-il un indice sur 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 hiérarchiquement égaux aux instanciations de la définition de tâche ou le service est-il composé de tâches?

79
Bob Jones

A tâche définition est une collection d'au moins un conteneur configurations. Certaines tâches peuvent ne nécessiter qu'un seul conteneur, alors que d'autres peuvent nécessiter 2 ou plusieurs conteneurs potentiellement liés s'exécutant simultanément. La définition de tâche vous permet de spécifier quelle image Docker utiliser, quels ports exposer, combien de temps CPU et de mémoire à allouer, comment collecter les journaux et définir les variables d'environnement.

Un Task est créé lorsque vous exécutez une tâche directement, qui lance un ou plusieurs conteneurs (définis dans la définition de la tâche) jusqu'à ce qu'ils soient arrêtés ou sortent d'eux-mêmes, puis ils se trouvent non remplacé automatiquement . L'exécution directe de tâches est idéale pour les tâches de courte durée, par exemple pour les tâches réalisées via CRON.

A Service est utilisé pour garantir que vous avez toujours un certain nombre de tâches exécutées à tout moment . Si le conteneur d'une tâche se ferme suite à une erreur ou si l'instance EC2 sous-jacente échoue et est remplacée, le service ECS remplacera la tâche en échec. C’est la raison pour laquelle nous créons 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 sont exécutées n'a pas d'importance, tant qu'elle est exécutée. Une configuration de service 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 des applications de longue durée telles que les serveurs Web. Par exemple, si je déployais mon site Web propulsé par Node.JS en Oregon (us-west-2), je voudrais indiquer au moins trois tâches exécutées dans les trois zones de disponibilité (AZ) dans un souci de haute disponibilité; si l'un d'eux échoue, j'en ai deux autres et celui qui échouera sera remplacé (lisez cela comme auto-guérison !). Créer un service est le moyen de le faire. Si j'avais 6 instances EC2 dans mon cluster, 2 par AZ, le service équilibrera automatiquement les tâches d'une zone à l'autre, tout en tenant compte également des ressources de processeur, de mémoire et du réseau.

MISE À 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. Ainsi, 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 enregistrera automatiquement l’instance EC2 du conteneur avec l’équilibreur de charge. Les tâches ne peuvent pas être configurées pour utiliser un équilibreur de charge, seuls les Services peuvent le faire.

171
talentedmrjones

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

Cluster, Service, EC2 Instance and Task in action

21
realPK