Aprende cómo implementar grupos de escalado automático con Terraform rápidamente

¿Estás cansado de monitorear la carga de tus instancias de AWS y el tráfico que reciben? ¿Por qué no automatizar todo desplegando Grupos de Escalamiento Automático con Terraform? El escalado automático permite que algunos servidores duerman durante cargas bajas y agrega más servidores durante cargas altas, ahorrando costos de electricidad para las empresas.

En este tutorial, aprenderás cómo construir y ejecutar una configuración de Terraform para crear Grupos de Escalamiento Automático y desplegarlos con Terraform.

¡Sigue leyendo y logra un tiempo de inactividad cero en tus instancias!

Requisitos previos

Esta publicación será un tutorial paso a paso. Si deseas seguirlo, asegúrate de tener lo siguiente:

  • Una cuenta de 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 Terraform v1.1.5 en Ubuntu 20.04 LTS, pero debería funcionar en cualquier sistema operativo con Terraform.

Construyendo la Configuración de Terraform para un Grupo de Escalamiento Automático de AWS

Antes de ejecutar comandos de Terraform para construir e implementar la infraestructura, debes crear los archivos de configuración de Terraform. Construirás una configuración de Terraform para crear un grupo de escalado automático de AWS en tu cuenta de AWS.

1. Inicia sesión en tu máquina utilizando tu cliente SSH favorito.

2. A continuación, crea una carpeta llamada ~/terraform-autoscaling-demo, luego cambia (cd) el directorio de trabajo a esa carpeta. Esta carpeta contendrá todos los archivos de configuración en los que trabajarás en este tutorial.

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

3. Abre tu editor de código favorito, copia/pega la siguiente configuración y guarda el archivo como main.tf en el directorio ~/terraform-autoscaling-demo. Este archivo main.tf es la configuración de Terraform para el grupo de escalado automático.

El código a continuación crea una configuración de inicio de escalado automático (web_config) y provisiona un grupo de escalado automático (autoscalegroup). El grupo de escalado automático también viene con sus componentes (aws_autoscaling_schedule y aws_autoscaling_policy).

# Creando la configuración de inicio de escalado automático que contiene los detalles de la instancia AWS EC2
resource "aws_launch_configuration" "aws_autoscale_conf" {
# Definiendo el nombre de la configuración de inicio de escalado automático
  name          = "web_config"
# Definiendo el ID de imagen de la instancia AWS EC2
  image_id      = "ami-04505e74c0741db8d"
# Definiendo el tipo de instancia de la instancia AWS EC2
  instance_type = "t2.micro"
# Definiendo la clave que se utilizará para acceder a la instancia AWS EC2
  key_name = "automateinfra"
}

# Creando el grupo de escalado automático dentro de la zona de disponibilidad us-east-1a
resource "aws_autoscaling_group" "mygroup" {
# Definiendo la zona de disponibilidad en la que se lanzará la instancia AWS EC2
  availability_zones        = ["us-east-1a"]
# Especificando el nombre del grupo de escalado automático
  name                      = "autoscalegroup"
# Definiendo el número máximo de instancias AWS EC2 durante el escalado
  max_size                  = 2
# Definiendo el número mínimo de instancias AWS EC2 durante el escalado
  min_size                  = 1
# El período de gracia es el tiempo después del cual la instancia AWS EC2 entra en servicio antes de verificar la salud.
  health_check_grace_period = 30
# El escalado automático se realizará en función de la salud de la instancia AWS EC2 definida en la Alarma de Cloudwatch de AWS
  health_check_type         = "EC2"
# force_delete elimina el Grupo de escalado automático sin esperar a que todas las instancias en el grupo terminen
  force_delete              = true
# Definiendo la política de terminación donde la instancia más antigua será reemplazada primero
  termination_policies      = ["OldestInstance"]
# El grupo de escalado depende de la configuración de inicio de escalado automático debido a las configuraciones de instancia AWS EC2
  launch_configuration      = aws_launch_configuration.aws_autoscale_conf.name
}
# Creando el horario de escalado automático del grupo de escalado automático

resource "aws_autoscaling_schedule" "mygroup_schedule" {
  scheduled_action_name  = "autoscalegroup_action"
# El tamaño mínimo para el grupo de escalado automático
  min_size               = 1
# El tamaño máximo para el grupo de escalado automático
  max_size               = 2
# La capacidad deseada es el número de instancias EC2 en ejecución en el grupo de escalado automático
  desired_capacity       = 1
# Definiendo el tiempo de inicio del escalado automático si se cree que el tráfico puede alcanzar su punto máximo en este momento.
  start_time             = "2022-02-09T18:00:00Z"
  autoscaling_group_name = aws_autoscaling_group.mygroup.name
}

# Creando la política de escalado automático del grupo de escalado automático
resource "aws_autoscaling_policy" "mygroup_policy" {
  name                   = "autoscalegroup_policy"
# El número de instancias por las que se va a escalar.
  scaling_adjustment     = 2
  adjustment_type        = "ChangeInCapacity"
# La cantidad de tiempo (segundos) después de que un escalado se completa y comienza el siguiente escalado.
  cooldown               = 300
  autoscaling_group_name = aws_autoscaling_group.mygroup.name
}
# Creando la Alarma de Cloudwatch de AWS que ajustará automáticamente la instancia AWS EC2 en función de la utilización de la CPU.
resource "aws_cloudwatch_metric_alarm" "web_cpu_alarm_up" {
# Definiendo el nombre de la alarma de Cloudwatch de AWS
  alarm_name = "web_cpu_alarm_up"
  comparison_operator = "GreaterThanOrEqualToThreshold"
  evaluation_periods = "2"
# Definiendo el nombre de la métrica según la cual se producirá el escalado (basado en la CPU)
  metric_name = "CPUUtilization"
# El espacio de nombres para la métrica asociada a la alarma
  namespace = "AWS/EC2"
# Después de que se active la Alarma de Cloudwatch de AWS, esperará 60 segundos y luego realizará el escalado automático
  period = "60"
  statistic = "Average"
# El umbral de utilización de la CPU está establecido en el 10 por ciento
  threshold = "10"
  alarm_actions = [
        "${aws_autoscaling_policy.mygroup_policy.arn}"
    ]
dimensions = {
    AutoScalingGroupName = "${aws_autoscaling_group.mygroup.name}"
  }
}

4. Cree otro archivo en ~/terraform-autoscaling-demo llamado provider.tf, y complete el contenido a continuación. El archivo provider.tf define proveedores como AWS, Oracle, Azure, y otros. Este archivo de configuración le permite conectar Terraform con los servicios en la nube correctos.

El tutorial estará creando recursos en la región us-east-1. Pero puedes encontrar la lista de regiones que AWS soporta.

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

5. Por último, ejecute el comando tree a continuación para verificar que todos los archivos requeridos estén presentes en la carpeta de su proyecto (~/terraform-autoscaling-demo).

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

Creando el grupo de escalado automático de AWS con una configuración de Terraform

Ahora que tiene el archivo de configuración de Terraform y los archivos de variables configurados correctamente, es hora de iniciar Terraform y crear el grupo de escalado automático de AWS.

Para aprovisionar el grupo de escalado automático de AWS, al igual que todas las demás configuraciones de Terraform, Terraform utiliza tres comandos en secuencia (terraform init, terraform plan y terraform apply).

1. Ejecute el comando terraform init en el directorio ~/terraform-autoscaling-demo. El comando inicializa los complementos y proveedores necesarios para trabajar con los recursos.

terraform init

Si todo va bien, verá el mensaje que indica que Terraform se ha inicializado correctamente en la salida, como se muestra a continuación.

Initializing Terraform

2. A continuación, ejecute el comando terraform plan para asegurarse de que la sintaxis de los archivos de configuración sea correcta y le proporcione un plano de los recursos que se aprovisionarán en su infraestructura.

terraform plan

Si tiene éxito, debería ver un mensaje que muestre el Plan como el siguiente.

Executing the Terraform Plan

3. Finalmente, ejecute el comando terraform apply para quitar las ruedas de entrenamiento e invocar a Terraform para crear el grupo de Auto Scaling de AWS.

El comando le indica a Terraform que lea cada configuración (*.tf) en el directorio actual para compilar un estado enviado a AWS. Luego, Terraform construye el grupo de Auto Scaling de AWS y otros componentes.

No hay un cargo adicional por AWS Auto Scaling. Solo pagas por los recursos de AWS necesarios para ejecutar tus aplicaciones.

Applying the Terraform Configuration to Build Autoscaling Group

Verificación del Grupo de Auto Scaling de AWS en la Nube de AWS

Para este punto, debería haber creado el grupo de Auto Scaling de AWS y los componentes relacionados con Terraform. Pero, ¿cómo sabe que existen en su nube de AWS? Verifique el grupo de Auto Scaling comprobando manualmente en la Consola de Administración de AWS.

1. Abra su navegador web favorito e inicie sesión en la Consola de Administración de AWS.

2. En la página de inicio de la consola, haz clic en el cuadro de búsqueda, busca y haz clic en ‘EC2’ para acceder al panel de EC2.

Haz clic en el elemento del menú Grupo de escalado automático de AWS en el panel de EC2 para gestionar tus grupos de escalado automático.

La cantidad deseada de instancias de AWS EC2 se lanzará en la nube de AWS en el panel de EC2 con el siguiente escalado automático.

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

3. Por último, haz clic en Configuración de lanzamiento de escalado automático de AWS en el panel de EC2. Verás tu configuración de lanzamiento de autoscaling (web_config) como se muestra a continuación.

Verifying the AWS Autoscaling Launch Configuration in AWS Cloud

Escalando automáticamente la instancia EC2 con pruebas de carga

Ahora que has verificado que el grupo/póliza de escalado automático y los componentes relacionados están configurados correctamente, es hora de probar si las características de escalado automático funcionan. ¿Cómo? Agregando carga a la instancia lanzada recientemente con el grupo de AutoScaling.

1. Abre la instancia EC2 de AWS lanzada con el grupo de AutoScaling usando un cliente SSH.

2. A continuación, abre la terminal y ejecuta el siguiente comando para instalar la herramienta de estrés de carga (stress-ng). La herramienta de estrés te permite definir y generar estrés en la máquina Ubuntu.

También puedes encontrar otras herramientas de estrés de carga disponibles en el mercado.

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

3. Ejecuta el comando stress-ng a continuación para generar la carga de estrés en la instancia.

A continuación, el comando contiene las siguientes banderas:

  • --cpu – Indica la cantidad de núcleos en los que se generará carga.
  • -v – Habilita el modo detallado.
  • --timeout – Especifica el tiempo durante el cual se generará carga.
sudo stress-ng --cpu 4 -v --timeout 3000s
Generating the load on AWS EC2 instance.

4. Ahora ejecuta el comando top tan pronto como generes la carga para mostrar los procesos de Linux.

top

A continuación, puedes ver que la CPU aumenta después de generar la carga en la instancia.

Executing the top command to verify the CPU consumption

5. Ve al servicio CloudWatch de AWS en la nube de AWS. Notarás que se genera una alarma cuando la CPU supera el 10%. La alarma notifica al grupo de escalado automático que debe aumentar el número de instancias de una a dos, según lo especificado en el grupo de escalado automático.

Viewing the Alarm Generated in the AWS CloudWatch Service

6. Finalmente, ve a tus Instancias en el panel de EC2 para verificar las instancias de AWS EC2.

Verás que se ha lanzado una instancia más, lo que confirma la configuración exitosa del grupo de escalado automático de AWS y sus componentes.

Verifying the AWS EC2 instances in the EC2 dashboard

También puedes verificar las actividades de escalado automático en las actividades del grupo de escalado automático de AWS, como se muestra a continuación.

Verifying the AWS AutoScale group activities

Conclusión

En este tutorial, has aprendido cómo usar Terraform para implementar un Grupo de Escalado Automático de AWS y sus componentes. Construir una aplicación de escalado automático con el Grupo de Escalado Automático de AWS te permite escalar según sea necesario y es una tarea rápida.

Ahora, con este conocimiento recién adquirido, ¡vuélvete loco e implementa Auto Scaling con otros servicios de AWS sin preocuparte por la carga en los servidores!

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