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.
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.
countis bedoeld voor eenvoudige, numerieke herhaling van identieke resources, waarbij jecount.indexgebruikt om onderscheid te maken.for_eachis bedoeld voor het doorlopen van sets of toewijzingen, waarbij je verschillende resources met unieke eigenschappen maakt met behulp vaneach.keyeneach.value.
Deze constructies zijn essentieel voor het beheren van schaalbare en onderhoudbare infrastructuur als code!
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
- Lussen gebruiken met `for_each` en `count`
- Ingebouwde Terraform-functies
- Voorwaardelijke expressies en splats
- Dynamische blokken voor geneste configuratie