Aprenda Como Implementar Grupos de Dimensionamento Automático do Terraform Rapidamente

Está cansado de monitorar a carga das suas instâncias AWS e o tráfego que elas recebem? Por que não automatizar tudo implantando Grupos de Dimensionamento Automático do Terraform? O dimensionamento automático permite que alguns servidores fiquem inativos durante cargas baixas e adiciona mais servidores durante cargas altas, economizando nos custos de eletricidade para as empresas.

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

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

Pré-requisitos

Esta postagem será um tutorial passo a passo. Se você quiser acompanhar, certifique-se de ter o seguinte:

  • Uma conta da 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 usa o Terraform v1.1.5 em execução no Ubuntu 20.04 LTS, mas qualquer sistema operacional com Terraform deve funcionar.

Construindo a Configuração do Terraform para um Grupo de Dimensionamento Automático da AWS

Antes de executar comandos 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 (cd) o diretório de trabalho para essa pasta. Esta 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 inicialização automática que contém detalhes da instância AWS EC2
resource "aws_launch_configuration" "aws_autoscale_conf" {
# Definindo o nome da configuração de inicialização automática
  name          = "web_config"
# Definindo o ID da imagem da instância AWS EC2
  image_id      = "ami-04505e74c0741db8d"
# Definindo o tipo de instância da 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á iniciada
  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 a escalabilidade
  max_size                  = 2
# Definindo o número mínimo de instâncias AWS EC2 durante a escalabilidade
  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
# A escalabilidade automática ocorrerá com base na saúde da instância AWS EC2 definida no Alarme do CloudWatch da AWS
  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 depende da configuração de inicialização automática devido às configurações da instância AWS EC2
  launch_configuration      = aws_launch_configuration.aws_autoscale_conf.name
}
# Criando o cronograma 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ê acha que o tráfego pode aumentar 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"
# O tempo (em 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 do CloudWatch da AWS 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 do AWS CloudWatch
  alarm_name = "web_cpu_alarm_up"
  comparison_operator = "GreaterThanOrEqualToThreshold"
  evaluation_periods = "2"
# Definindo o nome da métrica de acordo com a qual o dimensionamento ocorrerá (com base na CPU)
  metric_name = "CPUUtilization"
# O namespace para a métrica associada ao alarme
  namespace = "AWS/EC2"
# Depois que o Alarme do CloudWatch da AWS for acionado, ele aguardará 60 segundos e depois fará o dimensionamento automático
  period = "60"
  statistic = "Average"
# O limiar de utilização da CPU está definido para 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, e assim por diante. Este arquivo de configuração permite conectar o Terraform aos serviços em nuvem corretos.

O tutorial estará criando recursos na região us-east-1. Mas você pode encontrar a lista de regiões que a AWS suporta.

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

5. Por último, execute o comando tree abaixo para verificar se todos os arquivos necessários estão presentes na pasta do seu projeto (~/terraform-autoscaling-demo).

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

Criando o grupo de escalonamento automático da AWS com uma Configuração do Terraform

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

Para provisionar o grupo de escalonamento automático da AWS, assim como 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 lhe dê um plano dos recursos que serão provisionados em sua infraestrutura.

terraform plan

Se for 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 AWS AutoScaling.

O comando instrui o Terraform a 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 AWS Autoscaling 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 AWS Autoscaling na Nuvem AWS

Neste momento, você deverá ter criado o grupo AWS Autoscaling e os componentes relacionados com o Terraform. Mas como você sabe que eles existem em sua nuvem AWS? Verifique o grupo 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, pesquise e clique em ‘EC2’ para acessar o painel do EC2.

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

O número desejado de instâncias do AWS EC2 será lançado na Nuvem AWS no painel do EC2 com o abaixo Autoscaling.

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

3. Por último, clique em Configuração de lançamento do AWS Auto Scaling no painel do EC2. Você verá sua configuração de lançamento de autoscaling (web_config) como mostrado abaixo.

Verifying the AWS Autoscaling Launch Configuration in AWS Cloud

Dimensionamento automático da instância EC2 com Teste de Carga

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

1. Abra a instância AWS EC2 lançada com o grupo de dimensionamento automático 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 o 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 bandeiras:

  • --cpu – Denota o número de núcleos nos quais a carga será gerada.
  • -v – Ativa o modo verbose.
  • --timeout – Especifica o tempo pelo 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 abaixo assim que gerar a carga para mostrar os processos Linux.

top

Abaixo, você pode ver que a CPU aumenta após gerar a 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 conforme a CPU ultrapassa (10%). O Alarme notificou o grupo de dimensionamento automático para escalar 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 EC2 da AWS.

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 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 esse conhecimento recém-adquirido, enlouqueça e implemente o Auto Scaling com outros serviços da AWS sem se preocupar com a carga nos servidores!

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