DevOps-bootcamp · Les

Lussen gebruiken met `for_each` en `count`

Leer meerdere instanties van een resource of module te provisionen met `count` en `for_each`, zodat u collecties en maps efficiënt kunt verwerken.

Les 1 van 411 stappen

Lussen gebruiken met `for_each` en `count` is een gratis DevOps-bootcamp-les op CoddyKit. Dit is les 1 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject DevOps-bootcamp. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus DevOps-bootcamp bevat in totaal 4 lessen.

Inleiding tot lussen

Bij het beheren van infrastructuur met Terraform moet je vaak meerdere vergelijkbare resources maken. Stel dat je 10 webservers of 5 database-instanties nodig hebt. Het zou vervelend en foutgevoelig zijn om hetzelfde codeblok steeds opnieuw te schrijven!

In deze les maak je kennis met twee krachtige functies van Terraform: count en for_each. Hiermee kun je efficiënt meerdere resources inrichten en je configuraties overzichtelijk en schaalbaar houden.

Waarom `count` en `for_each` gebruiken?

Lussen zoals count en for_each bieden belangrijke voordelen:

  • Minder duplicatie: Schrijf infrastructuurcode één keer en hergebruik deze.
  • Betere leesbaarheid: Je configuraties worden veel overzichtelijker en gemakkelijker te begrijpen.
  • Schaalbaarheid: Pas eenvoudig het aantal resources aan door één waarde of verzameling te wijzigen.
  • Consistentie: Zorg ervoor dat alle vergelijkbare resources identiek worden geconfigureerd.

`count` voor eenvoudige herhaling

Het meta-argument count is ideaal wanneer je meerdere bijna identieke instanties van een resource of module moet maken. Je geeft een geheel getal op en Terraform maakt dat aantal instanties aan.

Elke instantie die met count wordt aangemaakt, krijgt een index die begint bij 0 en loopt tot count - 1. Je kunt deze index openen met count.index.

Voorbeeld: meerdere EC2-instanties met `count`

Laten we drie identieke AWS EC2-instanties inrichten. Let erop hoe count.index wordt gebruikt om elke server een unieke naam te geven.

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

resource "aws_instance" "web_server" {
  count         = 3
  ami           = "ami-053b0dcd10dcf2f56" # Ubuntu Server 20.04 LTS
  instance_type = "t2.micro"
  tags = {
    Name = "WebServer-${count.index}"
  }
}

`count.index` begrijpen

In het vorige voorbeeld werd ${count.index} automatisch opgelost naar 0, 1 en 2 voor elke instantie. Hiermee kun je unieke identificatiegegevens maken of eigenschappen per instantie aanpassen.

Zonder count.index zouden alle drie de servers exact dezelfde tag 'Name' hebben, wat in AWS tot verwarring of problemen kan leiden.

`for_each` introduceren

Hoewel count uitstekend is voor eenvoudige herhaling, biedt for_each meer flexibiliteit. Deze doorloopt een set tekenreeksen of een toewijzing van tekenreeksen en maakt voor elk element één instantie aan.

for_each is ideaal wanneer je resources met verschillende configuraties moet beheren of wanneer het aantal resources wordt bepaald door een niet-numerieke verzameling, bijvoorbeeld een lijst met omgevingsnamen of een toewijzing van gebruikersinstellingen.

Voorbeeld: `for_each` met een set

Hier maken we drie S3-buckets, die elk worden genoemd naar een element in onze for_each-set. We gebruiken each.value om het huidige item in de iteratie te openen.

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

resource "aws_s3_bucket" "app_buckets" {
  for_each = toset(["prod-app-data", "dev-app-logs", "test-app-assets"])
  bucket   = each.value
  acl      = "private"
  tags = {
    Environment = split("-", each.value)[0]
  }
}

Voorbeeld: `for_each` met een toewijzing

Met een toewijzing kun je complexere, unieke configuraties voor elke resource definiëren. Hier maken we S3-buckets met verschillende instellingen voor versiebeheer, gebaseerd op omgevingssleutels.

Je kunt de sleutel openen met each.key en de waarde met each.value.

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

resource "aws_s3_bucket" "configured_bucket" {
  for_each = {
    production = { name = "prod-data-bucket", versioning = true }
    development = { name = "dev-logs-bucket", versioning = false }
  }
  bucket        = each.value.name
  acl           = "private"
  versioning {
    enabled = each.value.versioning
  }
  tags = {
    Environment = each.key
  }
}

`count` versus `for_each`: verstandig kiezen

Wanneer gebruik je welke?

  • Gebruik count: Voor eenvoudige numerieke iteratie en het maken van identieke resources waarbij de hoeveelheid het belangrijkste is. Dit is geschikt wanneer je alleen een index nodig hebt om onderscheid te maken.
  • Gebruik for_each: Voor het doorlopen van complexe verzamelingen (sets of toewijzingen), wanneer resources unieke identificatiegegevens of eigenschappen nodig hebben die zijn afgeleid van de elementen in de verzameling. Dit heeft over het algemeen de voorkeur wanneer elke instantie een duidelijke, unieke logische identificatie heeft.

Korte controle: lussen

Stel dat je voor elk team in je organisatie een S3-bucket moet maken en dat elke bucket een specifiek bewaarbeleid nodig heeft dat door dat team wordt bepaald.

Samenvatting: efficiënt resources maken

Goed gedaan! Je hebt geleerd hoe je count en for_each kunt benutten om je Terraform-configuraties dynamischer en efficiënter te maken.

  • count is bedoeld voor eenvoudige, numerieke herhaling van identieke resources, waarbij je count.index gebruikt om onderscheid te maken.
  • for_each is bedoeld voor het doorlopen van sets of toewijzingen, waarbij je verschillende resources met unieke eigenschappen maakt met behulp van each.key en each.value.

Deze constructies zijn essentieel voor het beheren van schaalbare en onderhoudbare infrastructuur als code!

Gratis beginnen

Leer DevOps-bootcamp met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
142
Lessen
568

Veelgestelde vragen

Is de les “Lussen gebruiken met `for_each` en `count`” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad DevOps-bootcamp, waaronder “Lussen gebruiken met `for_each` en `count`”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus DevOps-bootcamp bevat in totaal 4 lessen.

Wat leer ik in “Lussen gebruiken met `for_each` en `count`”?

Leer meerdere instanties van een resource of module te provisionen met `count` en `for_each`, zodat u collecties en maps efficiënt kunt verwerken. Je oefent met DevOps-bootcamp door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met DevOps-bootcamp te beginnen?

Ervaring vooraf is niet nodig. DevOps-bootcamp op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.

Hoe lang duurt de les “Lussen gebruiken met `for_each` en `count`”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over DevOps-bootcamp?

Ja. Elke les over DevOps-bootcamp bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Lussen gebruiken met `for_each` en `count`
  2. Ingebouwde Terraform-functies
  3. Voorwaardelijke expressies en splats
  4. Dynamische blokken voor geneste configuratie
← Terug naar DevOps-bootcamp