0Pricing
Terraform Infrastructure as Code · Lezione

Blocchi dinamici per configurazioni annidate

Generi programmaticamente blocchi di configurazione annidati e ripetuti usando i blocchi dynamic, eliminando il copia-incolla per elementi come le regole dei security group.

Blocchi dinamici per configurazioni annidate è una lezione Terraform Infrastructure as Code gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Terraform Infrastructure as Code, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Terraform Infrastructure as Code include 4 lezioni in totale.

Il problema della ripetizione

Alcune risorse contengono blocchi annidati ripetuti, come più regole ingress in un security group. Scriverle manualmente è verboso e rende difficile mantenere il codice DRY. I blocchi dinamici li generano a partire da una collection.

Prima i blocchi statici

Ecco la versione manuale: tre blocchi ingress quasi identici. Immagini di doverne mantenere una dozzina.

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

Anatomia di un blocco dinamico

Un blocco dynamic ha un'etichetta che corrisponde al nome del blocco annidato, una collection for_each e un blocco content che descrive ogni istanza generata.

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

L'oggetto iteratore

All'interno di content, faccia riferimento all'elemento corrente tramite un oggetto denominato come l'etichetta del blocco. Espone .value (l'elemento) e .key (la chiave della mappa o l'indice della lista).

Definizione della variabile di input

Alimenti il blocco dinamico con una variabile tipizzata. Una lista di oggetti rende ogni regola autoesplicativa.

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

Assemblaggio

Ora la risorsa rimane compatta indipendentemente dal numero di regole passate.

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

Ridenominazione dell'iteratore

L'argomento iterator consente di rinominare la variabile di iterazione; è utile quando si annidano blocchi dinamici, per evitare confusione.

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

Salto condizionale dei blocchi

Fornisca una collection vuota per produrre zero blocchi. Un'espressione ternaria su for_each rende opzionale un blocco.

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

Blocchi dinamici annidati

I blocchi dinamici possono essere annidati. Usi iteratori distinti, così il blocco interno può fare riferimento a entrambi i livelli senza ambiguità.

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

Quando non usare i blocchi dinamici

I blocchi dinamici aggiungono indirezione e possono compromettere la leggibilità. Se dispone solo di uno o due blocchi statici, li mantenga letterali. Scelga i blocchi dinamici quando il numero dipende dai dati.

Ispezione del risultato

Esegua un piano per verificare che i blocchi generati corrispondano alle aspettative. Terraform espande ogni elemento della collection in un blocco annidato concreto.

terraform plan

Verifica rapida

Verifichi le Sue conoscenze sui blocchi dinamici.

Riepilogo: configurazione annidata DRY

I blocchi dinamici consentono di generare configurazioni annidate a partire dai dati:

  • for_each controlla l'iterazione; content definisce ogni blocco.
  • L'iteratore espone .value e .key.
  • Le collection vuote rendono opzionali i blocchi.
  • Li usi con moderazione per mantenere leggibili le configurazioni.

Domande Frequenti

La lezione «Blocchi dinamici per configurazioni annidate» è gratuita?

Sì — il testo completo di «Blocchi dinamici per configurazioni annidate» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Terraform Infrastructure as Code, passa a CoddyKit PRO. Il corso Terraform Infrastructure as Code include 4 lezioni in totale.

Cosa imparerò in «Blocchi dinamici per configurazioni annidate»?

Generi programmaticamente blocchi di configurazione annidati e ripetuti usando i blocchi dynamic, eliminando il copia-incolla per elementi come le regole dei security group. Eserciti Terraform Infrastructure as Code con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Terraform Infrastructure as Code?

Non è richiesta alcuna esperienza precedente. Terraform Infrastructure as Code su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Blocchi dinamici per configurazioni annidate»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Terraform Infrastructure as Code?

Sì. Ogni lezione Terraform Infrastructure as Code include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Utilizzo dei cicli con `for_each` e `count`
  2. Funzioni integrate di Terraform
  3. Espressioni condizionali e splat
  4. Blocchi dinamici per configurazioni annidate
← Torna a Terraform Infrastructure as Code