Ricerca nel sito web

Come utilizzare i loop in Terraform


L'infrastruttura di rete è fondamentale per molte organizzazioni. I vantaggi dell'utilizzo dei servizi cloud hanno indotto molte organizzazioni a trasferire i propri carichi di lavoro nel cloud. La gestione efficiente delle risorse all'interno di queste infrastrutture cloud richiede competenze (strumenti) avanzate e una buona esperienza. Oggi sono disponibili molti strumenti per automatizzare l'infrastruttura basata su cloud. Terraform è uno di questi strumenti che ha recentemente guadagnato un'enorme popolarità nel mondo DevOps.

Di cosa tratta Terraform?

Terraform è uno strumento open source sviluppato e gestito da HashiCorp. Utilizza il proprio linguaggio di configurazione Hashicorp - HCL per fornire più fornitori di servizi cloud. Fondamentalmente, Terraform confronterà la tua attuale configurazione dell'infrastruttura con lo stato desiderato e modificherà solo quelle parti dell'infrastruttura necessarie per raggiungere lo stato desiderato.

Terraform utilizza plug-in, che chiama provider, corrispondenti a diversi fornitori di servizi cloud e aziendali come AWS, Azure, vSphere ecc. Un progetto terraform è contenuto all'interno della propria directory che contiene vari file relativi al progetto. Terraform non influisce su tutte le risorse del tuo account cloud; si occupa solo dei componenti che vengono gestiti attraverso il suo piano. Utilizza i file di stato (in formato JSON) per memorizzare lo stato corrente dell'infrastruttura.

Cosa distingue Terraform?

Una delle cose interessanti che distingue Terraform dagli altri strumenti è che ti consente di dire quello che vuoi e risolverà come ottenerlo senza la necessità di preoccuparti di tutti i comandi di livello base per farlo. Un altro fatto meno noto (o forse già lo sai) è che i plug-in che si legano alle API del fornitore di servizi cloud sono attualmente progettati dal fornitore di servizi cloud stesso. Ciò significa che AWS stesso mantiene il proprio provider AWS per Terraform. Questa è una buona cosa in quanto il provider rimarrà aggiornato con lo spazio API AWS.

Cosa impareremo qui?

In questo tutorial, ti mostrerò come utilizzare i costrutti di loop in Terraform. Vedremo diversi esempi di utilizzo di alcuni costrutti di loop. Continuiamo ora con questo post.

Iniziamo…

Esistono diversi tipi di costrutti loop in terraform, ognuno ha il suo caso specifico di utilizzo:

1. parametro count: crea più copie di una risorsa o di un modulo. Un argomento di conteggio risulterà in tanti oggetti quanti sono i valori di conteggio per quella risorsa o modulo. L'argomento count accetta un numero intero.

Esiste anche un oggetto di tipo conteggio che funziona con l'argomento conteggio. Usando questo oggetto cambiamo la configurazione per istanza. Usa indice come unico attributo. Il numero di indice inizia con zero. Vedremo in seguito gli usi di ciascun caso.

Esempio di utilizzo del parametro count:

L'esempio seguente mostra la procedura di creazione di più istanze EC2 identiche:

resource "aws_instance" "web-ec2" {
  count         = 5
  ami           = “ami-xxxx”
  instance_type = “t2.micro”
}

Esempio di output:

Plan: 5 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.
Enter a value:





Il codice sopra creerà 5 istanze EC2 identiche. Nel caso in cui sia necessario creare più istanze EC2 con denominazione diversa, il codice sopra riportato verrà modificato come:

resource "aws_instance" "web-ec2" {
  count         = 5
  ami           = ami-xxxx
  instance_type = t2.micro
tags {
Name = “my-server-${count.index}”
}
}

La configurazione di cui sopra risulterà in cinque istanze EC2 denominate: my-server-0 to my-server-4.

2. Espressioni for: l'espressione for in Terraform scorre sugli elementi all'interno di un elenco, una mappa, un oggetto ecc. Ha la seguente sintassi:

[for <item or element> in <Name_of_List> : <OUTPUT>]

Qui Name_of_List è il nome dell'elenco su cui eseguire l'iterazione. 'Elemento' o 'elemento' è il nome della variabile allegata a ogni elemento nell'ELENCO di cui sopra.

Esempio di utilizzo dell'espressione for: il codice seguente stamperà la versione maiuscola degli elementi all'interno dell'elenco:

variable "demo" {
 description = "A list of items"
 type        = list(string)
 default     = ["one", "two", "three"]
}
output "upper_case" {
 value = [for name in var.demo : upper(name)]
}



3. Espressioni for_each: Terraform ha introdotto le espressioni for_each dalla versione 0.12. Usando questa espressione possiamo iterare gli elementi all'interno di un elenco, un insieme e una mappa. Possiamo usare questa espressione per creare numerose repliche di una risorsa completa o repliche di un blocco in linea all'interno di una risorsa. Il formato di base per l'espressione for_each è:

resource "<Name_of_the_Provider>_<Type_of_resource>" "<identifier>" {
 for_each = <COLLECTION(set or map)>  
[Code ...]
}

Qui specifica il provider al posto di 'Name_of_the_Provider'. 'Type_of_resource' specifica il tipo di risorsa da produrre.

Esempio di utilizzo dell'espressione for_each: l'esempio seguente mostra come creare utenti IAM utilizzando l'espressione for_each:

resource "aws_iam_user" "iam-accounts" {
  for_each = toset( ["tecofers", "HowToForge", "Demo"] )
  name     = each.key
}

La funzione toset viene utilizzata per la conversione in set. 'each.key' è una chiave di mappa relativa a un'istanza. Allo stesso modo 'each.value' è un valore di mappa relativo a un'istanza. Il codice precedente creerà tre utenti IAM menzionati all'interno dell'elenco.

Nota: i costrutti count e for_each non possono essere presenti contemporaneamente.

Avvolgendo

In questa guida, abbiamo visto diversi costrutti di loop in Terraform e come possono essere utilizzati. Nel prossimo post cercheremo di esplorare i moduli Terraform, quindi rimanete sintonizzati con HowToForge.

Riferimento: https://mediaspace.wisc.edu/media/Introduction+to+and+Managing+Infrastructure+with+Terraform+-+Brian+Hill/1_qhr9c1os