0Pricing
Terraform Infrastructure as Code · Lezione

Utilizzo dei cicli con `for_each` e `count`

Impari a eseguire il provisioning di più istanze di una risorsa o di un modulo utilizzando `count` e `for_each` per gestire collezioni e mappe in modo efficiente.

Utilizzo dei cicli con `for_each` e `count` è una lezione Terraform Infrastructure as Code gratuita su CoddyKit. Questa è la lezione 1 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.

Introduzione ai cicli

Quando gestisce l'infrastruttura con Terraform, spesso deve creare più risorse simili. Immagini di dover creare 10 server web o 5 istanze di database. Scrivere ripetutamente lo stesso blocco di codice sarebbe noioso e soggetto a errori.

Questa lezione introduce due potenti funzionalità di Terraform: count e for_each. Queste consentono di effettuare il provisioning di più risorse in modo efficiente, mantenendo le configurazioni ordinate e scalabili.

Perché usare `count` e `for_each`?

L'uso di cicli come count e for_each offre vantaggi significativi:

  • Riduzione delle duplicazioni: scrivere il codice dell'infrastruttura una sola volta e riutilizzarlo.
  • Maggiore leggibilità: le configurazioni diventano molto più ordinate e facili da comprendere.
  • Scalabilità: modificare facilmente il numero di risorse cambiando un singolo valore o una raccolta.
  • Coerenza: garantire che tutte le risorse simili siano configurate nello stesso modo.

`count` per le ripetizioni semplici

Il meta-argomento count è ideale quando è necessario creare più istanze quasi identiche di una risorsa o di un modulo. Si fornisce un valore intero e Terraform crea quel numero di istanze.

Ogni istanza creata con count avrà un indice, che parte da 0 e arriva fino a count - 1. È possibile accedere a questo indice tramite count.index.

Esempio: più istanze EC2 con `count`

Effettuiamo il provisioning di tre istanze AWS EC2 identiche. Noti come count.index viene utilizzato per assegnare a ogni server un nome univoco.

provider "aws" {
  region = "us-east-1"
}

resource "aws_instance" "web_server" {
  count         = 3
  ami           = "ami-053b0dcd10dcf2f56" # Ubuntu Server 20.04 LTS
  instance_type = "t2.micro"
  tags = {
    Name = "WebServer-${count.index}"
  }
}

Comprendere `count.index`

Nell'esempio precedente, ${count.index} è stato risolto automaticamente in 0, 1 e 2 per ciascuna istanza. Ciò consente di creare identificatori univoci o modificare le proprietà di ogni istanza.

Senza count.index, tutti e tre i server avrebbero esattamente lo stesso tag «Name», causando potenzialmente confusione o problemi in AWS.

Introduzione a `for_each`

Sebbene count sia ottimo per le ripetizioni semplici, for_each offre maggiore flessibilità. Itera su un set di stringhe o su una mappa di stringhe, creando un'istanza per ogni elemento.

for_each è ideale quando è necessario gestire risorse con configurazioni distinte o quando il numero di risorse è determinato da una raccolta non numerica, ad esempio un elenco di nomi di ambienti o una mappa di impostazioni utente.

Esempio: `for_each` con un set

Qui creiamo tre bucket S3, ciascuno denominato in base a un elemento del set for_each. Utilizziamo each.value per accedere all'elemento corrente dell'iterazione.

provider "aws" {
  region = "us-east-1"
}

resource "aws_s3_bucket" "app_buckets" {
  for_each = toset(["prod-app-data", "dev-app-logs", "test-app-assets"])
  bucket   = each.value
  acl      = "private"
  tags = {
    Environment = split("-", each.value)[0]
  }
}

Esempio: `for_each` con una mappa

L'uso di una mappa consente di definire configurazioni più complesse e univoche per ogni risorsa. Qui creiamo bucket S3 con impostazioni di versioning diverse in base alle chiavi degli ambienti.

È possibile accedere alla chiave con each.key e al valore con each.value.

provider "aws" {
  region = "us-east-1"
}

resource "aws_s3_bucket" "configured_bucket" {
  for_each = {
    production = { name = "prod-data-bucket", versioning = true }
    development = { name = "dev-logs-bucket", versioning = false }
  }
  bucket        = each.value.name
  acl           = "private"
  versioning {
    enabled = each.value.versioning
  }
  tags = {
    Environment = each.key
  }
}

`count` o `for_each`: scegliere con criterio

Quando utilizzare l'uno o l'altro?

  • Utilizzi count: per iterazioni numeriche semplici, quando si creano risorse identiche e la quantità è l'aspetto principale. È adatto quando serve solo un indice per distinguerle.
  • Utilizzi for_each: per iterare su raccolte complesse (set o mappe), quando le risorse richiedono identificatori univoci o proprietà derivate dagli elementi della raccolta. In genere è preferibile quando ogni istanza ha un identificatore logico chiaro e univoco.

Verifica rapida: cicli

Consideri uno scenario in cui deve creare un bucket S3 per ogni team della sua organizzazione e ogni bucket deve avere una specifica policy di conservazione definita dal team.

Riepilogo: creazione efficiente delle risorse

Ottimo lavoro. Ha imparato a sfruttare count e for_each per rendere le configurazioni Terraform più dinamiche ed efficienti.

  • count serve per la ripetizione numerica semplice di risorse identiche, utilizzando count.index per distinguerle.
  • for_each serve per iterare su set o mappe, creando risorse distinte con proprietà univoche tramite each.key e each.value.

Queste strutture sono fondamentali per gestire un'infrastruttura come codice scalabile e facilmente manutenibile.

Domande Frequenti

La lezione «Utilizzo dei cicli con `for_each` e `count`» è gratuita?

Sì — il testo completo di «Utilizzo dei cicli con `for_each` e `count`» è 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 «Utilizzo dei cicli con `for_each` e `count`»?

Impari a eseguire il provisioning di più istanze di una risorsa o di un modulo utilizzando `count` e `for_each` per gestire collezioni e mappe in modo efficiente. 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 1 di 4.

Quanto tempo richiede la lezione «Utilizzo dei cicli con `for_each` e `count`»?

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