O AWS Fargate representa uma solução tecnológica versátil, compatível com Amazon ECS e Amazon EKS. Ele possibilita a execução de contêineres sem a necessidade de gerenciar servidores ou clusters de instâncias Amazon EC2.
Fargate dispensa a configuração, o dimensionamento e o provisionamento de clusters de máquinas virtuais para a execução de contêineres. Elimina-se, assim, a necessidade de escolher tipos de servidores, programar o escalonamento de clusters ou otimizar o empacotamento de clusters.
Para executar tarefas e serviços do Amazon ECS, podemos empregar o tipo de inicialização Fargate ou um provedor de capacidade Fargate. Para usar o Fargate, é preciso empacotar a aplicação em contêineres, definir os requisitos de sistema operacional, CPU e memória, configurar as políticas de rede e IAM e, finalmente, inicializá-la.
Não é mais preciso manter uma capacidade base de CPU e RAM para hospedar os contêineres. Basta informar à AWS quantos recursos uma tarefa necessita e deixar o resto do processo por conta dela. Cada tarefa no Fargate possui sua própria barreira de isolamento, o que significa que não compartilha o kernel, a CPU, a memória ou a interface de rede elástica subjacente com outras tarefas.
Como o Fargate opera?
O Fargate simplifica a implementação de contêineres, sem que haja a preocupação com a configuração ou gerenciamento da infraestrutura que os hospeda. O usuário informa ao Fargate quais imagens de contêineres deseja executar e a quantidade de recursos de CPU e memória que devem ser alocados. Os servidores hospedeiros são provisionados automaticamente pelo Fargate. Ao executar os contêineres, o pagamento é feito apenas pelos recursos efetivamente utilizados.
O Fargate funciona como um mecanismo de computação serverless, eliminando a necessidade de gerenciamento dos servidores que hospedam os contêineres por parte dos usuários. Importante salientar que os servidores ainda existem, mas seu gerenciamento é feito pela AWS. O Fargate não deve ser confundido com o AWS Lambda, outro serviço de computação serverless que não foi originalmente projetado para contêineres, embora o Lambda agora suporte a implementação de imagens de contêiner.
Quais os benefícios do Fargate?
O AWS Fargate calcula a quantidade exata de recursos computacionais, memória e demais recursos necessários para as tarefas, dispensando a preocupação com a escolha de tipos de instâncias ou o dimensionamento da capacidade do cluster.
É possível pagar pelos recursos utilizados pelos contêineres, evitando o provisionamento excessivo e custos desnecessários com servidores.
As tarefas (pods) do Fargate são executadas em seus próprios kernels, proporcionando um ambiente computacional seguro e isolado, com cargas de trabalho separadas e maior segurança.
As equipes podem projetar e executar aplicações usando contêineres ECS ou EKS, sem se preocupar com atividades de gerenciamento de infraestrutura, como dimensionamento, proteção de servidores ou aplicação de patches em sistemas operacionais.
Com conexões integradas a outros serviços da AWS, como o Amazon CloudWatch Container Insights, o AWS Fargate oferece alto nível de observabilidade. Diversas tecnologias de terceiros também podem ser utilizadas para coleta de logs e métricas.
Ao usar contêineres com o Fargate, também é possível utilizar a ampla gama de serviços da AWS.
O Fargate continuamente lança e dimensiona recursos de computação para atender às necessidades do contêiner, evitando o provisionamento excessivo e garantindo que você não pague por recursos não utilizados. Além disso, a opção Fargate Spot oferece uma economia de até 70% nos custos normais, sendo ideal para aplicações que podem ser interrompidas.
Componentes do Fargate
Agrupamentos
Um cluster Amazon ECS é um agrupamento lógico de tarefas ou serviços. Os clusters são usados para isolar suas aplicações. Ao usar o Fargate para executar tarefas, ele gerencia os recursos do cluster.
Definições de Tarefas
Uma definição de tarefa é um arquivo de texto que descreve, no mínimo, um dos contêineres da aplicação. É um arquivo JSON e pode ser usado para descrever até dez contêineres simultaneamente. A definição de tarefa da aplicação serve como um modelo e especifica os diversos parâmetros da aplicação.
Por exemplo, é possível usá-la para definir parâmetros do sistema operacional, contêineres a serem usados, portas que devem ser abertas para a aplicação e volumes de dados a serem usados com os contêineres na tarefa. Os requisitos da aplicação determinam quais parâmetros específicos estão disponíveis para definição da tarefa.
Tarefas
Uma tarefa é a instanciação da definição de tarefa no nível do cluster. Após criar a definição de tarefa para a aplicação no Amazon ECS, é possível escolher o número de tarefas que serão executadas no cluster. Uma tarefa pode ser executada como parte de um serviço ou como um processo separado.
Serviços
Em um cluster Amazon ECS, é possível usar um serviço do Amazon ECS para executar e manter o número desejado de tarefas simultaneamente. O agendador de serviço do Amazon ECS executa outra instância com base na definição de tarefa caso alguma das tarefas falhe ou seja interrompida por qualquer motivo. Isso garante a substituição e a manutenção do número correto de tarefas no serviço.
Sistema operacional e arquitetura da CPU
Os sistemas operacionais suportados pelo Fargate incluem Amazon Linux 2, Windows Server 2019 Full e Windows Server 2019 Core.
As duas arquiteturas disponíveis para definição de tarefas do Amazon ECS são ARM e X86_64. Ao usar contêineres do Windows, a arquitetura da CPU deve ser X86_64. Por outro lado, ao utilizar contêineres Linux, é possível empregar a arquitetura ARM64 para aplicações baseadas em ARM e a arquitetura de CPU X86_64.
ECS com instâncias EC2 vs. ECS com AWS Fargate
No modelo de instância do EC2, os contêineres são implantados nas instâncias do EC2 (VMs) do cluster. O ECS gerencia esses contêineres em conjunto com as tarefas que fazem parte da definição de tarefa.
Prós 👍
- O tipo de instância do EC2 utilizado está sob total controle do usuário.
- É possível utilizar instâncias spot, que reduzem os custos em até 90%.
Contras 👎
- É preciso cuidar dos patches de segurança e da segurança de rede das instâncias. Além disso, o usuário é responsável pela escalabilidade no cluster.
No modelo Fargate, não é necessário se preocupar com instâncias ou servidores do EC2. Basta selecionar a configuração de CPU e memória necessária, e o Fargate implementará os contêineres.
Prós 👍
- Não há necessidade de gerenciar servidores.
- A AWS é responsável pela disponibilidade e escalabilidade. Contudo, é importante selecionar a memória e a CPU corretas, caso contrário, a aplicação poderá ficar indisponível.
- Ao utilizar o Fargate Spot, é possível obter um desconto de até 70% no preço do Fargate.
Contras 👎
- O ECS com AWS Fargate suporta apenas um modo de rede, o -awsvpc-. Isso limita o controle sobre a camada de rede.
EKS sem Fargate vs. EKS com Fargate
No modelo EKS sem Fargate, é preciso decidir o tamanho do cluster antecipadamente. Os nós podem ser alterados manualmente mais tarde, mas isso é problemático em comparação com a especificação do tamanho ideal desde o início.
Prós 👍
- Este modelo oferece maior controle de diversas maneiras, como a especificação de variáveis de configuração como HostNetwork e HostPort.
- O Fargate não é compatível com todas as regiões. Portanto, o uso do EKS sem Fargate é preferível se o contêiner precisar estar disponível em mais regiões.
Contras 👎
- O EKS sem Fargate é um pouco difícil de usar.
No modelo EKS com Fargate, não é necessário especificar o tamanho dos clusters antecipadamente.
Prós 👍
- O EKS com Fargate é mais seguro, pois é executado em máquinas virtuais dedicadas. O fato de não suportar o modo privilegiado é uma característica de segurança.
- É mais econômico a longo prazo.
Contras 👎
- Oferece menos controle em vários aspectos.
Conclusão
O Fargate é uma ferramenta robusta e consolidada. Ele economiza custos, tempo e esforço, gerenciando toda a infraestrutura para o usuário. O Fargate é particularmente vantajoso para quem está começando com contêineres e deseja se concentrar na construção da aplicação em vez da sua manutenção.