Leer hoe je Terraform Autoscaling Groups snel implementeert

Ben je het zat om de belasting van je AWS-instanties en het verkeer dat ze ontvangen te monitoren? Waarom automatiseer je niet alles door Terraform Autoscaling Groepen in te zetten? Autoscaling stelt sommige servers in staat om te slapen tijdens lage belasting en voegt meer servers toe tijdens hoge belasting, wat kosten bespaart voor bedrijven op elektriciteit.

In deze tutorial leer je hoe je een Terraform-configuratie kunt bouwen en uitvoeren om Autoscaling Groepen te maken en deze in te zetten met Terraform.

Lees verder en bereik nul downtime op je instanties!

Vereisten

Deze post zal een stapsgewijze tutorial zijn. Als je wilt volgen, zorg er dan voor dat je het volgende hebt:

  • Een Amazon Web Service (AWS) account.
  • 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 – Deze tutorial gebruikt Terraform v1.1.5 op Ubuntu 20.04 LTS, maar elk besturingssysteem met Terraform zou moeten werken.

Het bouwen van de Terraform-configuratie voor een AWS Autoscaling Groep

Voordat u Terraform-opdrachten uitvoert om de infrastructuur op te bouwen en te implementeren, moet u de Terraform-configuratiebestanden maken. U zult een Terraform-configuratie bouwen om een AWS Autoscaling-groep in uw AWS-account te maken.

1. Log in op uw machine met behulp van uw favoriete SSH-client.

2. Maak vervolgens een map met de naam ~/terraform-autoscaling-demo, en verander vervolgens (cd) de werkmap naar die map. Deze map bevat alle configuratiebestanden waar u aan zult werken in deze tutorial.

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

3. Open uw favoriete code-editor, kopieer/plak de volgende configuratie en sla het bestand op als main.tf in de ~/terraform-autoscaling-demo-map. Dit main.tf-bestand is de Terraform-configuratie voor de Autoscaling-groep.

De onderstaande code maakt een autoscaling-lancering configuratie (web_config) aan en voorziet in een Autoscaling-groep (autoscalegroup). De Autoscaling-groep wordt ook geleverd met zijn componenten (aws_autoscaling_schedule en aws_autoscaling_policy).

# Het maken van de autoscaling startconfiguratie die AWS EC2-informatie bevat
resource "aws_launch_configuration" "aws_autoscale_conf" {
# Definiëren van de naam van de autoscaling startconfiguratie
  name          = "web_config"
# Definiëren van de image ID van AWS EC2-instantie
  image_id      = "ami-04505e74c0741db8d"
# Definiëren van het instantietype van de AWS EC2-instantie
  instance_type = "t2.micro"
# Definiëren van de sleutel die zal worden gebruikt om toegang te krijgen tot de AWS EC2-instantie
  key_name = "automateinfra"
}

# Het maken van de autoscaling-groep binnen de beschikbaarheidszone us-east-1a
resource "aws_autoscaling_group" "mygroup" {
# Definiëren van de beschikbaarheidszone waarin AWS EC2-instantie zal worden gestart
  availability_zones        = ["us-east-1a"]
# Specificeren van de naam van de autoscaling-groep
  name                      = "autoscalegroup"
# Definiëren van het maximale aantal AWS EC2-instanties tijdens het schalen
  max_size                  = 2
# Definiëren van het minimale aantal AWS EC2-instanties tijdens het schalen
  min_size                  = 1
# De genadetijd is de tijd nadat AWS EC2-instantie in dienst komt voordat de gezondheid wordt gecontroleerd.
  health_check_grace_period = 30
# Het schalen zal plaatsvinden op basis van de gezondheid van AWS EC2-instantie gedefinieerd in AWS Cloudwatch Alarm
  health_check_type         = "EC2"
# force_delete verwijdert de Auto Scaling-groep zonder te wachten tot alle instanties in de pool zijn beëindigd
  force_delete              = true
# Definiëren van het beëindigingsbeleid waarbij de oudste instantie als eerste wordt vervangen
  termination_policies      = ["OldestInstance"]
# De schaalgroep is afhankelijk van de autoscaling startconfiguratie vanwege AWS EC2-instantieconfiguraties
  launch_configuration      = aws_launch_configuration.aws_autoscale_conf.name
}
# Het maken van het autoscaling schema van de autoscaling-groep

resource "aws_autoscaling_schedule" "mygroup_schedule" {
  scheduled_action_name  = "autoscalegroup_action"
# De minimale grootte voor de Auto Scaling-groep
  min_size               = 1
# De maximale grootte voor de Auto Scaling-groep
  max_size               = 2
# Desired_capacity is het aantal draaiende EC2-instanties in de Autoscaling-groep
  desired_capacity       = 1
# Definiëren van de starttijd van autoscaling als u denkt dat het verkeer op dit moment kan pieken.
  start_time             = "2022-02-09T18:00:00Z"
  autoscaling_group_name = aws_autoscaling_group.mygroup.name
}

# Het maken van het autoscaling-beleid van de autoscaling-groep
resource "aws_autoscaling_policy" "mygroup_policy" {
  name                   = "autoscalegroup_policy"
# Het aantal instanties waarmee wordt geschaald.
  scaling_adjustment     = 2
  adjustment_type        = "ChangeInCapacity"
# De hoeveelheid tijd (seconden) nadat een schaling is voltooid en de volgende schaling begint.
  cooldown               = 300
  autoscaling_group_name = aws_autoscaling_group.mygroup.name
}
# Het maken van de AWS Cloudwatch Alarm dat de AWS EC2-instantie automatisch schaalt op basis van CPU-gebruik.
resource "aws_cloudwatch_metric_alarm" "web_cpu_alarm_up" {
# Definiëren van de naam van AWS Cloudwatch-alarm
  alarm_name = "web_cpu_alarm_up"
  comparison_operator = "GreaterThanOrEqualToThreshold"
  evaluation_periods = "2"
# Definiëren van de metrieknaam volgens welke schalen zal plaatsvinden (op basis van CPU)
  metric_name = "CPUUtilization"
# De namespace voor de metriek die aan het alarm is gekoppeld
  namespace = "AWS/EC2"
# Nadat AWS Cloudwatch Alarm is geactiveerd, wacht het 60 seconden en schaalt het vervolgens automatisch
  period = "60"
  statistic = "Average"
# CPU-gebruiksdrempel is ingesteld op 10 procent
  threshold = "10"
  alarm_actions = [
        "${aws_autoscaling_policy.mygroup_policy.arn}"
    ]
dimensions = {
    AutoScalingGroupName = "${aws_autoscaling_group.mygroup.name}"
  }
}

4. Creëer een ander bestand in ~/terraform-autoscaling-demo genaamd provider.tf, en vul de inhoud hieronder in. Het provider.tf bestand definieert providers zoals AWS, Oracle, Azure, enzovoort. Dit configuratiebestand stelt je in staat om Terraform te verbinden met de juiste cloudservices.

De tutorial zal bronnen creëren in de us-east-1 regio. Maar je kunt de lijst van regio’s die AWS ondersteunt vinden.

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

5. Tot slot, voer de tree opdracht hieronder uit om te verifiëren dat alle vereiste bestanden aanwezig zijn in je projectmap (~/terraform-autoscaling-demo).

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

Het creëren van de AWS Autoscaling-groep met een Terraform-configuratie

Nu je het Terraform-configuratiebestand en variabelenbestanden correct hebt ingesteld, is het tijd om Terraform te initialiseren en de AWS Autoscaling-groep te maken.

Om de AWS Autoscaling-groep te provisionen, gebruikt Terraform, zoals alle andere Terraform-configuraties, drie opdrachten in sequentie (terraform init, terraform plan en terraform apply).

1. Voer het terraform init-commando uit in de ~/terraform-autoscaling-demo-directory. Het commando initialiseert de plug-ins en providers die nodig zijn om met resources te werken.

terraform init

Als alles goed gaat, zie je het bericht dat Terraform succesvol is geïnitialiseerd in de output, zoals hieronder getoond.

Initializing Terraform

2. Voer vervolgens het terraform plan-commando uit om ervoor te zorgen dat de syntaxis van je configuratiebestanden correct is en je een blauwdruk van resources geeft die in je infrastructuur zullen worden voorzien.

terraform plan

Als het succesvol is, zou je een bericht moeten zien dat het Plan weergeeft zoals hieronder getoond.

Executing the Terraform Plan

3. Voer tot slot het terraform apply-commando uit om de trainingswielen te verwijderen en Terraform op te roepen om de AWS AutoScaling-groep te maken.

Het commando vertelt Terraform om elke configuratie (*.tf) in de huidige directory te lezen om een status samen te stellen die naar AWS wordt verzonden. Vervolgens bouwt Terraform de AWS Autoscaling-groep en andere componenten.

Er zijn geen extra kosten voor AWS Auto Scaling. Je betaalt alleen voor de AWS-resources die nodig zijn om je toepassingen uit te voeren.

Applying the Terraform Configuration to Build Autoscaling Group

Verificatie van de AWS Auto Scaling-groep in AWS Cloud

Op dit moment zou je met Terraform de AWS Auto Scaling-groep en gerelateerde componenten moeten hebben gemaakt. Maar hoe weet je dat ze bestaan in je AWS-cloud? Controleer de Auto Scaling-groep door handmatig in te loggen op de AWS Management Console.

1. Open je favoriete webbrowser en log in op de AWS Management Console.

2. Op de startpagina van de console, klik op het zoekvak, zoek naar en klik op ‘EC2’ om toegang te krijgen tot het EC2-dashboard.

Klik op het menu-item AWS Auto Scaling groep in het EC2-dashboard om uw Auto Scaling groepen te beheren.

Het gewenste aantal AWS EC2-instanties wordt gelanceerd in de AWS Cloud in het EC2-dashboard met de onderstaande Autoscaling.

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

3. Klik ten slotte op AWS Auto Scaling Launch Configuration in het EC2-dashboard. U ziet uw autoscaling lancering configuratie (web_config) zoals hieronder weergegeven.

Verifying the AWS Autoscaling Launch Configuration in AWS Cloud

Autoscaling van de EC2-instantie met Load Testing

Nu u hebt geverifieerd dat de Autoscaling groep/policy en gerelateerde componenten correct zijn ingesteld, is het tijd om te testen of de Auto Scaling functies werken. Hoe? Door belasting toe te voegen aan de zojuist gelanceerde instantie met de AutoScaling groep.

1. Open de AWS EC2-instantie die is gelanceerd met de Autoscaling groep met behulp van een SSH-client.

2. Start vervolgens de terminal en voer de onderstaande opdracht uit om de installeren belastingstesttool (stress-ng) te installeren. De stress-tool stelt u in staat om stress te definiëren en te genereren op de Ubuntu-machine.

U kunt ook andere belastingstesttools vinden die beschikbaar zijn op de markt.

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

3. Voer de stress-ng opdracht hieronder uit om de belasting op de instantie te genereren.

De onderstaande opdracht bevat de volgende vlaggen:

  • --cpu – Geeft het aantal cores aan waarop belasting wordt gegenereerd.
  • -v – Schakelt de uitgebreide modus in.
  • --timeout – Geeft de tijd aan waarvoor belasting moet worden gegenereerd.
sudo stress-ng --cpu 4 -v --timeout 3000s
Generating the load on AWS EC2 instance.

4. Voer nu het top commando hieronder uit zodra je de belasting hebt gegenereerd om de Linux-processen weer te geven.

top

Hieronder zie je dat de CPU omhoog schiet nadat de belasting naar de instantie is gegenereerd.

Executing the top command to verify the CPU consumption

5. Ga naar de AWS CloudWatch-service op AWS Cloud. Je zult merken dat er een alarm wordt gegenereerd omdat de CPU de (10%) heeft overschreden. Het alarm heeft de autoscaling-groep op de hoogte gebracht om het aantal instanties te schalen van één naar twee, zoals gespecificeerd in de autoscaling-groep.

Viewing the Alarm Generated in the AWS CloudWatch Service

6. Spring ten slotte naar je Instanties in het EC2-dashboard om de AWS EC2-instanties te verifiëren.

Je zult zien dat er een extra instantie is gelanceerd, wat de succesvolle configuratie van de AWS Autoscaling-groep en componenten bevestigt.

Verifying the AWS EC2 instances in the EC2 dashboard

Je kunt ook de autoscaling-activiteiten verifiëren in de AWS AutoScale-groepactiviteiten, zoals hieronder getoond.

Verifying the AWS AutoScale group activities

Conclusie

In deze tutorial heb je geleerd hoe je Terraform kunt gebruiken om een AWS Autoscaling-groep en de bijbehorende componenten te implementeren. Het bouwen van een autoscaling-toepassing met AWS Autoscaling-groep stelt je in staat om te schalen wanneer dat nodig is en is een snelle taak.

Nu, met deze nieuwe kennis, ga helemaal los en implementeer Auto Scaling met andere AWS-services zonder je zorgen te maken over de belasting op de servers!

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