Apprenez comment déployer rapidement des groupes d’auto-scaling Terraform

Êtes-vous fatigué de surveiller la charge de vos instances AWS et du trafic qu’elles reçoivent ? Pourquoi ne pas automatiser tout en déployant les groupes Auto Scaling de Terraform ? Le scaling automatique permet à certains serveurs de se mettre en veille pendant les périodes de faible charge et d’ajouter davantage de serveurs en cas de charge élevée, ce qui permet aux entreprises d’économiser sur les coûts d’électricité.

Dans ce tutoriel, vous apprendrez à créer et exécuter une configuration Terraform pour construire des groupes Auto Scaling et les déployer avec Terraform.

Lisez la suite et atteignez une disponibilité de zéro sur vos instances!

Prérequis

Ce post sera un tutoriel étape par étape. Si vous souhaitez suivre, assurez-vous d’avoir les éléments suivants en place :

  • Un compte 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 – Ce tutoriel utilise Terraform v1.1.5 fonctionnant sous Ubuntu 20.04 LTS, mais tout système d’exploitation avec Terraform devrait fonctionner.

Construction de la configuration Terraform pour un groupe Auto Scaling AWS

Avant d’exécuter les commandes Terraform pour construire et déployer l’infrastructure, vous devez créer les fichiers de configuration Terraform. Vous allez créer une configuration Terraform pour créer un groupe Autoscaling AWS dans votre compte AWS.

1. Connectez-vous à votre machine en utilisant votre client SSH préféré.

2. Ensuite, créez un dossier nommé ~/terraform-autoscaling-demo, puis changez (cd) le répertoire de travail vers ce dossier. Ce dossier contiendra tous les fichiers de configuration sur lesquels vous travaillerez dans ce tutoriel.

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

3. Ouvrez votre éditeur de code préféré, copiez/collez la configuration suivante et enregistrez le fichier sous le nom de main.tf dans le répertoire ~/terraform-autoscaling-demo. Ce fichier main.tf est la configuration Terraform pour le groupe Autoscaling.

Le code ci-dessous crée une configuration de lancement autoscaling (web_config) et provisionne un groupe Autoscaling (autoscalegroup). Le groupe Autoscaling est également accompagné de ses composants (aws_autoscaling_schedule et aws_autoscaling_policy).

# Création de la configuration de lancement de mise à l'échelle automatique contenant les détails de l'instance AWS EC2
resource "aws_launch_configuration" "aws_autoscale_conf" {
# Définition du nom de la configuration de lancement de mise à l'échelle automatique
  name          = "web_config"
# Définition de l'ID de l'image de l'instance AWS EC2
  image_id      = "ami-04505e74c0741db8d"
# Définition du type d'instance de l'instance AWS EC2
  instance_type = "t2.micro"
# Définition de la clé qui sera utilisée pour accéder à l'instance AWS EC2
  key_name = "automateinfra"
}

# Création du groupe de mise à l'échelle automatique dans la zone de disponibilité us-east-1a
resource "aws_autoscaling_group" "mygroup" {
# Définition de la zone de disponibilité dans laquelle l'instance AWS EC2 sera lancée
  availability_zones        = ["us-east-1a"]
# Spécification du nom du groupe de mise à l'échelle automatique
  name                      = "autoscalegroup"
# Définition du nombre maximal d'instances AWS EC2 lors de la mise à l'échelle
  max_size                  = 2
# Définition du nombre minimal d'instances AWS EC2 lors de la mise à l'échelle
  min_size                  = 1
# La période de grâce est le temps après lequel l'instance AWS EC2 entre en service avant de vérifier l'état de santé.
  health_check_grace_period = 30
# La mise à l'échelle automatique se fera en fonction de l'état de santé de l'instance AWS EC2 défini dans l'alarme AWS CloudWatch
  health_check_type         = "EC2"
# force_delete supprime le groupe de mise à l'échelle automatique sans attendre que toutes les instances dans le pool soient terminées
  force_delete              = true
# Définition de la politique de terminaison où la plus ancienne instance sera remplacée en premier 
  termination_policies      = ["OldestInstance"]
# Le groupe de mise à l'échelle dépend de la configuration de lancement de mise à l'échelle automatique en raison des configurations de l'instance AWS EC2
  launch_configuration      = aws_launch_configuration.aws_autoscale_conf.name
}
# Création de l'ordonnancement de mise à l'échelle du groupe de mise à l'échelle automatique

resource "aws_autoscaling_schedule" "mygroup_schedule" {
  scheduled_action_name  = "autoscalegroup_action"
# La taille minimale du groupe de mise à l'échelle automatique
  min_size               = 1
# La taille maximale du groupe de mise à l'échelle automatique
  max_size               = 2
# La capacité désirée est le nombre d'instances EC2 en cours d'exécution dans le groupe de mise à l'échelle automatique
  desired_capacity       = 1
# Définition de l'heure de début de mise à l'échelle automatique si vous pensez que le trafic peut atteindre son maximum à ce moment-là.
  start_time             = "2022-02-09T18:00:00Z"
  autoscaling_group_name = aws_autoscaling_group.mygroup.name
}

# Création de la politique de mise à l'échelle automatique du groupe de mise à l'échelle automatique
resource "aws_autoscaling_policy" "mygroup_policy" {
  name                   = "autoscalegroup_policy"
# Le nombre d'instances à utiliser pour l'échelle.
  scaling_adjustment     = 2
  adjustment_type        = "ChangeInCapacity"
# Le laps de temps (en secondes) après qu'une mise à l'échelle est terminée et que la prochaine commence.
  cooldown               = 300
  autoscaling_group_name = aws_autoscaling_group.mygroup.name
}
# Création de l'alarme AWS CloudWatch qui mettra automatiquement à l'échelle l'instance AWS EC2 en fonction de l'utilisation du processeur.
resource "aws_cloudwatch_metric_alarm" "web_cpu_alarm_up" {
# Définition du nom de l'alarme AWS CloudWatch
  alarm_name = "web_cpu_alarm_up"
  comparison_operator = "GreaterThanOrEqualToThreshold"
  evaluation_periods = "2"
# Définition du nom de la métrique selon laquelle la mise à l'échelle se fera (basée sur le CPU) 
  metric_name = "CPUUtilization"
# L'espace de noms pour la métrique associée à l'alarme
  namespace = "AWS/EC2"
# Après que l'alarme AWS CloudWatch est déclenchée, elle attendra 60 secondes avant de mettre automatiquement à l'échelle
  period = "60"
  statistic = "Average"
# Le seuil d'utilisation du CPU est fixé à 10 pour cent
  threshold = "10"
  alarm_actions = [
        "${aws_autoscaling_policy.mygroup_policy.arn}"
    ]
dimensions = {
    AutoScalingGroupName = "${aws_autoscaling_group.mygroup.name}"
  }
}

4. Créez un autre fichier dans ~/terraform-autoscaling-demo appelé provider.tf, et remplissez le contenu ci-dessous. Le fichier provider.tf définit des fournisseurs tels que AWS, Oracle, Azure, etc. Ce fichier de configuration vous permet de connecter Terraform aux services cloud appropriés.

Le tutoriel créera des ressources dans la région us-east-1. Mais vous pouvez trouver la liste des régions prises en charge par AWS.

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

5. Enfin, exécutez la commande tree ci-dessous pour vérifier que tous les fichiers requis sont présents dans le dossier de votre projet (~/terraform-autoscaling-demo).

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

Création du groupe Autoscaling AWS avec une configuration Terraform

Maintenant que vous avez correctement configuré le fichier de configuration Terraform et les fichiers de variables, il est temps d’initialiser Terraform et de créer le groupe Autoscaling AWS.

Pour provisionner le groupe Autoscaling AWS, comme pour toutes les autres configurations Terraform, Terraform utilise trois commandes en séquence (terraform init, terraform plan, et terraform apply).

1. Exécutez la commande terraform init dans le répertoire ~/terraform-autoscaling-demo. La commande initialise les plugins et les fournisseurs nécessaires pour travailler avec les ressources.

terraform init

Si tout se passe bien, vous verrez le message indiquant que Terraform a été initialisé avec succès dans la sortie, comme indiqué ci-dessous.

Initializing Terraform

2. Ensuite, exécutez la commande terraform plan pour vous assurer que votre syntaxe des fichiers de configuration est correcte et vous donne un plan des ressources qui seront provisionnées dans votre infrastructure.

terraform plan

En cas de succès, vous devriez voir un message indiquant le plan comme celui ci-dessous.

Executing the Terraform Plan

3. Enfin, exécutez la commande terraform apply pour retirer les stabilisateurs de formation et invoquer Terraform pour créer le groupe AWS AutoScaling.

La commande indique à Terraform de lire chaque configuration (*.tf) dans le répertoire actuel pour compiler un état envoyé à AWS. Terraform construit ensuite le groupe AWS Autoscaling et d’autres composants.

Il n’y a pas de frais supplémentaires pour AWS Auto Scaling. Vous ne payez que pour les ressources AWS nécessaires à l’exécution de vos applications.

Applying the Terraform Configuration to Build Autoscaling Group

Vérification du groupe AWS Autoscaling dans le Cloud AWS

À ce stade, vous devriez avoir créé le groupe AWS Autoscaling et les composants associés avec Terraform. Mais comment savez-vous qu’ils existent dans votre nuage AWS ? Vérifiez le groupe Autoscaling en vérifiant manuellement dans la Console de gestion AWS.

1. Ouvrez votre navigateur Web préféré et connectez-vous à la Console de gestion AWS.

2. Sur la page d’accueil de la console, cliquez sur la barre de recherche, recherchez et cliquez sur ‘EC2’ pour accéder au tableau de bord EC2.

Cliquez sur l’élément de menu Groupe de mise à l’échelle automatique AWS dans le tableau de bord EC2 pour gérer vos groupes de mise à l’échelle automatique.

Le nombre souhaité d’instances AWS EC2 sera lancé dans le Cloud AWS dans le tableau de bord EC2 avec les éléments suivants de mise à l’échelle automatique.

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

3. Enfin, cliquez sur Configuration de lancement AWS Auto Scaling dans le tableau de bord EC2. Vous verrez votre configuration de lancement de mise à l’échelle automatique (web_config) comme indiqué ci-dessous.

Verifying the AWS Autoscaling Launch Configuration in AWS Cloud

Mise à l’échelle automatique de l’instance EC2 avec des tests de charge

Maintenant que vous avez vérifié que le groupe/politique de mise à l’échelle automatique et les composants associés sont correctement configurés, il est temps de tester si les fonctionnalités de mise à l’échelle automatique fonctionnent. Comment ? En ajoutant une charge à l’instance récemment lancée avec le groupe de mise à l’échelle automatique.

1. Ouvrez l’instance AWS EC2 lancée avec le groupe de mise à l’échelle automatique à l’aide d’un client SSH.

2. Ensuite, lancez le terminal et exécutez la commande ci-dessous pour installer l’outil de test de charge (stress-ng). L’outil de stress vous permet de définir et de générer du stress sur la machine Ubuntu.

Vous pouvez également trouver d’autres outils de test de charge disponibles sur le marché.

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

3. Exécutez la commande stress-ng ci-dessous pour générer la charge de stress sur l’instance.

Le commandement ci-dessous contient les drapeaux suivants :

  • --cpu – Indique le nombre de cœurs sur lesquels la charge sera générée.
  • -v – Active le mode verbeux.
  • --timeout – Spécifie la durée pendant laquelle la charge doit être générée.
sudo stress-ng --cpu 4 -v --timeout 3000s
Generating the load on AWS EC2 instance.

4. Exécutez maintenant la commande top ci-dessous dès que vous générez la charge pour afficher les processus Linux.

top

Vous pouvez voir que le CPU augmente après la génération de la charge sur l’instance.

Executing the top command to verify the CPU consumption

5. Accédez au service AWS CloudWatch sur AWS Cloud. Vous remarquerez qu’une alarme est générée lorsque le CPU dépasse (10%). L’alarme a notifié au groupe de mise à l’échelle automatique de faire passer le nombre d’instances de un à deux, comme spécifié dans le groupe de mise à l’échelle automatique.

Viewing the Alarm Generated in the AWS CloudWatch Service

6. Enfin, accédez à vos Instances dans le tableau de bord EC2 pour vérifier les instances EC2 AWS.

Vous verrez qu’une instance de plus a été lancée, ce qui confirme la configuration réussie du groupe de mise à l’échelle automatique AWS et de ses composants.

Verifying the AWS EC2 instances in the EC2 dashboard

Vous pouvez également vérifier les activités de mise à l’échelle automatique dans les activités du groupe AWS AutoScale, comme indiqué ci-dessous.

Verifying the AWS AutoScale group activities

Conclusion

Dans ce tutoriel, vous avez appris comment utiliser Terraform pour déployer un groupe de mise à l’échelle automatique AWS et ses composants. Construire une application de mise à l’échelle automatique avec le groupe de mise à l’échelle automatique AWS vous permet de mettre à l’échelle en cas de besoin et est une tâche rapide.

Maintenant, avec ces connaissances nouvellement acquises, laissez-vous aller et mettez en œuvre le dimensionnement automatique avec d’autres services AWS sans vous soucier de la charge sur les serveurs!

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