ECS: EC2 vs Fargate – Qual a diferença?
Houve um tempo que a pergunta em alta era sobre as diferenças entre ECS e EKS ou Kubernetes.
Atualmente, a nem tão nova questão é: Qual a diferença entre ECS e AWS Fargate?
Nesse post, responderemos essa pergunta e você também aprenderá sobre as vantagem e desvantagens das duas opções.
Para entendermos a diferença, vamos dividir o serviço ECS entre duas responsabilidades:
- Gerênciamente de ciclo de vida e posicionamento de tarefas
- Executar containers
Gerenciamento de ciclo de vida e posicionamento de tarefas*
O ECS é responsável por gerenciar o ciclo de vida e o placement das tarefas. As tarefas são normalmente feitas de um ou dois container que trabalham juntos.
Exemplo: Um container web server com um container de php-fpm.
Talvez venha a pergunta, O ECS inicia e para as tarefas, também armazena o seus conteúdos? Então, o ECS não executa ou roda seus containers. Ele apenas irá prover o Control Plane para gerir as tarefas.
Então, Quem roda os containers ?
Para rodar containers, nos temos duas opções, sendo elas ECS container instances ou Fargate. Ambas opções trabalham juntas com o ECS.
Podemos ver isso e a diferença na figura a seguir:
ECS container instance
Um ECS container instance nada mais é que uma instancia EC2 que roda os ECS container agent. O EC2 é propriedade sua e gerenciado por você. O ECS container agent regularmente fica checando se novos container precisam ser iniciados ou parados. Normalmente, executamos um cluster de instancias de container em um auto-scaling group.
Vale lembrar que o serviço ECS é gratuito, pagando apenas pelas EC2 utilizadas. Isso é uma grande vantagem, pois influencia o custo final, porém, temos aqui um desvantagem pois é preciso fazer o dimensionamento, monitoramento, corrigir e proteger as instancias do EC2 e sim, isso é tarefa SUA.
Em especial, o dimensionamento não é das tarefas mais fáceis de se fazer, mas seguem algumas dicas de como lidar com essa tarefa:
- Não há nenhuma métrica óbvia para dimensionar o cluster e nenhuma integração para dimensionar quando o posicionamento da tarefa falha devido à capacidade insuficiente.
- O grupo de dimensionamento automático e o ECS não estão cientes um do outro, dificultando muito as implantações de tarefas durante o dimensionamento do cluster ou as atualizações contínuas por meio do CloudFormation (os provedores de capacidade abordam esse problema, mas ainda não estão prontos para o horário de pico)
- Você precisa reduzir sem matar tarefas em execução, o que é um desafio ainda mais significativo para tarefas de longa duração.
Mesmo a arquitetura de referencia AWS não incluem dimensionamento automático para o ECS cluster.
Um ECS container instance pode rodar em Linux ou Windows. E o CPU não utilizado pode ser compartilhado com outro container SE disponível.
Fargate
Fácil mas não tão fácil como parece.
O AWS Fargate gerencia a execução da tarefa. Não há mais instâncias do EC2 para gerenciar. Você paga pelas tarefas em execução.
Cada tarefa executada no FArgate vem com uma interface de rede (ENI) dedicada com um endereço IP privado, podendo também ser ativado por um IP publico. Todos os containers da mesma tarefa podem se comunicar entre si via local host. Assim, toda comunicação de entrada e saída passa pelo ENI.
Comparações
Em resumo, podemos questionar: ECS ou Fargate?
Bom, essa não é a pergunta certa a se fazer. A questão é se usar container instance(EC2) ou Fargate. O que o ECS chama de container instance é conhecido como work node no k8s/EKS.
Dimensionar container instance é um desafio. É por isso que recomendo o uso do Fargate.
Fargate é muito mais fácil de operar. Use-o se possível (consulte rede, vCPU, memória, sistema operacional do host e limitações do EBS). Não queira o caminho difícil. O simples é melhor que o complexo.