Prevenire e correggere il drift dell'infrastruttura in Terraform per Azure
By Mirko Peters ·
Scopri come si verifica il drift dell'infrastruttura in Terraform e Azure, come le correzioni d'emergenza apportate dal portale danneggiano i file di stato e come rilevare e correggere le discrepanze in modo sicuro.
Automatically translated with AI from the original post. Read the English original

Il drift dell'infrastruttura è uno dei killer silenziosi più comuni e pericolosi negli ambienti cloud moderni. Quando gli ingegneri apportano modifiche manuali direttamente nel portale Azure durante le emergenze, le loro azioni interrompono silenziosamente la sincronizzazione con i repository di codice. Questa guida completa spiega come si verifica il drift, quali rischi comporta per i file di stato e come rilevare e correggere in modo sistematico le discrepanze senza causare interruzioni in produzione.
Punti chiave
- Il drift dell'infrastruttura si verifica quando le modifiche manuali nella console cloud divergono dal codice Terraform dichiarato.
- Le correzioni d'emergenza apportate direttamente in produzione aggirano il controllo di versione e preparano guasti silenziosi nelle esecuzioni di plan successive.
- I file di stato di Terraform fungono da ponte di memoria, confrontando la configurazione scritta, lo stato precedente e le risorse cloud effettive.
- Rilevare il drift in anticipo richiede esecuzioni di plan automatiche e regolari e un criterio rigoroso contro le modifiche manuali non documentate nel portale.
- Risolvere il drift significa decidere se riportare l'ambiente attivo allo stato del codice o aggiornare la configurazione per adeguarla alla realtà.
Che cos'è il drift dell'infrastruttura e perché si verifica?
Anche i team di ingegneria cloud più disciplinati finiscono prima o poi per subire il drift dell'infrastruttura. Il drift è definito come qualsiasi modifica non autorizzata, non documentata o d'emergenza apportata alle risorse cloud che gestisce uno stato al di fuori delle pipeline automatizzate. Immagina un ingegnere chiamato d'urgenza durante un incidente notturno. Sotto pressione, accede alla console Azure, porta un limite di scalabilità automatica da cinque istanze a dieci, risolve il problema e torna a dormire.
Il problema è che il file di configurazione sotto controllo di versione nel repository riporta ancora cinque. L'ambiente cloud attivo dice dieci. Poiché nessuno ha documentato la modifica o aggiornato il codice, si crea un enorme scollamento tra l'architettura prevista e la realtà. Questo divario resta nascosto per settimane, finché qualcuno non esegue un normale plan di Terraform per un aggiornamento del tutto non correlato. All'improvviso, l'output del terminale mostra un avviso: Terraform intende riportare quelle istanze a cinque.
Il fattore umano e la pressione operativa
Il drift raramente nasce da intenzioni dolose; deriva quasi sempre dall'urgenza operativa. Quando gli ambienti di produzione vanno in crisi, l'istinto porta gli ingegneri a risolvere subito il problema con gli strumenti più rapidi a disposizione. Il provisioning punta-e-clicca nel portale Azure è veloce, tangibile e immediato. Tuttavia, ogni volta che un ingegnere usa il portale per correggere un problema senza registrarlo nel codice, accumula debito tecnico che dovrà essere ripagato più avanti, con gli interessi.
Come lo stato di Terraform individua le discrepanze
Per capire come Terraform rileva il drift, occorre osservare da vicino il suo meccanismo di memoria: il file di stato. Il file di stato di Terraform funge da fonte di verità definitiva, mettendo in relazione le risorse cloud con i file di configurazione. Quando esegui un comando, Terraform non si limita a inviare alla cieca i file al cloud. Esegue invece un confronto a tre vie.
Per prima cosa legge ciò che hai scritto nei file di configurazione. Poi esamina ciò che ha registrato nel file di stato durante l'ultima applicazione riuscita. Infine contatta l'API del cloud provider tramite i plugin e verifica cosa esiste davvero nella tua sottoscrizione in questo momento. Quando questi tre elementi non corrispondono, Terraform capisce che la realtà è cambiata senza che nessuno lo dicesse.
Il pericolo degli avvisi ignorati
Durante l'esecuzione di un plan, Terraform genera un output dettagliato che mostra aggiunte, modifiche ed eliminazioni. Quando è presente drift, spesso compaiono avvisi che indicano che una risorsa deve essere modificata o addirittura sostituita completamente. Chi inizia spesso va in panico davanti agli avvisi di sostituzione forzata delle risorse. Questo avviso non è un errore: è Terraform che ti dice che la risorsa in produzione è cambiata al punto da non essere più riconoscibile e che, per riportarla in linea con il codice, deve essere eliminata e ricreata.
Best practice per rilevare e prevenire il drift
Prevenire il drift richiede una combinazione di barriere culturali e controlli tecnici automatizzati. Se affidi il rilevamento del drift esclusivamente a controlli manuali, prima o poi vivrai interruzioni dolorose in produzione. Ecco le strategie di base che i team usano per mantenere allineati i propri ambienti cloud:
- Imponi l'accesso in sola lettura: Rimuovi i permessi di scrittura in produzione agli utenti. Fai in modo che tutte le modifiche all'infrastruttura passino dalle tue pipeline CI/CD e dalle revisioni delle pull request.
- Pianifica esecuzioni automatiche di plan: Configura pipeline di integrazione continua che eseguano regolarmente il comando 'terraform plan' senza applicarlo. Verifica l'output per individuare modifiche inattese.
- Suddividi i file di stato monolitici: Separa gli ambienti di grandi dimensioni in componenti più piccoli e modulari. File di stato più piccoli rendono più semplice isolare, verificare e correggere il drift.
- Implementa il blocco dello stato remoto: Assicurati che il team utilizzi backend remoti sicuri con blocco dello stato, così da impedire che esecuzioni concorrenti corrompano le registrazioni in memoria.
Come correggere il drift quando si verifica
Quando scopri che l'infrastruttura in produzione si è discostata dalla configurazione, ti trovi davanti a un bivio strategico. Hai due percorsi principali per la correzione:
La prima opzione è lasciare che Terraform sovrascriva l'ambiente attivo. Eseguendo il tuo consueto 'terraform apply', costringi Azure a ripristinare lo stato descritto nel codice. Questa è la strada giusta quando il drift è stato causato da una modifica manuale non autorizzata o da un'impostazione di debug temporanea che non dovrebbe più esistere.
La seconda opzione è aggiornare la configurazione di Terraform per farla corrispondere alla realtà. Scegli questo percorso quando l'hotfix manuale applicato durante un incidente si è rivelato necessario, stabile e utile per la produzione. Aggiornando il codice per riflettere la nuova realtà, chiudi il divario e fai in modo che le future esecuzioni automatiche preservino la configurazione necessaria.
Conclusione
Il drift dell'infrastruttura è una sfida inevitabile negli ambienti cloud dinamici, ma non deve significare un disastro per il tuo team. Comprendendo come il file di stato di Terraform registra le modifiche, implementando controlli di accesso rigorosi e trattando il rilevamento del drift come un'abitudine operativa regolare, puoi mantenere il pieno controllo della tua architettura cloud. Per approfondire i meccanismi di base dell'infrastruttura come codice, dei provider e della gestione dello stato, ascolta l'episodio completo e scopri tutti gli approfondimenti degli esperti per portare al livello successivo la tua strategia di automazione cloud.
Domande frequenti
Cosa causa il drift dell'infrastruttura in Terraform?
Il drift è causato da modifiche fuori banda apportate direttamente alle risorse cloud tramite portale, comandi CLI o script che aggirano la pipeline di Terraform.
Come rileva Terraform il drift di configurazione durante un'esecuzione di plan?
Terraform confronta il file di stato memorizzato con le risorse cloud effettive, tramite le API dei provider, e con i file di configurazione locali.
Cosa succede se qualcuno modifica manualmente una risorsa Azure gestita da Terraform?
La volta successiva che viene eseguito un plan di Terraform, il sistema segnalerà la discrepanza e tenterà di riportare la risorsa allo stato dichiarato nel codice, a meno che la configurazione non venga aggiornata.
Devo aggiornare il codice Terraform o annullare la modifica nel portale Azure?
Se la modifica manuale era un hotfix d'emergenza ormai necessario per la stabilità, aggiorna la configurazione di Terraform. Se invece era una modifica non autorizzata o accidentale, lascia che Terraform la ripristini.