Qual é a diferença entre uma tarefa e um serviço no AWS ECS?

114

Parece que se pode executar uma tarefa ou um serviço com base em uma definição de tarefa. Quais são as diferenças e semelhanças entre tarefa e serviço? Existe uma pista no fato de que se pode especificar "Grupo de Tarefas" ao criar a Tarefa, mas não o Serviço? Tarefa e serviço são instanciações hierarquicamente iguais da definição de tarefa ou serviço é composto de tarefas?

Bob Jones
fonte

Respostas:

235

Uma definição de tarefa é uma coleção de 1 ou mais configurações de contêiner . Algumas tarefas podem precisar de apenas um contêiner, enquanto outras tarefas podem precisar de 2 ou mais contêineres potencialmente vinculados em execução simultaneamente. A definição de Tarefa permite que você especifique qual imagem Docker usar, quais portas expor, quanta CPU e memória alocar, como coletar logs e definir variáveis ​​de ambiente.

Uma Tarefa é criada quando você executa uma Tarefa diretamente, que inicia o (s) contêiner (es) (definido (s) na definição da tarefa) até que sejam interrompidos ou saiam por conta própria, momento em que não são substituídos automaticamente . Executar tarefas diretamente é ideal para tarefas de execução curta, talvez como um exemplo de coisas que foram realizadas por meio do CRON.

Um serviço é usado para garantir que você sempre tenha um certo número de tarefas em execução o tempo todo . Se um contêiner de Tarefa sair devido a um erro, ou se a instância EC2 subjacente falhar e for substituída, o Serviço ECS substituirá a Tarefa com falha. É por isso que criamos Clusters para que o Serviço tenha muitos recursos em termos de CPU, Memória e portas de rede para usar. Para nós, realmente não importa em qual instância as Tarefas são executadas, desde que sejam executadas. Uma configuração de serviço faz referência a uma definição de tarefa. Um serviço é responsável por criar tarefas .

Os serviços são normalmente usados ​​para aplicativos de longa duração, como servidores web. Por exemplo, se eu implantar meu site com tecnologia Node.JS em Oregon (us-west-2), gostaria de dizer pelo menos três tarefas em execução nas três Zonas de disponibilidade (AZ) por causa da alta disponibilidade; se um falhar, tenho outros dois e o que falhou será substituído (leia isso como autocura !). Criar um serviço é a maneira de fazer isso. Se eu tivesse 6 instâncias EC2 em meu cluster, 2 por AZ, o serviço equilibrará automaticamente as tarefas entre as zonas da melhor maneira possível, ao mesmo tempo que considera recursos de CPU, memória e rede.

ATUALIZAR:

Não tenho certeza se ajuda pensar nessas coisas hierarquicamente.

Outro ponto muito importante é que um serviço pode ser configurado para usar um balanceador de carga, de modo que, à medida que cria as tarefas, ou seja, inicia os contêineres definidos na Definição de tarefa, o serviço registra automaticamente a instância EC2 do contêiner com o balanceador de carga. As tarefas não podem ser configuradas para usar um balanceador de carga, apenas os serviços podem.

Talentedmrjones
fonte
1
Muito obrigado @talentedmrjones! Então, é tão simples quanto "usar Tarefa para trabalhos de curta duração e usar Serviço para serviços de longa duração"? Alguma chance de você comentar sobre "Tarefas e serviços são instâncias hierarquicamente iguais da definição de tarefas ou o serviço é composto de tarefas"?
Bob Jones
O que eu não entendo: por que quando a tarefa é criada eu posso alterar os valores das variáveis ​​de ambiente, mas não parece ser possível para o serviço
Nikolay Klimchuk
1
Os serviços @NikolayKlimchuk gerenciam apenas as tarefas - são as próprias tarefas que definem e usam os envars.
bwobst
o que é um "grupo de tarefas"
red888
@NikolayKlimchuk desculpe pela resposta tardia. Os serviços são usados ​​para agendar containers, as tarefas são usadas para definir containers. É por isso que você usa as tarefas para controlar env vars.
talentedmrjones
42

Lindamente explicado em palavras por @talentedmrjones. A imagem abaixo irá ajudá-lo a visualizar facilmente :)

Cluster, serviço, instância EC2 e tarefa em ação

realPK
fonte
Boa visualização! :-)
sgsi
2
Se algum visualizador de respostas quiser se aprofundar no Amazon ECS, visite freecodecamp.org/news/… . Muito bem explicado!
realPK
Página muito útil do @realPK, obrigado pela recomendação!
Christophe
2

Definição de Tarefa:

Este é o blueprint que descreve quais contêineres Docker executar e representa seu aplicativo. Inclui várias tarefas.

Definição de Tarefa

Serviço:

Uma instância de Definição de Tarefa. Ele também define as tarefas mínimas e máximas de uma definição de tarefa executada a qualquer momento, escalonamento automático e balanceamento de carga.

Instâncias de contêiner ECS:

Esta é uma instância EC2 que possui Docker e um Agente de Contêiner ECS em execução. O Agente cuida da comunicação entre o ECS e a instância, fornecendo o status dos containers em execução e gerenciando os novos em execução.

Relação:

insira a descrição da imagem aqui

xwa130
fonte