Aprenda Como Implantar Grupos de Dimensionamento Automático com Terraform Rapidamente

Você está cansado de monitorar a carga de suas instâncias AWS e o tráfego que elas recebem? Por que não automatizar tudo, implantando Grupos de Autoescalabilidade do Terraform? A autoescalabilidade permite que alguns servidores descansem durante cargas baixas e adiciona mais servidores durante cargas altas, economizando nos custos de eletricidade para as empresas.

Neste tutorial, você aprenderá como criar e executar uma configuração do Terraform para construir Grupos de Autoescalabilidade e implantá-los com o Terraform.

Continue lendo e alcance zero tempo de inatividade em suas instâncias!

Pré-requisitos

Este post será um tutorial passo a passo. Se você quiser acompanhar, certifique-se de ter o seguinte em vigor:

  • Uma conta Amazon Web Service (AWS).
  • A code editor – Even though you can use any text editor to work with Terraform configuration files, consider using Visual Studio (VS) Code as it understands the HCL Terraform language well.
  • Terraform – Este tutorial utiliza o Terraform v1.1.5 em execução no Ubuntu 20.04 LTS, mas qualquer sistema operacional com o Terraform deve funcionar.

Construindo a Configuração do Terraform para um Grupo de Autoescalabilidade AWS.

Antes de executar os comandos do Terraform para construir e implantar a infraestrutura, você deve criar os arquivos de configuração do Terraform. Você criará uma configuração do Terraform para criar um grupo de dimensionamento automático AWS em sua conta da AWS.

1. Faça login em sua máquina usando seu cliente SSH favorito.

2. Em seguida, crie uma pasta chamada ~/terraform-autoscaling-demo e depois altere o diretório de trabalho para essa pasta (cd). Essa pasta conterá todos os arquivos de configuração em que você estará trabalhando neste tutorial.

mkdir ~/terraform-autoscaling-demo
cd ~/terraform-autoscaling-demo

3. Abra seu editor de código favorito, copie/cole a seguinte configuração e salve o arquivo como main.tf no diretório ~/terraform-autoscaling-demo. Este arquivo main.tf é a configuração do Terraform para o grupo de dimensionamento automático.

O código abaixo cria uma configuração de lançamento de dimensionamento automático (web_config) e provisiona um grupo de dimensionamento automático (autoscalegroup). O grupo de dimensionamento automático também inclui seus componentes (aws_autoscaling_schedule e aws_autoscaling_policy).

# Criando a configuração de lançamento de dimensionamento automático que contém detalhes da instância AWS EC2
resource "aws_launch_configuration" "aws_autoscale_conf" {
# Definindo o nome da configuração de lançamento do dimensionamento automático
  name          = "web_config"
# Definindo o ID da imagem da instância AWS EC2
  image_id      = "ami-04505e74c0741db8d"
# Definindo o tipo de instância da instância AWS EC2
  instance_type = "t2.micro"
# Definindo a chave que será usada para acessar a instância AWS EC2
  key_name = "automateinfra"
}

# Criando o grupo de dimensionamento automático na zona de disponibilidade us-east-1a
resource "aws_autoscaling_group" "mygroup" {
# Definindo a zona de disponibilidade na qual a instância AWS EC2 será lançada
  availability_zones        = ["us-east-1a"]
# Especificando o nome do grupo de dimensionamento automático
  name                      = "autoscalegroup"
# Definindo o número máximo de instâncias AWS EC2 durante o dimensionamento
  max_size                  = 2
# Definindo o número mínimo de instâncias AWS EC2 durante o dimensionamento
  min_size                  = 1
# O período de carência é o tempo após o qual a instância AWS EC2 entra em serviço antes de verificar a saúde.
  health_check_grace_period = 30
# O dimensionamento automático ocorrerá com base na saúde da instância AWS EC2 definida no AWS Cloudwatch Alarm
  health_check_type         = "EC2"
# force_delete exclui o Grupo de Dimensionamento Automático sem esperar que todas as instâncias no grupo terminem
  force_delete              = true
# Definindo a política de terminação onde a instância mais antiga será substituída primeiro
  termination_policies      = ["OldestInstance"]
# O grupo de dimensionamento é dependente da configuração de lançamento de dimensionamento automático devido às configurações da instância AWS EC2
  launch_configuration      = aws_launch_configuration.aws_autoscale_conf.name
}
# Criando a programação de dimensionamento automático do grupo de dimensionamento automático

resource "aws_autoscaling_schedule" "mygroup_schedule" {
  scheduled_action_name  = "autoscalegroup_action"
# O tamanho mínimo para o grupo de dimensionamento automático
  min_size               = 1
# O tamanho máximo para o grupo de dimensionamento automático
  max_size               = 2
# Desired_capacity é o número de instâncias EC2 em execução no grupo de dimensionamento automático
  desired_capacity       = 1
# Definindo o start_time do dimensionamento automático se você achar que o tráfego pode atingir o pico neste momento.
  start_time             = "2022-02-09T18:00:00Z"
  autoscaling_group_name = aws_autoscaling_group.mygroup.name
}

# Criando a política de dimensionamento automático do grupo de dimensionamento automático
resource "aws_autoscaling_policy" "mygroup_policy" {
  name                   = "autoscalegroup_policy"
# O número de instâncias pelas quais dimensionar.
  scaling_adjustment     = 2
  adjustment_type        = "ChangeInCapacity"
# A quantidade de tempo (segundos) após um dimensionamento ser concluído e o próximo dimensionamento começar.
  cooldown               = 300
  autoscaling_group_name = aws_autoscaling_group.mygroup.name
}
# Criando o Alarme AWS CLoudwatch que dimensionará automaticamente a instância AWS EC2 com base na utilização da CPU.
resource "aws_cloudwatch_metric_alarm" "web_cpu_alarm_up" {
# Definindo o nome do alarme AWS Cloudwatch
  alarm_name = "web_cpu_alarm_up"
  comparison_operator = "GreaterThanOrEqualToThreshold"
  evaluation_periods = "2"
# Definindo o nome da métrica conforme a qual o dimensionamento ocorrerá (baseado na CPU)
  metric_name = "CPUUtilization"
# O namespace para a métrica associada ao alarme
  namespace = "AWS/EC2"
# Após o acionamento do Alarme AWS Cloudwatch, ele aguardará 60 segundos e depois fará o dimensionamento automático
  period = "60"
  statistic = "Average"
# O limiar de utilização da CPU é definido como 10 por cento
  threshold = "10"
  alarm_actions = [
        "${aws_autoscaling_policy.mygroup_policy.arn}"
    ]
dimensions = {
    AutoScalingGroupName = "${aws_autoscaling_group.mygroup.name}"
  }
}

4. Crie outro arquivo em ~/terraform-autoscaling-demo chamado provider.tf, e preencha o conteúdo abaixo. O arquivo provider.tf define provedores como AWS, Oracle, Azure, etc. Este arquivo de configuração permite que você conecte o Terraform aos serviços de nuvem corretos.

O tutorial criará recursos na região us-east-1. Mas você pode encontrar a lista de regiões suportadas pela AWS.

provider "aws" {
   region = "us-east-1"
 }

5. Por fim, execute o comando tree abaixo para verificar se todos os arquivos necessários estão presentes em sua pasta de projeto (~/terraform-autoscaling-demo).

Verifying the Required Files for Building AWS Autoscaling Group in AWS Cloud

Criando o grupo de Autoscaling da AWS com uma Configuração Terraform

Agora que você configurou corretamente o arquivo de configuração do Terraform e os arquivos de variáveis, é hora de iniciar o Terraform e criar o grupo de Autoscaling da AWS.

Para provisionar o grupo de Autoscaling da AWS, assim como em todas as outras configurações do Terraform, o Terraform utiliza três comandos em sequência (terraform init, terraform plan e terraform apply).

1. Execute o comando terraform init no diretório ~/terraform-autoscaling-demo. O comando inicializa os plugins e provedores necessários para trabalhar com recursos.

terraform init

Se tudo correr bem, você verá a mensagem que diz que o Terraform foi inicializado com sucesso na saída, como mostrado abaixo.

Initializing Terraform

2. Em seguida, execute o comando terraform plan para garantir que a sintaxe dos arquivos de configuração esteja correta e fornecer um esboço dos recursos que serão provisionados em sua infraestrutura.

terraform plan

Se bem-sucedido, você deverá ver uma mensagem que mostra o Plano como o abaixo.

Executing the Terraform Plan

3. Por fim, execute o comando terraform apply para remover as rodas de treinamento e invocar o Terraform para criar o grupo de AutoScaling da AWS.

O comando diz ao Terraform para ler cada configuração (*.tf) no diretório atual para compilar um estado enviado para a AWS. O Terraform então constrói o grupo de AutoScaling da AWS e outros componentes.

Não há cobrança adicional para o AWS Auto Scaling. Você paga apenas pelos recursos da AWS necessários para executar suas aplicações.

Applying the Terraform Configuration to Build Autoscaling Group

Verificando o Grupo de AutoScaling da AWS no AWS Cloud

Neste ponto, você deverá ter criado o grupo de AutoScaling da AWS e componentes relacionados com o Terraform. Mas como você sabe que eles existem em sua nuvem AWS? Verifique o grupo de AutoScaling verificando manualmente no Console de Gerenciamento da AWS.

1. Abra seu navegador da web favorito e faça login no Console de Gerenciamento da AWS.

2. Na página inicial do console, clique na caixa de pesquisa, procure e clique em ‘EC2’ para acessar o painel do EC2.

Clique no item de menu Grupo de Auto dimensionamento da AWS no painel do EC2 para gerenciar seus grupos de Auto dimensionamento.

A quantidade desejada de instâncias AWS EC2 será lançada na Nuvem AWS no painel do EC2 com o Auto dimensionamento abaixo.

Verifying the AWS Autoscaling Group with Scaling Policy Containing AWS CloudWatch Alarm

3. Por fim, clique em Configuração de Lançamento do Auto dimensionamento da AWS no painel do EC2. Você verá sua configuração de lançamento de auto dimensionamento (web_config) conforme mostrado abaixo.

Verifying the AWS Autoscaling Launch Configuration in AWS Cloud

Auto dimensionando a instância EC2 com Teste de Carga

Agora que você verificou que o grupo/política de Auto dimensionamento e os componentes relacionados estão configurados corretamente, é hora de testar se as funcionalidades de Auto dimensionamento funcionam. Como? Adicionando carga na instância lançada recentemente com o grupo de Auto dimensionamento.

1. Abra a instância AWS EC2 lançada com o grupo de Auto dimensionamento usando um cliente SSH.

2. Em seguida, abra o terminal e execute o comando abaixo para instalar a ferramenta de estresse de carga (stress-ng). A ferramenta de estresse permite definir e gerar estresse na máquina Ubuntu.

Você também pode encontrar outras ferramentas de estresse de carga disponíveis no mercado.

sudo apt install stress-ng
Installing the Load Stress tool on the AWS EC2 instance

3. Execute o comando stress-ng abaixo para gerar a carga de estresse na instância.

Abaixo está o comando que contém as seguintes opções:

  • --cpu – Indica o número de núcleos nos quais a carga será gerada.
  • -v – Ativa o modo detalhado (verbose).
  • --timeout – Especifica o tempo durante o qual a carga deve ser gerada.
sudo stress-ng --cpu 4 -v --timeout 3000s
Generating the load on AWS EC2 instance.

4. Agora, execute o comando top assim que gerar a carga para mostrar os processos do Linux.

top

Abaixo, você pode ver que a CPU sobe após a geração da carga na instância.

Executing the top command to verify the CPU consumption

5. Vá para o serviço AWS CloudWatch na AWS Cloud. Você notará que um Alarme é gerado quando a CPU ultrapassa (10%). O Alarme notificou o grupo de dimensionamento automático para aumentar o número de instâncias de uma para duas, conforme especificado no grupo de dimensionamento automático.

Viewing the Alarm Generated in the AWS CloudWatch Service

6. Finalmente, vá para suas Instâncias no painel EC2 para verificar as instâncias da AWS EC2.

Você verá que mais uma instância foi iniciada, confirmando a configuração bem-sucedida do grupo de dimensionamento automático da AWS e seus componentes.

Verifying the AWS EC2 instances in the EC2 dashboard

Você também pode verificar as atividades de dimensionamento automático no grupo de atividades do grupo de dimensionamento automático da AWS, conforme mostrado abaixo.

Verifying the AWS AutoScale group activities

Conclusão

Neste tutorial, você aprendeu como usar o Terraform para implantar um Grupo de Dimensionamento Automático da AWS e seus componentes. Construir uma aplicação de dimensionamento automático com o Grupo de Dimensionamento Automático da AWS permite dimensionar conforme necessário e é uma tarefa rápida.

Agora, com este novo conhecimento, enlouqueça e implemente o Dimensionamento Automático com outros serviços da AWS sem se preocupar com a carga nos servidores!

Source:
https://adamtheautomator.com/terraform-autoscaling-group/