Dynamische blokken voor geneste configuratie
Genereer programmatisch herhaalde geneste configuratieblokken met dynamic blocks, zodat copy-paste voor bijvoorbeeld securitygroupregels niet meer nodig is.
Dynamische blokken voor geneste configuratie is een gratis Terraform als Infrastructure as Code-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Terraform als Infrastructure as Code. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Terraform als Infrastructure as Code bevat in totaal 4 lessen.
Het probleem met herhaling
Sommige resources bevatten herhaalde geneste blokken, zoals meerdere ingress-regels in een securitygroep. Elke regel met de hand schrijven is omslachtig en maakt het moeilijk om DRY te blijven. Met dynamische blokken genereer je ze vanuit een verzameling.
Eerst statische blokken
Dit is de handmatige versie: drie vrijwel identieke ingress-blokken. Stel je voor dat je er een dozijn moet onderhouden.
resource "aws_security_group" "web" {
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}Anatomie van een dynamisch blok
Een dynamic-blok heeft een label dat overeenkomt met de naam van het geneste blok, een verzameling voor for_each en een content-blok dat elke gegenereerde instantie beschrijft.
dynamic "ingress" {
for_each = var.rules
content {
from_port = ingress.value.port
to_port = ingress.value.port
protocol = "tcp"
cidr_blocks = ingress.value.cidrs
}
}Het iteratorobject
Verwijs binnen content naar het huidige element via een object dat naar het bloklabel is genoemd. Het stelt .value (het element) en .key (de mapsleutel of lijstindex) beschikbaar.
De invoervariabele definiëren
Stuur het dynamische blok aan met een variabele met een type. Een lijst met objecten houdt elke regel zelfbeschrijvend.
variable "rules" {
type = list(object({
port = number
cidrs = list(string)
}))
}Alles samenbrengen
De resource blijft nu compact, ongeacht hoeveel regels je doorgeeft.
resource "aws_security_group" "web" {
name = "web-sg"
dynamic "ingress" {
for_each = var.rules
content {
from_port = ingress.value.port
to_port = ingress.value.port
protocol = "tcp"
cidr_blocks = ingress.value.cidrs
}
}
}De iterator hernoemen
Met het argument iterator kun je de iteratievariabele een andere naam geven. Dat is nuttig bij geneste dynamische blokken om verwarring te voorkomen.
dynamic "ingress" {
for_each = var.rules
iterator = rule
content {
from_port = rule.value.port
to_port = rule.value.port
}
}Blokken voorwaardelijk overslaan
Geef een lege verzameling door om nul blokken te genereren. Met een ternaire expressie op for_each maak je een blok optioneel.
dynamic "logging" {
for_each = var.enable_logging ? [1] : []
content {
target_bucket = var.log_bucket
}
}Geneste dynamische blokken
Dynamische blokken kunnen worden genest. Gebruik verschillende iterators, zodat het binnenste blok zonder dubbelzinnigheid naar beide niveaus kan verwijzen.
dynamic "setting" {
for_each = var.settings
iterator = s
content {
namespace = s.value.namespace
name = s.value.name
value = s.value.value
}
}Wanneer je geen dynamische blokken gebruikt
Dynamische blokken voegen indirectie toe en kunnen de leesbaarheid verminderen. Als je maar één of twee statische blokken hebt, laat je ze letterlijk staan. Gebruik dynamische blokken wanneer het aantal door gegevens wordt bepaald.
Het resultaat inspecteren
Voer een plan uit om te controleren of de gegenereerde blokken aan de verwachtingen voldoen. Terraform vouwt elk element van de verzameling uit tot een concreet genest blok.
terraform planKorte controle
Toets je kennis van dynamische blokken.
Samenvatting: DRY-geneste configuratie
Met dynamische blokken kun je geneste configuratie vanuit gegevens genereren:
for_eachstuurt de iteratie aan;contentdefinieert elk blok.- De iterator stelt
.valueen.keybeschikbaar. - Lege verzamelingen maken blokken optioneel.
- Gebruik ze met mate om configuraties leesbaar te houden.
Leer Terraform als Infrastructure as Code 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
- 12
- Lessen
- 48
Veelgestelde vragen
Is de les “Dynamische blokken voor geneste configuratie” gratis?
Ja — de volledige tekst van “Dynamische blokken voor geneste configuratie” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Terraform als Infrastructure as Code wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Terraform als Infrastructure as Code bevat in totaal 4 lessen.
Wat leer ik in “Dynamische blokken voor geneste configuratie”?
Genereer programmatisch herhaalde geneste configuratieblokken met dynamic blocks, zodat copy-paste voor bijvoorbeeld securitygroupregels niet meer nodig is. Je oefent met Terraform als Infrastructure as Code 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 Terraform als Infrastructure as Code te beginnen?
Ervaring vooraf is niet nodig. Terraform als Infrastructure as Code 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 4 van 4.
Hoe lang duurt de les “Dynamische blokken voor geneste configuratie”?
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 Terraform als Infrastructure as Code?
Ja. Elke les over Terraform als Infrastructure as Code 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