0Pricing
DevOps Bootcamp · Lektion

Dynamische Blöcke für verschachtelte Konfiguration

Erzeugen Sie wiederholte verschachtelte Konfigurationsblöcke programmgesteuert mit dynamischen Blöcken und vermeiden Sie Copy-and-paste etwa bei Security-Group-Regeln.

Dynamische Blöcke für verschachtelte Konfiguration ist eine kostenlose DevOps Bootcamp-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des DevOps Bootcamp-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der DevOps Bootcamp-Kurs umfasst insgesamt 4 Lektionen.

Das Problem der Wiederholung

Einige Ressourcen enthalten wiederholte verschachtelte Blöcke, beispielsweise mehrere ingress-Regeln in einer Security Group. Jede Regel von Hand zu schreiben ist umfangreich und erschwert die Einhaltung des DRY-Prinzips. Dynamic Blocks erzeugen diese aus einer Collection.

Zuerst statische Blöcke

Hier ist die manuelle Variante: drei nahezu identische ingress-Blöcke. Stellen Sie sich vor, ein Dutzend davon zu pflegen.

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

Aufbau eines Dynamic Blocks

Ein dynamic-Block hat ein Label, das dem Namen des verschachtelten Blocks entspricht, eine for_each-Collection und einen content-Block, der jede erzeugte Instanz beschreibt.

dynamic "ingress" {
  for_each = var.rules
  content {
    from_port   = ingress.value.port
    to_port     = ingress.value.port
    protocol    = "tcp"
    cidr_blocks = ingress.value.cidrs
  }
}

Das Iteratorobjekt

Verweisen Sie innerhalb von content über ein nach dem Block-Label benanntes Objekt auf das aktuelle Element. Es stellt .value (das Element) und .key (den Map-Schlüssel oder Listenindex) bereit.

Die Input-Variable definieren

Steuern Sie den Dynamic Block mit einer typisierten Variable. Eine Liste von Objekten sorgt dafür, dass jede Regel selbstdokumentierend ist.

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

Alles zusammenführen

Nun bleibt die Ressource unabhängig von der Anzahl der übergebenen Regeln kompakt.

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

Den Iterator umbenennen

Mit dem Argument iterator können Sie die Iterationsvariable umbenennen. Das ist beim Verschachteln von Dynamic Blocks nützlich, um Verwechslungen zu vermeiden.

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

Blöcke bedingt überspringen

Übergeben Sie eine leere Collection, um null Blöcke zu erzeugen. Mit einem Ternär-Ausdruck für for_each lässt sich ein Block optional machen.

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

Verschachtelte Dynamic Blocks

Dynamic Blocks können verschachtelt werden. Verwenden Sie unterschiedliche Iteratoren, damit der innere Block ohne Mehrdeutigkeit auf beide Ebenen zugreifen kann.

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

Wann Dynamic Blocks nicht verwendet werden sollten

Dynamic Blocks führen eine zusätzliche Abstraktionsebene ein und können die Lesbarkeit beeinträchtigen. Wenn Sie nur einen oder zwei statische Blöcke haben, lassen Sie sie explizit stehen. Verwenden Sie Dynamic Blocks, wenn die Anzahl datenabhängig ist.

Das Ergebnis untersuchen

Führen Sie einen Plan aus, um zu bestätigen, dass die erzeugten Blöcke Ihren Erwartungen entsprechen. Terraform erweitert jedes Element der Collection zu einem konkreten verschachtelten Block.

terraform plan

Kurzer Check

Testen Sie Ihr Wissen zu Dynamic Blocks.

Zusammenfassung: DRY-Konfiguration mit verschachtelten Blöcken

Mit Dynamic Blocks können Sie verschachtelte Konfiguration aus Daten erzeugen:

  • for_each steuert die Iteration; content definiert jeden Block.
  • Der Iterator stellt .value und .key bereit.
  • Leere Collections machen Blöcke optional.
  • Verwenden Sie sie sparsam, damit Konfigurationen lesbar bleiben.

Häufig gestellte Fragen

Ist die Lektion „Dynamische Blöcke für verschachtelte Konfiguration“ kostenlos?

Ja — der vollständige Text von „Dynamische Blöcke für verschachtelte Konfiguration“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des DevOps Bootcamp-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der DevOps Bootcamp-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Dynamische Blöcke für verschachtelte Konfiguration“?

Erzeugen Sie wiederholte verschachtelte Konfigurationsblöcke programmgesteuert mit dynamischen Blöcken und vermeiden Sie Copy-and-paste etwa bei Security-Group-Regeln. Du übst DevOps Bootcamp mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um DevOps Bootcamp zu starten?

Keine Vorkenntnisse erforderlich. DevOps Bootcamp auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Dynamische Blöcke für verschachtelte Konfiguration“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser DevOps Bootcamp-Lektion Code schreiben und ausführen?

Ja. Jede DevOps Bootcamp-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Schleifen mit `for_each` und `count` verwenden
  2. Integrierte Terraform-Funktionen
  3. Bedingte Ausdrücke und Splat-Ausdrücke
  4. Dynamische Blöcke für verschachtelte Konfiguration
← Zurück zu DevOps Bootcamp