Escalabilidade na AWS com o Amazon EC2 Auto Scaling

Escalabilidade na AWS com o Amazon EC2 Auto Scaling

Um dos grandes benefícios da Computação em Nuvem reside na Escalabilidade, que é a capacidade de ajustar seus recursos conforme a demanda, garantindo que você tenha recursos disponíveis para atender às suas necessidades.

Em geral, a escalabilidade pode ser dividida em:

  • Vertical: se refere a expansão dos recursos computacionais (adicionar CPU, RAM, etc), ou seja, aumentar o "tamanho" de uma instância;
  • Horizontal: aumentar o número de instâncias baseada na demanda, ou seja, envolve a adição de mais nodes (mais máquinas).

Podemos pensar em uma aplicação que está rodando em um web server utilizando uma EC2. Em dado momento, as necessidades do negócio e a alta demanda fazem com que somente uma instância não seja mais suficiente devido ao alto número de acessos. Nesse cenário, a escalabilidade cai como uma luva.

Na AWS, existe um serviço voltado para garantir que se tenha o número correto de EC2 instâncias da Amazon disponíveis para lidar com a carga de uma aplicação: é o Amazon EC2 Auto Scaling, ou simplesmente Auto Scaling.

Com o Auto Scaling podemos criar coleções de EC2 instâncias, chamadas de grupos de Auto Scaling (Auto Scaling Groups ou ASG).

Também podemos:

  • especificar o número mínimo de instâncias em cada grupo de Auto Scaling, garantindo que seu grupo nunca fique abaixo desse tamanho;
  • especificar o número máximo de instâncias em cada grupo de Auto Scaling, garantindo que seu grupo nunca ultrapasse esse tamanho;
  • especificar a capacidade desejada, ao criar o grupo ou a qualquer momento posterior, garantindo que seu grupo tenha esse número de instâncias;
  • por fim, especificar políticas de escalabilidade, para que o Amazon EC2 Auto Scaling inicie ou encerre instâncias à medida que a demanda da sua aplicação aumentar ou diminuir - ou seja, pode fazer o scale out (adicionar instâncias) e scale in (remover instâncias ociosas).

Sem mais delongas, vamos para o nosso tutorial!

Passo a passo

1) Acesse a console da AWS e pesquise por Auto Scaling Groups

2) Clique no botão "Criar grupo do Auto Scaling"

3) Escolha um nome para o grupo e escolha um modelo de execução

Na página seguinte, será necessário escolher um nome para o Grupo de Auto Scaling. Coloquei como Grupo-teste

Além disso, é necessário criar um modelo de execução (launch template). Para isso, basta clicar na opção "Criar um modelo de execução".

4) Configurar o modelo de execução

Será aberta uma nova janela, onde iremos criar um template. Vamos definir as seguintes configurações do template:

  • Nome: coloquei como TemplateTeste
  • Imagem de aplicação de sistema operacional: selecione a Ubuntu Server 24.04 LTS
  • Tipo de instância: t2.micro
  • Par de chaves: caso você tenha feito o tutorial de como criar uma EC2 (e ainda tiver o arquivo .pem gerado), você pode selecionar a mesma chave criada. Se não tiver, crie uma nova.
  • Configurações de rede: marque "Criar grupo de segurança" e inclua as regras de segurança para abrir as portas para SSH, HTTP e HTTPS
  • Armazenamento: não altere nada

Mais abaixo, clique em "Detalhes avançados". Em Dados do usuário insira o seguinte script:

#!/bin/bash
sudo apt update -y
sudo apt install -y apache2
sudo systemctl start apache2
sudo systemctl enable apache2
echo "<h1> Ola mundo! Este e o servidor: $(hostname -f)</h1>" | sudo tee /var/www/html/index.html > /dev/null

P.S.: Em outros tutoriais, esse script nos será útil.

E clique em "Criar modelo de execução".

4) Criando o grupo de Auto Scaling

Retorne a página do Auto Scaling e selecione o template criado. Clique em  "Próximo"

Em Rede, vamos marcar todas as Zonas de Disponibilidade (AZs). Como eu estou utilizando a região de Ohio (us-east-2), selecionei as três AZs referentes a essa região.

Depois, clique em  "Próximo".

Como não vamos definir nenhum balanceador de carga, clique novamente em  "Próximo"

5) Defina as configurações de escalabilidade

Esse passo aqui é muito importante, pois vamos definir qual é a quantidade mínima de instâncias necessárias para a nossa aplicação rodar.

  • Capacidade desejada: 3
  • Capacidade mínima desejada: 2
  • Capacidade máxima desejada: 4

Para este tutorial, não vamos definir nenhuma política de manutenção de instâncias. Portanto, desça até ao final da página.

6) Rever e criar grupo

Em seguida, clique em "Pular para a revisão" e depois clique em "Criar grupo do Auto Scaling"

Se deu tudo certo, o grupo foi criado, conforme imagem:

7) Verificar as instâncias

Ao criar o grupo, automaticamente as instâncias são criadas. Você pode ir até ao painel da EC2 e ver que temos três instâncias em execução (cada uma em uma AZ diferente).

Agora, vamos deletar duas instâncias para ver o que acontece - lembre-se de confirmar a exclusão.

Em seguida, clique no ícone de loading para atualizar a página. Agora temos somente uma instância rodando...

Como nossa capacidade mínima foi definida para duas instâncias, observe que ao deletarmos duas do nosso grupo, imediatamente outra instância já é iniciada. E em poucos minutos ela já está em execução:

Essa é a mágica do Auto Scaling.

8) Limpando o ambiente

Agora que já vimos como o Auto Scaling funciona, vamos limpar o ambiente. Se você tentar excluir as instâncias diretamente pelo painel do EC2, elas irão retornar tal qual um morto-vivo em um filme de terror...

Por isso, antes de excluir a instância, precisamos deletar o Grupo de Auto Scaling:

Confirme a exclusão do grupo:

Por padrão, todas as instâncias do grupo também serão deletadas. Você também pode apagar o modelo de execução (template) criado.

Bons estudos!

Documentação