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 DevOps Bootcamp 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 DevOps Bootcamp, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso DevOps Bootcamp 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 planVerifica 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_eachcontrolla l'iterazione;contentdefinisce ogni blocco.- L'iteratore espone
.valuee.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 DevOps Bootcamp, passa a CoddyKit PRO. Il corso DevOps Bootcamp 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 DevOps Bootcamp 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 DevOps Bootcamp?
Non è richiesta alcuna esperienza precedente. DevOps Bootcamp 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 DevOps Bootcamp?
Sì. Ogni lezione DevOps Bootcamp 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
- Utilizzo dei cicli con `for_each` e `count`
- Funzioni integrate di Terraform
- Espressioni condizionali e splat
- Blocchi dinamici per configurazioni annidate