Terraform som infrastruktur som kode · Lektion

Dynamiske blokke til indlejret konfiguration

Generér gentagne indlejrede konfigurationsblokke programmatisk med dynamiske blokke, så copy-paste for eksempelvis sikkerhedsgrupperegler undgås.

Lektion 4 af 413 trin

Dynamiske blokke til indlejret konfiguration er en gratis Terraform som infrastruktur som kode-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Terraform som infrastruktur som kode, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Terraform som infrastruktur som kode-kurset indeholder 4 lektioner i alt.

Problemet med gentagelser

Nogle ressourcer indeholder gentagne indlejrede blokke, for eksempel flere ingress-regler i en security group. Det er omstændeligt at skrive hver enkelt manuelt, og det er svært at holde koden DRY. Dynamiske blokke genererer dem ud fra en samling.

Start med statiske blokke

Her er den manuelle version: tre næsten identiske ingress-blokke. Forestil dig at vedligeholde et dusin af dem.

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 blokkes opbygning

En dynamic-blok har en etiket, der matcher navnet på den indlejrede blok, en samling i for_each og en content-blok, der beskriver hver genereret instans.

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

Inde i content refererer du til det aktuelle element via et objekt, der er opkaldt efter blokkens etiket. Det eksponerer .value (elementet) og .key (kortnøglen eller listeindekset).

Definition af inputvariablen

Styr den dynamiske blok med en variabel med angivet type. En liste med objekter gør hver regel selvbeskrivende.

variable "rules" {
  type = list(object({
    port  = number
    cidrs = list(string)
  }))
}

Samling af det hele

Nu forbliver ressourcen kompakt, uanset hvor mange regler du sender ind.

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
    }
  }
}

Omdøbning af iteratoren

Argumentet iterator lader dig omdøbe iterationsvariablen. Det er nyttigt ved indlejring af dynamiske blokke, så du undgår forvirring.

dynamic "ingress" {
  for_each = var.rules
  iterator = rule
  content {
    from_port = rule.value.port
    to_port   = rule.value.port
  }
}

Betinget udeladelse af blokke

Angiv en tom samling for at producere nul blokke. En ternær operator på for_each gør en blok valgfri.

dynamic "logging" {
  for_each = var.enable_logging ? [1] : []
  content {
    target_bucket = var.log_bucket
  }
}

Indlejrede dynamiske blokke

Dynamiske blokke kan indlejres. Brug forskellige iteratorer, så den indre blok entydigt kan referere til begge niveauer.

dynamic "setting" {
  for_each = var.settings
  iterator = s
  content {
    namespace = s.value.namespace
    name      = s.value.name
    value     = s.value.value
  }
}

Hvornår dynamiske blokke ikke bør bruges

Dynamiske blokke tilføjer indirektion og kan gøre koden mindre læsbar. Hvis du kun har én eller to statiske blokke, skal du beholde dem som de er. Brug dynamiske blokke, når antallet styres af data.

Inspektion af resultatet

Kør en plan for at bekræfte, at de genererede blokke svarer til forventningerne. Terraform udvider hvert element i samlingen til en konkret indlejret blok.

terraform plan

Hurtigt tjek

Test din viden om dynamiske blokke.

Opsummering: DRY-indlejret konfiguration

Dynamiske blokke lader dig generere indlejret konfiguration ud fra data:

  • for_each styrer gentagelsen; content definerer hver blok.
  • Iteratoren eksponerer .value og .key.
  • Tomme samlinger gør blokke valgfri.
  • Brug dem med måde for at holde konfigurationer læsbare.
Gratis at komme i gang

Lær Terraform som infrastruktur som kode med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
12
Lektioner
48

Ofte stillede spørgsmål

Er lektionen “Dynamiske blokke til indlejret konfiguration” gratis?

Ja — hele teksten til “Dynamiske blokke til indlejret konfiguration” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Terraform som infrastruktur som kode-kurset, skal du opgradere til CoddyKit PRO. Terraform som infrastruktur som kode-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Dynamiske blokke til indlejret konfiguration”?

Generér gentagne indlejrede konfigurationsblokke programmatisk med dynamiske blokke, så copy-paste for eksempelvis sikkerhedsgrupperegler undgås. Du øver dig i Terraform som infrastruktur som kode med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Terraform som infrastruktur som kode?

Der kræves ingen tidligere erfaring. Terraform som infrastruktur som kode på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “Dynamiske blokke til indlejret konfiguration”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Terraform som infrastruktur som kode-lektion?

Ja. Alle Terraform som infrastruktur som kode-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Brug af løkker med `for_each` og `count`
  2. Indbyggede Terraform-funktioner
  3. Betingede udtryk og splat-udtryk
  4. Dynamiske blokke til indlejret konfiguration
← Tilbage til Terraform som infrastruktur som kode