Creare un Resource Group in Azure con Terraform

Quando gestite infrastrutture cloud, la capacita’ di automatizzare la creazione e la gestione delle risorse diventa fondamentale. In questo contesto, Infrastructure as Code (IaC) rappresenta un paradigma che consente di definire, distribuire e gestire l’infrastruttura attraverso file di configurazione, eliminando la necessita’ di operazioni manuali ripetitive e soggette a errori.

Terraform, sviluppato da HashiCorp, rappresenta una soluzione elegante e agnostica che vi permette di dichiarare lo stato desiderato della vostra infrastruttura, lasciando al tool il compito di raggiungere quello stato. A differenza di altri strumenti specifici per un singolo cloud provider, Terraform vi offre la flessibilita’ di gestire risorse su Azure, AWS, GCP e molti altri provider con la stessa sintassi.

L’approccio che seguiremo vi insegnera’ non solo come raggiungere l’obiettivo, ma anche come strutturare il vostro progetto Terraform in modo professionale, separando variabili, provider e risorse in file distinti per garantire manutenibilita’ e scalabilita’.

Cosa imparerete da questa guida

  • Installare e configurare Terraform sul vostro ambiente
  • Autenticarvi con Azure e impostare il provider Terraform
  • Scrivere la configurazione Terraform per un Resource Group
  • Applicare la configurazione e verificare la creazione della risorsa
  • Gestire lo stato Terraform e applicare aggiornamenti
  • Distruggere le risorse e pulire l’infrastruttura

Prerequisiti

Prima di iniziare, assicuratevi di avere a disposizione i seguenti elementi:

  • Un account Microsoft Azure attivo (con almeno accesso di livello Owner o Contributor a una subscription)
  • Terraform installato sul vostro ambiente locale (versione 1.5 o superiore)
  • L’Azure CLI installata per facilitare l’autenticazione
  • Un editor di testo o un IDE (consigliati VS Code con l’estensione Terraform)
  • Conoscenza di base di Linux/macOS o PowerShell (per Windows)

Passo 1: Installazione di Terraform

Su macOS

Se utilizzate Homebrew, il metodo piu’ semplice e’:

Su Windows

Se utilizzate Chocolatey:

Su Linux

Scaricate il binario dal sito ufficiale o utilizzate il package manager della vostra distribuzione.

Verifica dell’installazione

Dopo l’installazione, verificate che Terraform sia correttamente installato:

Figura 1 – Output del comando terraform version su Windows

Se il comando stampa la versione di Terraform, siete pronti a procedere.

Passo 2: Configurazione dell’autenticazione con Azure

Login con Azure CLI

Per autenticarvi con Azure, eseguite il comando:

Questo comando vi aprira’ un browser per l’autenticazione Microsoft.

Verifica delle subscription

Per visualizzare le subscription disponibili:

Passo 3: Strutturazione del progetto Terraform

Create una directory per il vostro progetto:

All’interno di questa directory, creerete i seguenti file:

  • provider.tf – definisce il provider Azure e la versione di Terraform
  • variables.tf – definisce le variabili di input
  • main.tf – contiene la risorsa principale e i moduli
  • outputs.tf – definisce i valori di output
  • terraform.tfvars – fornisce i valori delle variabili

Passo 4: Creazione dei file Terraform

File: provider.tf

Questo file configura il provider Azure:

Figura 2 – File provider.tf con la configurazione del provider Azure e AZAPI

Notate come il file definisce sia il provider azurerm che azapi. Quest’ultimo e’ un provider piu’ potente per accedere direttamente alle API REST di Azure, utile quando le risorse non sono ancora completamente supportate dal provider standard.

File: variables.tf

Qui definiamo tutte le variabili di input:

Figura 3 – File variables.tf con le variabili di localizzazione, ambiente e tag globali

Notate come le variabili sono ben strutturate con descrizioni, tipi e valori di default. La variabile global_tags permette di applicare tag coerenti a tutte le risorse create.

File: main.tf

Questo file contiene la logica di creazione delle risorse con i moduli:

Figura 4 – File main.tf con la definizione dei locals e dei moduli

In questo file vedete come vengono utilizzati i moduli naming e resource_group per incapsulare la logica di creazione, rendendo il codice piu’ modulare e riutilizzabile.

File: outputs.tf

Definiamo gli output che vogliamo visualizzare dopo il deployment:

Figura 5 – File outputs.tf con gli output del Resource Group

Gli output sono fondamentali per ottenere informazioni sulle risorse create. In questo caso, esponiamo l’ID, il nome e la location del Resource Group.

File: terraform.tfvars

Questo file contiene i valori specifici per il vostro ambiente:

Figura 6 – File terraform.tfvars con i valori delle variabili (subscription offuscato)

ATTENZIONE: Non versionate questo file se contiene dati sensibili come l’ID della subscription. Aggiungete terraform.tfvars al vostro .gitignore.

Passo 5: Inizializzazione del progetto Terraform

Inizializzate il progetto con:

Terraform scarichera’ i provider e i moduli necessari.

Figura 7 – Output del comando terraform init con l’installazione dei provider

Come vedete nell’immagine, Terraform scarica il provider HashiCorp per Azure, i moduli necessari e crea il file .terraform.lock.hcl per il lock delle versioni.

Passo 6: Pianificazione della configurazione

Visualizzate il piano di esecuzione con:

Figura 8 – Output di terraform plan mostrando le risorse da creare (dati sensibili offuscati)

Il piano mostra esattamente cosa Terraform fara’. Nel nostro caso, creera’ 1 risorsa (il Resource Group). I simboli “+” indicano risorse che verranno create.

Passo 7: Applicazione della configurazione

Applicate la configurazione con:

Oppure senza –auto-approve se volete confermare manualmente:

Figura 9 – Output di terraform apply mostrando il completamento (dati sensibili offuscati)

Terraform ha creato con successo la risorsa. L’output finale mostra i valori degli output definiti e la creazione e’ completata.

COMPLETATO: Il Resource Group e’ stato creato con successo tramite Terraform.

Passo 8: Verifica e gestione dello stato

Per visualizzare gli output creati:

Figura 10 – Output di terraform output mostrando gli output (dati sensibili offuscati)

Gli output mostrano l’ID del Resource Group, la sua posizione (italynorth) e il nome (rg-hub).

Verifica nel portale Azure

Potete accedere al portale Azure per verificare visualmente che il Resource Group sia stato creato correttamente:

Figura 11 – Resource Group creato nel portale Azure (dati sensibili offuscati)

Come vedete nel portale, il Resource Group rg-hub e’ stato creato correttamente nella regione Italy North con tutti i tag definiti nella configurazione Terraform.

COMPLETATO: La verifica nel portale Azure conferma che il deployment e’ avvenuto correttamente.

Passo 9: Modifica e aggiornamento della configurazione

Se volete modificare la configurazione (ad esempio, cambiare la regione o aggiungere tag), modificate i file terraform.tfvars o main.tf e rieseguite:

Seguite da:

Terraform vi mostrera’ esattamente quali cambiamenti verranno apportati prima di procedere.

Passo 10: Pulizia e distruzione delle risorse

Quando non avrete piu’ bisogno delle risorse:

Figura 12 – Output di terraform destroy mostrando la distruzione completa (dati sensibili offuscati)

Terraform vi chiedera’ di confermare digitando “yes”. Una volta confermato, eliminera’ il Resource Group da Azure insieme a tutte le risorse contenute.

ATTENZIONE: Il comando terraform destroy elimina TUTTE le risorse gestite da Terraform. Utilizzatelo con cautela, soprattutto in ambienti di produzione.

Best Practices per Terraform e Azure

Versionamento con Git

NOTA: La gestione del versionamento con Git e la configurazione di .gitignore appropriato saranno trattati in dettaglio in una guida separata. Per ora, assicuratevi di non versionare i file contenenti dati sensibili.

State Management remoto

NOTA: La configurazione dello state remoto in Azure Storage Account o Terraform Cloud, essenziale per ambienti di team e produzione, sara’ oggetto di una guida dedicata.

Modularita’ e riutilizzabilita’

Come vedete nel main.tf, l’utilizzo di moduli rende il codice piu’ leggibile e riutilizzabile. Create moduli separati per ogni tipo di risorsa e riutilizzateli tra diversi progetti.

Naming Convention

Adottate una convenzione di naming coerente e significativa:

  • rg-prod-eu-main – Resource Group di produzione in Europa
  • rg-dev-eastus – Resource Group di sviluppo negli USA
  • rg-stg-weu-test – Resource Group di staging in West Europe

Tag e Metadati

Taggate sempre le vostre risorse come vedete nell’esempio. I tag devono includere:

  • Environment – dev, staging, prod
  • ManagedBy – Terraform, Azure Policies, ecc.
  • Project – nome del progetto
  • CostCenter – per l’allocazione dei costi
  • Owner – responsabile della risorsa

Validazione e Testing

Prima di deployare in produzione:

  • Utilizzate terraform validate per verificare la sintassi
  • Eseguite terraform plan e revisionatelo attentamente
  • Testate sempre in ambienti non produttivi (dev/staging) prima di andare in produzione
  • Utilizzate variabili diverse per ambienti diversi

Documentazione

Documentate sempre le vostre variabili con descrizioni chiare. Come vedete nei file di esempio, ogni variabile ha una descrizione che ne chiarisce lo scopo, rendendo il progetto auto-documentante.

Conclusioni

In questa guida abbiamo coperto i fondamenti della creazione di un Resource Group in Azure utilizzando Terraform come strumento di Infrastructure as Code. Abbiamo visto come strutturare un progetto in modo professionale, separando provider, variabili, risorse e output in file distinti.

I vantaggi di Terraform sono significativi: versionamento del codice, riproducibilita’, collaborazione in team e automazione completa del ciclo di vita delle risorse cloud.

Ricordate di testare sempre le vostre configurazioni in ambienti non produttivi, mantenete controllo dello stato, documentate le variabili e seguite le naming convention per garantire ordine e tracciabilita’.