Um guia de introdução ao AWS Fargate

AWS Fargate é uma tecnologia que pode ser usada com Amazon ECS e Amazon EKS. Ele permite que você execute contêineres sem gerenciar servidores ou clusters de instâncias do Amazon EC2.

Fargate elimina a necessidade de configurar, dimensionar ou provisionar clusters de máquinas virtuais para executar contêineres. Não haverá necessidade de selecionar tipos de servidor, agendar dimensionamento de cluster ou otimizar o empacotamento de cluster.

Podemos usar o tipo de inicialização Fargate ou um provedor de capacidade Fargate para executar suas tarefas e serviços do Amazon ECS. Para usar o Fargate, você pode empacotar seu aplicativo em contêineres, especificar os requisitos de sistema operacional, CPU e memória, configurar políticas de rede e IAM e iniciá-lo.

Não há necessidade de manter uma capacidade básica de CPU e RAM para hospedar contêineres. Podemos dizer à AWS quantos recursos uma tarefa precisa e deixar o restante da tarefa para a AWS. Cada tarefa do Fargate tem sua barreira de isolamento, portanto, não compartilha o kernel, a CPU, a memória ou a interface de rede elástica subjacente com outras tarefas.

Como o Fargate funciona?

O Fargate funciona permitindo que você implante contêineres sem configurar ou gerenciar a infraestrutura que os hospedará. Você informa ao Fargate quais imagens de contêiner deseja executar e quantos recursos de CPU e memória deseja atribuir. Os servidores host são provisionados automaticamente pelo Fargate. Quando seus contêineres estão em execução, você paga apenas pelos recursos usados.

O Fargate é um mecanismo de computação sem servidor, pois elimina a necessidade de os usuários finais gerenciarem os servidores que hospedam contêineres. Para ser claro, os servidores ainda estão lá; A AWS simplesmente os gerencia. O Fargate não deve ser confundido com o AWS Lambda, outro serviço de computação sem servidor que não foi criado com contêineres em mente (embora o Lamba agora ofereça suporte à implantação de imagens de contêiner).

Como o Fargate ajuda?

O AWS Fargate calcula a quantidade exata de computação, memória e outros recursos necessários para suas tarefas, para que você não precise se preocupar em escolher tipos de instância ou dimensionar a capacidade do cluster.

Ele permite que você pague pelos recursos necessários para operar seus contêineres à medida que são usados, evitando o provisionamento excessivo e pagando por servidores desnecessários.

As tarefas Fargate (pods) são executadas em seus próprios kernels, resultando em um ambiente de computação seguro e isolado com cargas de trabalho isoladas e maior segurança.

Ele permite que as equipes projetem e executem aplicativos usando contêineres ECS ou EKS sem ter que lidar com atividades demoradas de gerenciamento de infraestrutura, como dimensionar e proteger servidores ou aplicar patches em sistemas operacionais.

Com conexões integradas com outros serviços da AWS, como o Amazon CloudWatch Container Insights, o AWS Fargate oferece um alto nível de observabilidade. Você também pode usar várias tecnologias de terceiros para coletar logs e métricas.

Também podemos utilizar com eficiência a vasta gama de serviços da AWS ao usar contêineres com o Fargate.

O Fargate lançará e dimensionará constantemente os recursos de computação para atender aos requisitos do contêiner, evitando o provisionamento excessivo e garantindo que você não pague por recursos que não usa. Você também pode calcular uma estratégia de economia, a opção Fargate Spot pode economizar até 70% dos custos normais, mas é ideal apenas para aplicações interruptíveis.

Componentes do Fargate

Agrupamentos

Um agrupamento lógico de tarefas ou serviços é um cluster do Amazon ECS. Os clusters podem ser usados ​​para isolar seus aplicativos. Quando você usa o Fargate para realizar suas tarefas, ele gerencia os recursos do cluster.

Definições de tarefas

Uma definição de tarefa é um arquivo de texto que descreve pelo menos um dos contêineres do seu aplicativo. É um arquivo JSON. Ele pode ser usado para descrever até dez contêineres por vez. A definição de tarefa do seu aplicativo serve como um modelo. Ele especifica os vários parâmetros do seu aplicativo.

Por exemplo, você pode usá-lo para definir parâmetros do sistema operacional, contêineres a serem usados, portas a serem abertas para seu aplicativo e volumes de dados a serem usados ​​com os contêineres na tarefa. Os requisitos de seu aplicativo determinam os parâmetros específicos disponíveis para definição de tarefa.

Tarefas

Uma tarefa é uma instanciação em nível de cluster de uma definição de tarefa. Depois de criar uma definição de tarefa para seu aplicativo no Amazon ECS, você pode escolher o número de tarefas que serão executadas em seu cluster. Podemos executar uma tarefa como parte de um serviço ou de um processo separado.

Serviços

Em um cluster do Amazon ECS, você pode utilizar 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 em sua definição de tarefa se alguma de suas tarefas falhar ou for interrompida por qualquer motivo. Ele faz isso para substituí-lo e manter o número de tarefas no serviço no nível correto.

Sistema operacional e arquitetura da CPU

Os sistemas operacionais suportados pelo Fargate são Amazon Linux 2, Windows server 2019 Full e Windows server 2019 core.

ARM e X86_64 são as duas arquiteturas disponíveis para definição de tarefas do Amazon ECS. Se você usa contêineres do Windows, deve ter uma arquitetura de CPU X86_64. Por outro lado, se você usar contêineres Linux, poderá usar a arquitetura ARM64 para seus aplicativos baseados 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 os gerencia em conjunto com tarefas que fazem parte da definição de tarefa.

Prós 👍

  • O tipo de instância do EC2 usado aqui está totalmente sob seu controle.
  • Você pode usar instâncias spot que reduzem os custos em até 90%.

Contras 👎

  • Você tem que cuidar de patches de segurança e segurança de rede das instâncias; além disso, você é responsável por sua escalabilidade no cluster.

No modelo Fargate, você não precisa mais se preocupar com instâncias ou servidores do EC2. Selecione a configuração de CPU e memória necessária e o Fargate implantará seus contêineres.

Prós 👍

  • Você não precisa gerenciar nenhum servidor.
  • A AWS é responsável pela disponibilidade e escalabilidade, mas ainda é uma boa prática selecionar a memória e a CPU corretas; caso contrário, nosso aplicativo corre o risco de ficar indisponível.
  • Se você decidir usar o Fargate Spot, poderá obter um desconto de até 70% no preço do Fargate.

Contras 👎

  • O ECS com AWS Fargate oferece suporte a apenas um modo de rede -awsvpc-. Como resultado, isso limita seu controle sobre a camada de rede.

EKS sem Fargate vs. EKS com Fargate

No EKS sem o modelo Fargate, você deve decidir antecipadamente o tamanho do cluster. Você sempre pode alterar os nós manualmente mais tarde, mas é problemático em comparação com a especificação do tamanho ideal desde o início.

Prós 👍

  • Este modelo oferece mais controle de várias maneiras, como você pode especificar variáveis ​​de configuração como HostNetwork e HostPort.
  • O Fargate não é compatível com todas as regiões, portanto, você prefere usar o EKS sem o Fargate se quiser que seu contêiner esteja disponível em mais regiões.

Contras 👎

  • EKS sem Fargate é um pouco difícil de usar.

No EKS com o modelo Fargate, você não precisa especificar o tamanho dos clusters antecipadamente.

Prós 👍

  • O EKS com Fargate é mais seguro porque é executado em máquinas virtuais dedicadas. O fato de não suportar o modo privilegiado é uma espécie de recurso de segurança.
  • É mais barato a longo prazo.

Contras 👎

  • Dá-lhe menos controle de várias maneiras

Conclusão

Fargate é uma ferramenta extremamente poderosa e madura. Você economiza custos, tempo e muito esforço, fazendo todo o gerenciamento de infraestrutura para você. O Fargate é especialmente benéfico se você é novo em contêineres e simplesmente deseja se concentrar em construir seu aplicativo em vez de mantê-lo.