Impara come Distribuire Gruppi di Autoscaling con Terraform Rapidamente

Sei stanco di monitorare il carico delle tue istanze AWS e il traffico che ricevono? Perché non automatizzare tutto deployando i Gruppi di Autoscaling di Terraform Autoscaling Groups? Il ridimensionamento automatico consente a alcuni server di andare in standby durante i periodi di basso carico e aggiunge più server durante i periodi di carico elevato, risparmiando sui costi energetici per le aziende.

In questo tutorial, imparerai come creare e eseguire una configurazione di Terraform per costruire Gruppi di Autoscaling e distribuirli con Terraform.

Continua a leggere e ottieni zero downtime sulle tue istanze!

Prerequisiti

Questo post sarà un tutorial passo-passo. Se vuoi seguirci, assicurati di avere quanto segue:

  • Un account 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 – Questo tutorial utilizza Terraform v1.1.5 in esecuzione su Ubuntu 20.04 LTS, ma qualsiasi sistema operativo con Terraform dovrebbe funzionare.

Costruzione della configurazione di Terraform per un Gruppo di Autoscaling AWS.

Prima di eseguire i comandi Terraform per costruire e distribuire l’infrastruttura, è necessario creare i file di configurazione Terraform. Creerai una configurazione Terraform per creare un gruppo di Autoscaling AWS nel tuo account AWS.

1. Accedi alla tua macchina usando il tuo client SSH preferito.

2. Successivamente, crea una cartella denominata ~/terraform-autoscaling-demo, quindi cambia (cd) la directory di lavoro in quella cartella. Questa cartella conterrà tutti i file di configurazione su cui lavorerai in questo tutorial.

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

3. Apri il tuo editor di codice preferito, copia/incolla la seguente configurazione e salva il file come main.tf nella directory ~/terraform-autoscaling-demo. Questo file main.tf è la configurazione Terraform per il gruppo di Autoscaling.

Il codice qui sotto crea una configurazione di lancio di Autoscaling (web_config) e fornisce un gruppo di Autoscaling (autoscalegroup). Il gruppo di Autoscaling include anche i suoi componenti (aws_autoscaling_schedule e aws_autoscaling_policy).

# Creazione della configurazione di avvio automatico che contiene i dettagli dell'istanza AWS EC2
resource "aws_launch_configuration" "aws_autoscale_conf" {
# Definizione del nome della configurazione di avvio automatico
  name          = "web_config"
# Definizione dell'ID dell'immagine dell'istanza AWS EC2
  image_id      = "ami-04505e74c0741db8d"
# Definizione del tipo di istanza dell'istanza AWS EC2
  instance_type = "t2.micro"
# Definizione della chiave che verrà utilizzata per accedere all'istanza AWS EC2
  key_name = "automateinfra"
}

# Creazione del gruppo di scalabilità automatica all'interno della zona di disponibilità us-east-1a
resource "aws_autoscaling_group" "mygroup" {
# Definizione della zona di disponibilità in cui verrà avviata l'istanza AWS EC2
  availability_zones        = ["us-east-1a"]
# Specifica del nome del gruppo di scalabilità automatica
  name                      = "autoscalegroup"
# Definizione del numero massimo di istanze AWS EC2 durante il ridimensionamento
  max_size                  = 2
# Definizione del numero minimo di istanze AWS EC2 durante il ridimensionamento
  min_size                  = 1
# Il periodo di tolleranza è il tempo dopo il quale l'istanza AWS EC2 entra in servizio prima di controllare lo stato di salute.
  health_check_grace_period = 30
# Il ridimensionamento automatico avverrà in base allo stato di salute dell'istanza AWS EC2 definito nell'allarme AWS CLoudwatch 
  health_check_type         = "EC2"
# force_delete elimina il gruppo di scalabilità automatica senza attendere che tutte le istanze nel pool terminino
  force_delete              = true
# Definizione della politica di terminazione in cui la vecchia istanza sarà sostituita per prima 
  termination_policies      = ["OldestInstance"]
# Il gruppo di scalabilità dipende dalla configurazione di avvio automatico a causa delle configurazioni dell'istanza AWS EC2
  launch_configuration      = aws_launch_configuration.aws_autoscale_conf.name
}
# Creazione dell'orario di scalabilità del gruppo di scalabilità automatica

resource "aws_autoscaling_schedule" "mygroup_schedule" {
  scheduled_action_name  = "autoscalegroup_action"
# La dimensione minima per il gruppo di scalabilità automatica
  min_size               = 1
# La dimensione massima per il gruppo di scalabilità automatica
  max_size               = 2
# La capacità desiderata è il numero di istanze EC2 in esecuzione nel gruppo di scalabilità automatica
  desired_capacity       = 1
# Definizione dell'orario di inizio del ridimensionamento automatico se si prevede un picco di traffico in questo momento.
  start_time             = "2022-02-09T18:00:00Z"
  autoscaling_group_name = aws_autoscaling_group.mygroup.name
}

# Creazione della politica di scalabilità del gruppo di scalabilità automatica
resource "aws_autoscaling_policy" "mygroup_policy" {
  name                   = "autoscalegroup_policy"
# Il numero di istanze per cui eseguire il ridimensionamento.
  scaling_adjustment     = 2
  adjustment_type        = "ChangeInCapacity"
# La quantità di tempo (secondi) dopo un ridimensionamento completato e l'inizio del successivo ridimensionamento.
  cooldown               = 300
  autoscaling_group_name = aws_autoscaling_group.mygroup.name
}
# Creazione dell'allarme AWS CLoudwatch che ridimensionerà l'istanza AWS EC2 in base all'utilizzo della CPU.
resource "aws_cloudwatch_metric_alarm" "web_cpu_alarm_up" {
# Definizione del nome dell'allarme AWS cloudwatch
  alarm_name = "web_cpu_alarm_up"
  comparison_operator = "GreaterThanOrEqualToThreshold"
  evaluation_periods = "2"
# Definizione del nome della metrica in base alla quale avverrà il ridimensionamento (basato sulla CPU) 
  metric_name = "CPUUtilization"
# Il namespace per la metrica associata all'allarme
  namespace = "AWS/EC2"
# Dopo che l'allarme AWS Cloudwatch viene attivato, attende 60 secondi e quindi esegue il ridimensionamento automatico
  period = "60"
  statistic = "Average"
# La soglia di utilizzo della CPU è impostata al 10 percento
  threshold = "10"
  alarm_actions = [
        "${aws_autoscaling_policy.mygroup_policy.arn}"
    ]
dimensions = {
    AutoScalingGroupName = "${aws_autoscaling_group.mygroup.name}"
  }
}

4. Crea un altro file in ~/terraform-autoscaling-demo chiamato provider.tf, e popola il contenuto qui sotto. Il file provider.tf definisce fornitori come AWS, Oracle, Azure, e così via. Questo file di configurazione ti permette di collegare Terraform ai servizi cloud corretti.

Il tutorial creerà risorse nella regione us-east-1. Ma puoi trovare l’elenco delle regioni supportate da AWS.

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

5. Infine, esegui il comando tree qui sotto per verificare che tutti i file necessari siano presenti nella cartella del tuo progetto (~/terraform-autoscaling-demo).

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

Creazione del gruppo di autoscaling AWS con una configurazione Terraform

Ora che hai il file di configurazione Terraform e i file di variabili configurati correttamente, è il momento di inizializzare Terraform e creare il gruppo di autoscaling AWS.

Per creare il gruppo di autoscaling AWS, come tutte le altre configurazioni Terraform, Terraform utilizza tre comandi in sequenza (terraform init, terraform plan, e terraform apply).

1. Esegui il comando terraform init nella directory ~/terraform-autoscaling-demo. Il comando inizializza i plugin e i provider necessari per lavorare con le risorse.

terraform init

Se tutto va bene, vedrai il messaggio che indica che Terraform è stato inizializzato con successo nell’output, come mostrato di seguito.

Initializing Terraform

2. Successivamente, esegui il comando terraform plan per assicurarti che la sintassi dei file di configurazione sia corretta e ti fornisca una descrizione delle risorse che verranno predisposte nella tua infrastruttura.

terraform plan

Se ha successo, dovresti vedere un messaggio che mostra il Piano come quello sotto.

Executing the Terraform Plan

3. Infine, esegui il comando terraform apply per rimuovere le protezioni e invocare Terraform per creare il gruppo di AutoScaling AWS.

Il comando dice a Terraform di leggere ogni configurazione (*.tf) nella directory corrente per compilare uno stato inviato ad AWS. Terraform quindi costruisce il gruppo di Autoscaling AWS e altri componenti.

Non ci sono costi aggiuntivi per AWS Auto Scaling. Paghi solo per le risorse AWS necessarie per eseguire le tue applicazioni.

Applying the Terraform Configuration to Build Autoscaling Group

Verifica del Gruppo di Autoscaling AWS nel Cloud AWS

A questo punto, dovresti aver creato il gruppo di Autoscaling AWS e i componenti correlati con Terraform. Ma come fai a sapere che esistono nel tuo cloud AWS? Verifica il gruppo di Autoscaling controllando manualmente nella Console di Gestione AWS.

1. Apri il tuo browser web preferito e accedi alla Console di Gestione AWS.

2. Nella pagina iniziale della console, fai clic sulla casella di ricerca, cerca e fai clic su ‘EC2’ per accedere al dashboard di EC2.

Fai clic sulla voce di menu Gruppo di ridimensionamento automatico AWS nel dashboard di EC2 per gestire i tuoi gruppi di ridimensionamento automatico.

Il Numero desiderato di istanze AWS EC2 sarà lanciato nell’AWS Cloud nel dashboard di EC2 con il seguente ridimensionamento automatico.

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

3. Infine, fai clic su Configurazione di avvio di AWS Auto Scaling nel dashboard di EC2. Vedrai la configurazione di avvio del tuo ridimensionamento automatico (web_config) come mostrato di seguito.

Verifying the AWS Autoscaling Launch Configuration in AWS Cloud

Ridimensiona automaticamente l’istanza EC2 con il test di carico

Ora che hai verificato che il gruppo/politica di ridimensionamento automatico e i componenti correlati siano configurati correttamente, è il momento di verificare se le funzionalità di ridimensionamento automatico funzionano. Come? Aggiungendo carico all’istanza lanciata di recente con il gruppo di ridimensionamento automatico.

1. Apri l’istanza AWS EC2 lanciata con il gruppo di ridimensionamento automatico utilizzando un client SSH.

2. Successivamente, avvia il terminale e esegui il comando sottostante per installare lo strumento di stress da carico (stress-ng). Lo strumento di stress ti consente di definire e generare stress sulla macchina Ubuntu.

Puoi anche trovare altri strumenti di stress da carico disponibili sul mercato.

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

3. Esegui il comando stress-ng sottostante per generare il carico di stress sull’istanza.

Il comando sottostante contiene i seguenti flag:

  • --cpu – Indica il numero di core su cui verrà generato il carico.
  • -v – Abilita la modalità dettagliata.
  • --timeout – Specifica il tempo per cui deve essere generato il carico.
sudo stress-ng --cpu 4 -v --timeout 3000s
Generating the load on AWS EC2 instance.

4. Ora esegui il comando top appena generi il carico per mostrare i processi di Linux.

top

Di seguito, puoi vedere che la CPU aumenta dopo la generazione del carico nell’istanza.

Executing the top command to verify the CPU consumption

5. Vai al servizio CloudWatch di AWS Cloud. Noterai che viene generato un allarme quando la CPU supera il 10%. L’allarme notifica al gruppo di ridimensionamento automatico di aumentare il numero di istanze da una a due, come specificato nel gruppo di ridimensionamento automatico.

Viewing the Alarm Generated in the AWS CloudWatch Service

6. Infine, vai alle istanze nel pannello di controllo EC2 per verificare le istanze di AWS EC2.

Vedrai che viene lanciata un’altra istanza, confermando la corretta configurazione del gruppo di ridimensionamento automatico di AWS e dei componenti.

Verifying the AWS EC2 instances in the EC2 dashboard

Puoi anche verificare le attività di ridimensionamento automatico nel gruppo di ridimensionamento automatico di AWS, come mostrato di seguito.

Verifying the AWS AutoScale group activities

Conclusioni

In questo tutorial, hai imparato come utilizzare Terraform per distribuire un gruppo di ridimensionamento automatico di AWS e i suoi componenti. Creare un’applicazione a ridimensionamento automatico con il gruppo di ridimensionamento automatico di AWS consente di scalare quando necessario ed è un’operazione veloce.

Ora, con questa nuova conoscenza, impazzisci e implementa Auto Scaling con altri servizi AWS senza preoccuparti del carico sui server!

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