Dynamiske blokker for nestet konfigurasjon
Generer gjentatte, nestede konfigurasjonsblokker programmatisk med dynamiske blokker, slik at du slipper å kopiere og lime inn regler for blant annet sikkerhetsgrupper.
Dynamiske blokker for nestet konfigurasjon er en gratis leksjon i DevOps-bootcamp på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i DevOps-bootcamp, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i DevOps-bootcamp inneholder totalt 4 leksjoner.
Problemet med gjentakelser
Noen ressurser inneholder gjentatte indleirede blokker, for eksempel flere ingress-regler i en sikkerhetsgruppe. Det er omstendelig å skrive hver enkelt manuelt, og vanskelig å holde konfigurasjonen DRY. Dynamiske blokker genererer dem fra en samling.
Statiske blokker først
Her er den manuelle versjonen: tre nesten identiske ingress-blokker. Forestill Dem å vedlikeholde et dusin av disse.
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"]
}
}En dynamisk blokks oppbygning
En dynamic-blokk har en etikett som samsvarer med navnet på den innleirede blokken, en samling i for_each og en content-blokk som beskriver hver genererte forekomst.
dynamic "ingress" {
for_each = var.rules
content {
from_port = ingress.value.port
to_port = ingress.value.port
protocol = "tcp"
cidr_blocks = ingress.value.cidrs
}
}Iteratorobjektet
Inne i content refererer De til det gjeldende elementet via et objekt som er oppkalt etter blokkens etikett. Det eksponerer .value (elementet) og .key (kartnøkkelen eller listeindeksen).
Definere inndatavariabelen
Styr den dynamiske blokken med en typet variabel. En liste med objekter gjør hver regel selvforklarende.
variable "rules" {
type = list(object({
port = number
cidrs = list(string)
}))
}Sette det sammen
Nå forblir ressursen kompakt, uansett hvor mange regler De sender inn.
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
}
}
}Endre navn på iteratoren
Argumentet iterator lar Dem gi iterasjonsvariabelen et annet navn. Dette er nyttig når dynamiske blokker nøstes, for å unngå forvirring.
dynamic "ingress" {
for_each = var.rules
iterator = rule
content {
from_port = rule.value.port
to_port = rule.value.port
}
}Hoppe over blokker betinget
Bruk en tom samling for å generere null blokker. En ternær operator på for_each gjør en blokk valgfri.
dynamic "logging" {
for_each = var.enable_logging ? [1] : []
content {
target_bucket = var.log_bucket
}
}Nestede dynamiske blokker
Dynamiske blokker kan nøstes. Bruk ulike iteratorer, slik at den indre blokken kan referere til begge nivåene uten tvetydighet.
dynamic "setting" {
for_each = var.settings
iterator = s
content {
namespace = s.value.namespace
name = s.value.name
value = s.value.value
}
}Når dynamiske blokker ikke bør brukes
Dynamiske blokker tilfører indireksjon og kan gjøre koden mindre lesbar. Hvis De bare har én eller to statiske blokker, bør De beholde dem som de er. Bruk dynamiske blokker når antallet styres av data.
Inspisere resultatet
Kjør en plan for å bekrefte at de genererte blokkene samsvarer med forventningene. Terraform utvider hvert element i samlingen til en konkret innleiret blokk.
terraform planKort sjekk
Test kunnskapene Deres om dynamiske blokker.
Oppsummering: DRY-nestet konfigurasjon
Dynamiske blokker lar Dem generere nestet konfigurasjon fra data:
for_eachstyrer iterasjonen;contentdefinerer hver blokk.- Iteratoren eksponerer
.valueog.key. - Tomme samlinger gjør blokker valgfrie.
- Bruk dem med måte for å holde konfigurasjonen lesbar.
Lær deg DevOps-bootcamp med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 142
- Leksjoner
- 568
Ofte stilte spørsmål
Er leksjonen «Dynamiske blokker for nestet konfigurasjon» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien DevOps-bootcamp, inkludert «Dynamiske blokker for nestet konfigurasjon», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i DevOps-bootcamp inneholder totalt 4 leksjoner.
Hva lærer jeg i «Dynamiske blokker for nestet konfigurasjon»?
Generer gjentatte, nestede konfigurasjonsblokker programmatisk med dynamiske blokker, slik at du slipper å kopiere og lime inn regler for blant annet sikkerhetsgrupper. Du øver på DevOps-bootcamp med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med DevOps-bootcamp?
Ingen tidligere erfaring er nødvendig. DevOps-bootcamp på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «Dynamiske blokker for nestet konfigurasjon»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne DevOps-bootcamp-leksjonen?
Ja. Alle DevOps-bootcamp-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Bruke løkker med `for_each` og `count`
- Innebygde Terraform-funksjoner
- Betingede uttrykk og splat-uttrykk
- Dynamiske blokker for nestet konfigurasjon