Tutorial Terraform per principianti: infrastruttura come codice dal primo file ai moduli

  1. Home
  2. Blog
  3. DevOps

DevOps

Tutorial su Terraform per principianti: Infrastruttura come codice dal primo file ai moduli

Impara Terraform senza un account cloud o una fattura a sorpresa. Inizia con file locali per comprendere il piano, l’applicazione e lo stato, quindi passa a risorse, moduli e flussi di lavoro reali sul cloud sicuri per i team.

10 min di lettura
Tutorial Terraform per principianti: infrastruttura come codice dal primo file ai moduli

Punti chiave

  • Terraform crea e modifica l’infrastruttura da file di testo che puoi conservare in Git.
  • Il flusso di lavoro principale è init, plan, apply e plan che mostra i cambiamenti prima che si verifichino.
  • Il file di stato registra ciò che gestisce Terraform. Proteggilo e non impegnarlo mai su Git.
  • Utilizza i moduli per riutilizzare i modelli e lo stato remoto con blocco quando lavori in team.

Fare clic su una console cloud va bene per un server. Si interrompe quando è necessaria la stessa configurazione in fase di staging e produzione o quando qualcuno chiede chi ha modificato una regola del firewall lo scorso marzo. Questo tutorial su Terraform per principianti ti mostra un modo migliore: descrivi la tua infrastruttura in codice e lascia che uno strumento la renda reale.

La maggior parte dei tutorial inizia con un account cloud, che aggiunge rischi di fatturazione prima che tu abbia imparato qualcosa. Iniziamo con il provider Terraform local, che crea semplicemente file sul tuo computer, quindi gli errori non costano nulla. Questi esempi e l’output di esempio sono illustrazioni standard che non abbiamo eseguito per questo articolo e il testo esatto varia in base alla versione.

Cos’è Terraform?

Terraform è uno strumento IaC (infrastruttura come codice) di HashiCorp. Scrivi i file di configurazione in HCL, il linguaggio di configurazione di HashiCorp, descrivendo il risultato finale desiderato. Terraform quindi capisce cosa creare, modificare o eliminare per arrivarci.

Comunica con le piattaforme tramite plugin chiamati provider. Esistono provider per AWS, Azure, Google Cloud, Kubernetes, GitHub, Cloudflare e molti altri, quindi puoi utilizzare un flusso di lavoro comune a tutti.

Una cosa da sapere: nel 2023, HashiCorp ha trasferito Terraform alla licenza Business Source. La comunità ha quindi creato OpenTofu, un fork open source che utilizza comandi e configurazioni molto simili. Ciò che impari qui si applica in gran parte a entrambi.

Perché l’infrastruttura come codice?

Domanda Lavoro manuale alla console Terraformare
Chi ha cambiato cosa? Difficile da scoprire Storia di Git
Possiamo copiare la messa in scena nella produzione? Clic attento Riutilizzare il codice
Cosa comporterà questo cambiamento? Lo scoprirai dopo terraform plan ti mostra per primo
Qualcuno può recensirlo? Non facilmente Una normale richiesta pull
Ripristino in caso di disastro Dipende dalla memoria delle persone Ricrea dal codice, oltre ai backup dei dati

Terraform è anche dichiarativo. Dichiari “dovrebbero esserci tre server”, non “crea un server, tre volte”. Se ne esistono già due, ne aggiunge uno. Uno script che si limita a ripetere i suoi passaggi potrebbe finire per crearne altri tre.

Installa Terraform

Installalo utilizzando le istruzioni ufficiali di HashiCorp per il tuo sistema operativo, quindi verifica che funzioni:

terraform -version

Crea una cartella vuota per il progetto. Terraform legge ogni .tf file nella cartella corrente, quindi una cartella equivale a una configurazione.

La tua prima configurazione

Crea un file chiamato main.tf:

terraform {
  required_providers {
    local = {
      source  = "hashicorp/local"
      version = "~> 2.5"
    }
  }
}

resource "local_file" "greeting" {
  filename = "${path.module}/hello.txt"
  content  = "Hello from Terraform\n"
}

Osserva il blocco resource, poiché quasi tutto ciò che scrivi segue questa forma. local_file è il tipo di risorsa e greeting è il tuo nome all’interno della configurazione. Insieme formano il suo indirizzo: local_file.greeting. Gli argomenti all’interno descrivono ciò che desideri.

Il flusso di lavoro: init, pianificazione, applicazione

terraformare init

Questo prepara la cartella e scarica i provider richiesti. Eseguilo una volta all’inizio e di nuovo ogni volta che aggiungi un provider o un modulo. Crea inoltre un file .terraform.lock.hcl, che registra le versioni esatte del provider. Invia quel file a Git.

terraform init

piano di terraformazione

Questo confronta il tuo codice con quello esistente e mostra le modifiche pianificate, senza toccare nulla:

terraform plan

# local_file.greeting will be created
+ resource "local_file" "greeting" {
    + content  = "Hello from Terraform\n"
    + filename = "./hello.txt"
  }

Plan: 1 to add, 0 to change, 0 to destroy.

Impara i simboli, perché leggerai molti piani:

Simbolo Significato
+ Crea
~ Aggiornamento in atto
- Distruggi
-/+ Distruggi e ricrea

applicare terraformare

Questo mostra nuovamente il piano, chiede conferma e apporta le modifiche:

terraform apply

Vengono visualizzati il tipo yes e hello.txt. Ora esegui di nuovo terraform plan. Non dovrebbe riportare alcuna modifica, perché la realtà corrisponde già al tuo codice. Questa proprietà, per cui l’esecuzione ripetuta non provoca ulteriori modifiche, è chiamata idempotenza.

Cambiare e distruggere

Modifica la riga content ed esegui terraform plan. Terraform individua la differenza e propone un cambiamento. Per questa risorsa, sostituisce il file. Prestare attenzione alle sostituzioni su infrastrutture reali, poiché ricreare un database potrebbe significare la perdita di dati.

Successivamente, elimina hello.txt manualmente e pianifica di nuovo. Terraform nota che manca e si offre di ricrearlo. Una differenza tra il tuo codice e la realtà si chiama deriva e rilevarla è uno dei principali vantaggi dello strumento.

Per rimuovere tutto ciò che gestisce questa configurazione, esegui:

terraform destroy

Variabili e output

I valori codificati impediscono di riutilizzare il codice. Le variabili di input rendono flessibile la configurazione e gli output riportano valori utili:

# variables.tf
variable "environment" {
  type        = string
  description = "Deployment environment"
  default     = "dev"

  validation {
    condition     = contains(["dev", "staging", "prod"], var.environment)
    error_message = "Use dev, staging or prod."
  }
}

# main.tf
resource "local_file" "config" {
  filename = "${path.module}/${var.environment}.txt"
  content  = "environment=${var.environment}\n"
}

# outputs.tf
output "config_path" {
  value = local_file.config.filename
}

Imposta i valori sulla riga di comando o conservali in un file chiamato terraform.tfvars, che viene caricato automaticamente:

terraform apply -var="environment=staging"

L’utilizzo di local_file.config.filename nell’output è anche il modo in cui le risorse si riferiscono tra loro. Terraform legge questi riferimenti per individuare l’ordine corretto in cui creare le cose.

Stato di terraformazione

Dopo l’applicazione, troverai un file chiamato terraform.tfstate. Questo è il registro di Terraform di ciò che gestisce, mappando il tuo codice su oggetti reali. Senza di esso, Terraform non saprebbe che local_file.greeting è quel file specifico.

Qui contano tre regole:

  1. Non impegnare mai lo stato in Git. Può contenere password e altri segreti in testo semplice.
  2. Non modificarlo manualmente. Utilizza comandi come terraform state list e terraform state mv.
  3. Utilizza un backend remoto per progetti di gruppo. Un backend condiviso memorizza lo stato a livello centrale e lo blocca, in modo che due persone non possano presentare domanda contemporaneamente.

Ecco un tipico backend che utilizza Amazon S3, con un bucket creato in anticipo:

terraform {
  backend "s3" {
    bucket       = "my-company-terraform-state"
    key          = "shop/prod/terraform.tfstate"
    region       = "ap-south-1"
    encrypt      = true
    use_lockfile = true
  }
}

Suggerimento: Inizia ogni progetto con un .gitignore che esclude .terraform/, *.tfstate, *.tfstate.* e qualsiasi file *.tfvars che contenga segreti.

Una vera risorsa cloud

Il flusso di lavoro non cambia quando si passa al cloud. Ecco un bucket S3 su AWS. Controlla prima i prezzi e distruggi tutto ciò che crei mentre fai pratica:

provider "aws" {
  region = "ap-south-1"
}

resource "aws_s3_bucket" "reports" {
  bucket = "my-unique-reports-bucket-2026"

  tags = {
    Environment = var.environment
    ManagedBy   = "terraform"
  }
}

Terraform ottiene le credenziali dalla configurazione dell’AWS CLI o dalle variabili di ambiente. Non scrivere mai le chiavi di accesso in un file .tf.

Moduli

Un modulo è semplicemente una cartella di file Terraform che puoi chiamare con input diversi. Funziona in modo molto simile a una funzione, permettendoti di definire un modello una volta e riutilizzarlo:

project/
  main.tf
  modules/
    reports_bucket/
      main.tf
      variables.tf
      outputs.tf
module "staging_reports" {
  source      = "./modules/reports_bucket"
  environment = "staging"
}

module "prod_reports" {
  source      = "./modules/reports_bucket"
  environment = "prod"
}

Anche il registro pubblico Terraform dispone di moduli già pronti, ma leggili prima di fare affidamento su di essi e aggiungi la versione. Non creare moduli troppo presto. Attendi finché non avrai ripetuto uno schema almeno due volte.

Un flusso di lavoro di squadra sicuro

  1. Crea un ramo e modifica i file .tf. Consulta il nostro tutorial su Git per principianti se hai bisogno di un ripasso.
  2. Esegui terraform fmt e terraform validate.
  3. Aprire una richiesta pull, con l’output di terraform plan allegato per la revisione.
  4. Dopo l’approvazione, applica il piano salvato da un luogo controllato, idealmente un oleodotto.

Salvare il piano ti assicura di applicare esattamente ciò che è stato rivisto:

terraform plan -out=tfplan
terraform apply tfplan

Questo si adatta naturalmente a CI/CD e Azioni GitHub. Terraform solitamente esegue il provisioning del cluster e strumenti come Kubernetes eseguono quindi le applicazioni su di esso.

Errori comuni

  • Fare domanda senza leggere il piano. Uno -/+ su un database può essere una sorpresa molto costosa.
  • Mantenere lo stato su un laptop. Se perdi quel laptop, Terraform perderà traccia della tua infrastruttura.
  • Apportare modifiche manuali alla console. Causano deviazioni e l’applicazione successiva potrebbe annullarle.
  • Utilizzo di versioni non bloccate. Blocca le versioni del provider e del modulo in modo che gli aggiornamenti avvengano di proposito.
  • Utilizzo di un’unica configurazione enorme. La suddivisione per ambiente o sistema limita i danni derivanti da eventuali errori.

Considerazioni finali

Ora hai visto le idee alla base di quasi tutto il lavoro di Terraform: dichiarare le risorse, rivedere il piano, applicarlo e proteggere lo stato. Fai pratica con il fornitore local fino a quando il flusso di lavoro non sembra naturale, quindi gestisci una piccola risorsa reale in un account di livello gratuito. Portare in stato remoto e moduli quando è coinvolta più di una persona o più di un ambiente.

Domande frequenti

A cosa serve Terraform?

Terraform viene utilizzato per creare e gestire infrastrutture, come server, reti, database e DNS, descrivendole in codice invece di configurarle manualmente.

Terraform è gratuito?

L’uso della CLI Terraform è gratuito ai sensi della licenza Business Source, sebbene i termini limitino alcuni usi commerciali concorrenti. HCP Terraform ha livelli a pagamento e OpenTofu è open source.

Qual è la differenza tra Terraform e Ansible?

Terraform fornisce principalmente l’infrastruttura in modo dichiarativo. Ansible configura principalmente software su macchine esistenti. Molti team li utilizzano entrambi, prima Terraform e poi Ansible.

Cos’è un file di stato Terraform?

È un record che mappa la tua configurazione su risorse reali. Terraform lo usa per elaborare le modifiche. Può contenere segreti, quindi conservalo in modo sicuro e tienilo fuori da Git.

Devo conoscere la programmazione per imparare Terraform?

Non proprio. HCL è semplice e dichiarativo. Comprendere la piattaforma che gestisci, come la rete AWS, è solitamente più difficile del linguaggio stesso.

Continua a imparare

Lavora con Stack Quora

Hai bisogno di aiuto con test, WordPress o SEO?

Aiutiamo i team a fornire software migliore e a far crescere i loro siti. Raccontaci a cosa stai lavorando e ti suggeriremo chiaramente il prossimo passo.

Continua a leggere

Altre guide su test, intelligenza artificiale e sviluppo moderno

Ti è piaciuto questo articolo? Scegli un argomento e passa direttamente ai nostri tutorial più recenti.

Intelligenza artificiale

Spiegazione delle allucinazioni dell'intelligenza artificiale: perché i modelli linguistici inventano le cose e come ridurle

Spiegazione delle allucinazioni dell'intelligenza artificiale: cosa sono, perché i modelli linguistici le producono, tipi comuni, come ridurle con b…

Leggi l'articolo →
DevOps

Spiegazione delle variabili d'ambiente: file .env, segreti e configurazione eseguiti correttamente

Variabili d'ambiente spiegate con esempi Python che abbiamo eseguito: lettura e impostazione, perché ogni valore è una stringa, file .env, ereditari…

Leggi l'articolo →
Sviluppo software

Spiegazione della limitazione della velocità API: algoritmi, intestazioni e gestione degli errori 429

La limitazione della velocità dell'API spiegata con una simulazione che abbiamo eseguito: bucket di token, finestra fissa, finestra scorrevole, risp…

Leggi l'articolo →
Automazione dei test

Derisione in Python: unittest.mock, patch e gli errori che fanno mentire i test

Mocking in Python con unittest.mock, testato: Mock e return_value, side_effect, patch dove viene utilizzato un nome, specifiche e autospec, date moc…

Leggi l'articolo →
Test del software

Spiegazione della copertura del codice: copertura di linea o di filiale e cosa significa realmente il 100%.

Copertura del codice spiegata con una vera esecuzione di cover.py: copertura di linea, ramo e condizione, lettura di un rapporto, perché la copertur…

Leggi l'articolo →
Database e SQL

DELETE vs TRUNCATE vs DROP in SQL: differenze, rollback e quando utilizzarli

DELETE vs TRUNCATE vs DROP spiegato con SQL testato: cosa rimuove, rollback, trigger, reimpostazione dell'identità, velocità e come differiscono Pos…

Leggi l'articolo →
Database e SQL

Spiegazione delle visualizzazioni SQL: crea, utilizza ed evita le insidie, con esempi

Viste SQL spiegate con le query che abbiamo eseguito: creazione di una vista, risultati in tempo reale, nascondere colonne, prestazioni, viste aggio…

Leggi l'articolo →
Sviluppo software

Interfaccia TypeScript e tipo: differenze reali, testate con il compilatore

Interfaccia TypeScript vs tipo, verificata con il vero compilatore: cosa possono fare entrambi, cosa può fare solo uno, fusione delle dichiarazioni,…

Leggi l'articolo →
Sviluppo software

Spiegazione di Python *args e **kwargs: funzioni flessibili con esempi chiari

Python *args e **kwargs spiegati con il codice che abbiamo eseguito: compressione e decompressione, ordine dei parametri, argomenti solo per parole …

Leggi l'articolo →
Sviluppo software

Funzioni Lambda Python: sintassi, usi reali e quando non usarli

Funzioni lambda Python spiegate con il codice che abbiamo eseguito: sintassi, ordinamento con chiave, mappa e filtro, chiusure, trap dell'associazio…

Leggi l'articolo →
Intelligenza artificiale

Cosa sono gli agenti AI? Come funzionano, con un semplice ciclo di agenti che puoi eseguire

Cosa sono gli agenti IA? Una semplice guida al ciclo dell'agente, agli strumenti, alla memoria e ai guardrail, con un piccolo ciclo Python che abbia…

Leggi l'articolo →
DevOps

Monitoraggio vs osservabilità: la vera differenza, con log, metriche e tracce

Spiegazione del monitoraggio e dell'osservabilità: errori noti e sconosciuti, log, metriche e tracce, una procedura dettagliata sugli incidenti di p…

Leggi l'articolo →
DevOps

Volumi Docker e montaggi di associazione: mantenere i dati del contenitore nel modo giusto

Volumi Docker e montaggi di collegamento spiegati: perché i dati del contenitore scompaiono, volumi denominati, montaggi di collegamento, tmpfs, ese…

Leggi l'articolo →
Automazione dei test

TDD vs BDD: differenze chiave, una caratteristica costruita in entrambi i modi e quando utilizzarli ciascuno

TDD vs BDD spiegato con una funzione di sconto costruita in entrambi i modi: refactoring rosso-verde con il codice che abbiamo eseguito, scenari "Da…

Leggi l'articolo →
Test del software

Test di accettazione da parte dell'utente (UAT): processo, lista di controllo ed esempi reali

Spiegazione del test di accettazione dell'utente: chi lo esegue, in cosa differisce dal QA, un processo in sette fasi, un modello di test case UAT, …

Leggi l'articolo →
Database e SQL

Spiegazione dei valori SQL NULL: IS NULL, COALESCE, NULLIF e le trappole da evitare

Valori SQL NULL spiegati con le query che abbiamo eseguito: logica a tre valori, IS NULL, COALESCE, NULLIF, come aggregazioni, join e ordinamento tr…

Leggi l'articolo →
Database e SQL

Istruzione SQL CASE WHEN: sintassi, esempi reali ed errori comuni

SQL CASE WHEN spiegato con le query che abbiamo eseguito: moduli semplici e cercati, ordine delle condizioni, pivot con SUM, trucchi COUNT, ordiname…

Leggi l'articolo →
Sviluppo software

Cos'è il JWT? Token Web JSON spiegati con un esempio funzionante

Cos'è il JWT? Spiegazione dei token Web JSON: le tre parti, un token creato e manomesso nel codice che abbiamo eseguito, JWT e sessioni, archiviazio…

Leggi l'articolo →
Sviluppo software

Spiegazione del loop di eventi JavaScript: stack di chiamate, microtask e timer con esempi

Il ciclo di eventi JavaScript spiegato con il codice che abbiamo eseguito: stack di chiamate, code di attività e microtask, perché setTimeout 0 non …

Leggi l'articolo →
Sviluppo software

Spiegazione dei generatori Python e del rendimento: risparmia memoria con esempi reali

Generatori Python e rendimento spiegati con il codice che abbiamo eseguito: come vengono messi in pausa e ripresi, misurato il risparmio di memoria,…

Leggi l'articolo →
Intelligenza artificiale

Cosa sono gli incorporamenti? I vettori e la somiglianza del coseno spiegati semplicemente

Cosa sono gli incorporamenti? Una guida in linguaggio semplice ai vettori, alla similarità del coseno e alla ricerca semantica, con un piccolo esemp…

Leggi l'articolo →
DevOps

Distribuzione blu-verde rispetto a quella canaria: differenze, compromessi e come scegliere

Spiegazione della distribuzione blu-verde e canary: come funziona ciascuna, costi, rischi e rollback, bucket utente stabile che abbiamo testato, mig…

Leggi l'articolo →
Automazione dei test

Test instabili: quali sono le cause e come risolverli definitivamente

Test instabili spiegati con demo che abbiamo eseguito: le cause principali, come confermarne e diagnosticarne uno, soluzioni adeguate per tempistich…

Leggi l'articolo →
Test del software

Test di carico e test di stress: differenze, metriche ed esempi k6

Spiegazione del test di carico e dello stress test: cosa dimostra ciascuno, test di picco e di assorbimento, le metriche che contano, perché le medi…

Leggi l'articolo →
Test del software

Caso di test e scenario di test: differenze chiave, esempi e quando utilizzarli

Spiegazione del caso di test e dello scenario di test: definizioni chiare, una tabella affiancata, una funzione di reimpostazione della password pre…

Leggi l'articolo →
Database e SQL

Ottimizzazione delle query SQL: leggi i piani di esecuzione e correggi query lente, con tempistiche

Ottimizzazione delle query SQL testata su un milione di righe: leggi i piani di esecuzione, aggiungi gli indici corretti, correggi filtri non aggior…

Leggi l'articolo →
Database e SQL

SQL UNION vs UNION ALL: differenze, esempi e prestazioni testate

SQL UNION vs UNION ALL spiegati con le query che abbiamo eseguito: duplicati, regole seguite da entrambi, un vero bug di dati, prestazioni misurate,…

Leggi l'articolo →
Sviluppo software

Tutorial sull'API di recupero JavaScript: GET, POST, gestione degli errori e timeout

Un tutorial sull'API JavaScript Fetch testato su un server locale: GET e POST, perché 404 non genera eccezioni, un helper riutilizzabile, stringhe d…

Leggi l'articolo →
Sviluppo software

Gestione dei file Python: lettura, scrittura, CSV, JSON e pathlib con esempi

Gestione dei file Python spiegata con il codice che abbiamo eseguito: modalità aperte, con, lettura di file di grandi dimensioni, CSV, JSON, pathlib…

Leggi l'articolo →
Sviluppo software

Classi e oggetti Python: tutorial OOP con esempi reali

Classi e oggetti Python spiegati con il codice che abbiamo eseguito: __init__, metodi, attributi di classe e istanza, ereditarietà, proprietà, metod…

Leggi l'articolo →
Intelligenza artificiale

Che cos'è un modello linguistico di grandi dimensioni? Come funzionano i LLM, spiegato senza esagerazioni

Cos’è un modello linguistico ampio? LLM spiegati in un linguaggio semplice: token, incorporamenti, attenzione, formazione, finestre di temperatura e…

Leggi l'articolo →
DevOps

Comandi Linux per principianti: la guida essenziale del terminale con esempi

Comandi Linux per principianti, raggruppati per attività: navigazione, file, visualizzazione log, grep, pipe, permessi, processi e archivi, con un e…

Leggi l'articolo →
Automazione dei test

Selenio vs drammaturgo: differenze chiave, codice a confronto e quale scegliere

Selenium vs Playwright a confronto: architettura, attesa, supporto per browser e linguaggio, debug, lo stesso test in entrambi gli strumenti, consig…

Leggi l'articolo →
Test del software

Partizionamento di equivalenza: tecnica di progettazione dei test spiegata con esempi pratici

Spiegazione del partizionamento di equivalenza: come trovare partizioni valide e non valide, esempi funzionanti per età, password e coupon, test che…

Leggi l'articolo →
Test del software

Gravità vs priorità nel test del software: differenze, matrice ed esempi reali

Spiegazione della gravità e della priorità nei test del software: definizioni chiare, una matrice a quattro vie con esempi, scale di livello, chi im…

Leggi l'articolo →
Database e SQL

Esercitazione sulle sottoquery SQL: tipi, sottoquery correlate ed EXISTS con esempi

Un tutorial sulle sottoquery SQL con le query che abbiamo eseguito: sottoquery scalari, IN, FROM e SELECT, sottoquery correlate, EXISTS, trap NOT IN…

Leggi l'articolo →
Database e SQL

Spiegazione di transazioni SQL e ACID: COMMIT, ROLLBACK e livelli di isolamento

Transazioni SQL e ACID spiegate con un bonifico bancario eseguito: COMMIT, ROLLBACK, punti di salvataggio, blocchi, livelli di isolamento, letture s…

Leggi l'articolo →
Sviluppo software

Cheat sheet dei comandi Git: i comandi che usi effettivamente, con esempi

Un cheat sheet dei comandi Git raggruppato per attività: configurazione, staging, rami, telecomandi, stash, cronologia ed errori di annullamento, co…

Leggi l'articolo →
Sviluppo software

Spiegazione delle promesse JavaScript: quindi, cattura, Promise.all ed errori comuni

Promesse JavaScript spiegate con il codice che abbiamo eseguito: stati, catene then e catch, gestione degli errori, Promise.all, allSettled, race an…

Leggi l'articolo →
Sviluppo software

Tutorial sul dizionario Python: metodi, esempi e modelli comuni

Un tutorial sul dizionario Python con il codice che abbiamo eseguito: creazione, lettura e aggiornamento di dettami, metodi chiave, unione, comprens…

Leggi l'articolo →
Intelligenza artificiale

Cos'è il RAG? La generazione aumentata di recupero spiegata con un esempio funzionante

Cos'è il RAG? La generazione aumentata di recupero viene spiegata passo dopo passo: indicizzazione, suddivisione in blocchi, incorporamenti, recuper…

Leggi l'articolo →
DevOps

Tutorial Terraform per principianti: infrastruttura come codice dal primo file ai moduli

Un tutorial su Terraform per principianti: inizia senza account cloud, impara init, pianifica e applica, quindi variabili, output, stato, moduli e u…

Leggi l'articolo →
DevOps

Docker vs Kubernetes: differenze chiave, come funzionano insieme e di cosa hai bisogno

Spiegazione di Docker vs Kubernetes: cosa fa ciascuno, la stessa app viene eseguita con entrambi, Docker Compose e Swarm a confronto, il dockershim …

Leggi l'articolo →
Automazione dei test

Tutorial Pytest per principianti: infissi, parametrizzazione ed esempi reali

Un tutorial pytest per principianti con test che abbiamo eseguito su pytest 9.2: asserzioni, dispositivi, parametrizzazione, conftest, marcatori, tm…

Leggi l'articolo →
Test del software

Ciclo di vita del test del software (STLC): 6 fasi, criteri di ingresso e uscita, esempio

Spiegazione del ciclo di vita del test del software: sei fasi STLC con criteri di ingresso e uscita, risultati finali, un esempio di funzionalità di…

Leggi l'articolo →
Sviluppo software

Git merge vs rebase: differenze, esempi e quando usare ciascuno

Git merge vs rebase spiegato con output reale del log, una tabella di confronto, la regola d'oro del rebase e un flusso di lavoro sicuro per i team.

Leggi l'articolo →
Sviluppo software

List comprehension in Python: sintassi, esempi e quando evitarla

List comprehension in Python spiegata: sintassi, filtri, if-else, cicli annidati, tempi misurati e i casi in cui un normale ciclo for è meglio.

Leggi l'articolo →
Database e SQL

SQL JOIN spiegati con esempi (Inner, Left, Right, Full)

Capisci i JOIN SQL passo dopo passo con tabelle e query di esempio: INNER, LEFT, RIGHT, FULL, CROSS e SELF, con errori comuni e consigli sulle prest…

Leggi l'articolo →