Você conhece o AWS Fargate?

Olá, pessoal! Tudo bem?

Hoje vamos dar um tempinho na série de posts sobre o Well-Architected Framework, e vamos falar sobre o AWS Fargate, a opção serverless do AWS ECS .

Um breve resumo sobre o ECS

O mercado oferece uma série de soluções para orquestração de docker containers, sendo o Kubernetes a opção mais popular atualmente. Porém, se você utiliza a AWS, você pode optar pelo orquestrador proprietário da plataforma, o ECS (Elastic Container Service).

O ECS possui duas opções de lançamento: o primeiro e mais antigo, utilizando instâncias EC2, e o mais atual, o AWS Fargate. De qualquer forma, em relação a orquestração, ambos são operacionalmente similares. Seus principais componentes são:

  • Task Definition: É a especificação de uma tarefa do ECS. Nela você pode informar a configuração dos docker containers (assim como em um pod, no Kubernetes, é possível executar mais de um container em uma task do ECS), quanta memória/CPU estará disponível para a tarefa, configuração de volumes, modo de rede, entre outros. Cada atualização feita em uma definição gera uma nova revisão da mesma, então é possível manter diversas versões de uma mesma task definition;
  • Task: Uma tarefa é a unidade mínima de trabalho no ECS. Ela deve estar vinculada a uma task definition, e pode estar ou não associada a um service (abaixo);
  • Service: Um serviço é responsável por gerenciar o ciclo de vida de tarefas. Caso ocorra uma falha em uma tarefa, que venha a derrubar o processo, ele irá reiniciar a mesma tentando fazer a recuperação. Além disto, ele pode ser configurado para escalar a tarefa automaticamente, utilizar estratégias de deploy (rolling updates e blue/green), e ser vinculado a um balanceador de carga;
  • Cluster: O cluster é um agrupamento lógico de tarefas e serviços. Você pode publicar a mesma estrutura/versão de tarefas e serviços em dois clusters diferentes, sem causar conflitos.

Não entrarei em maiores detalhes sobre o Amazon ECS neste post, porém, se você quiser conhecer mais, basta clicar aqui.

O AWS Fargate

Como já citei anteriormente, o AWS Fargate é a opção serverless do ECS. Nele não temos a preocupação sobre o provisionamento de instâncias EC2 para suprir as necessidades do cluster, a própria AWS gerencia isso para nós. Basta configurar uma task definition informando quantidade de memória e CPU necessários e, de forma simples, mandar executar.

Algumas configurações de task definition e service são diferentes entre EC2 e Fargate. Inclusive o Fargate possui algumas limitações, como:

  • o network mode, que possui apenas o modo awsvpc;
  • a gestão de volumes, onde as opções de driver são limitadas e os volumes são voláteis;
  • as regiões disponíveis, visto que não está disponível em todas as regiões da AWS;
  • o suporte à diversas plataformas, pois atualmente apenas linux containers são suportados.

Em relação a cobrança, no ECS com EC2 ela é feita com base nas instâncias EC2 vinculadas ao cluster. Já no Fargate, a cobrança é efetuada com base na quantidade de memória e CPU de cada tarefa em execução.

Exemplo

Como exemplo prático, vamos provisionar um servidor Nginx, mostrando os principais pontos a serem observados durante este processo.

Criando a task definition

Inicialmente, criaremos a definição da tarefa (task definition). O primeiro passo para isso, é selecionar o tipo de lançamento.

Seleção da opção de lançamento

Em seguida, teremos a configuração do definição da tarefa. Neste passo, valem salientar algumas configurações importantes.

Na configuração inicial, veremos a compatibilidade com o Fargate, e em seguida reforçamos o que foi citado anteriormente, onde a única opção de network é awsvpc.

Configurações iniciais

Outro detalhe importante citado previamente, e que será o determinante para o custo final da tarefa, é o tamanho da mesma, definido pela quantidade de memória e CPU alocados.

Tamanho da tarefa

O último ponto que gostaria de salientar, pois também já foi comentado, são as opções de volume. Não temos como selecionar drivers de volume, ao menos por enquanto.

Volumes no Fargate

Criação do cluster

Para criarmos o cluster, devemos selecionar a primeira opção de template, network only, pois como o Fargate não necessita de instâncias EC2 provisionadas, também não precisará criar um Auto Scaling Group.

Criando o cluster

Criação do serviço

Neste exemplo, vamos fazer a publicação da task usando um serviço, que acredito ser o método mais utilizado.

Alguns pontos importantes a serem observados ao criarmos um serviço compatível com o Fargate, são o tipo de lançamento, que deverá ser Fargate, e o Platform version, que indica qual versão do Fargate estaremos usando.

O restante da configuração do serviço é idêntico a opção com EC2.

Conferindo a publicação

Por fim, podemos verificar o cluster, observando a tarefa executando com compatibilidade com o Fargate (reparem que não existem instâncias EC2 vinculadas ao cluster).

E por último, podemos verificar o nginx executando, ao acessarmos o endereço do ALB vinculado ao serviço criado.

Nginx executando

Conclusão

Eu sou suspeito em falar, pois sou um grande defensor de tecnologias serverless. Sem a preocupação com infraestrutura, podemos empregar maiores esforços sobre a aplicação e entregar valor mais rapidamente aos clientes. Por isso, para quem já usa o ECS ou para quem está iniciando um novo projeto usando containers, vale a avaliação do Fargate.

Boa semana e até a próxima, pessoal.

Postado em AWS

Deixe uma resposta