Mentre Terraform possiede il modello dichiarativo per la gestione delle infrastrutture su piattaforme cloud, fa un presupposto raro su vasta scala: che lo stato dell’infrastruttura dispiegata sia sempre gestito esclusivamente attraverso Terraform. In pratica, gli ambienti si evolvono. In base a story pressione, i workforce apportano manualmente modifiche, applicano HotFix direttamente nella console cloud e distribuiscono l’infrastruttura attraverso la parallelizzazione dell’automazione.
Queste modifiche creano una deriva di configurazione al di fuori del Lifecycle Terraform. L’infrastruttura rimane funzionale ma è disallineata con la base di codice Terraform, causando comportamenti imprevedibili, aspettative rotte e talvolta anche incidenti di produzione.
Per risolvere questo problema, abbiamo un sistema di rilevamento della deriva automatizzato che funziona continuamente nei nostri ambienti multi-cloud (AWS, Azure, GCP). È un sistema che rileva e segnala divergenza tra ciò che viene fornito e ciò che viene dichiarato in Git. In questo articolo, spieghiamo come funziona, come l’abbiamo integrato nei nostri flussi di lavoro e le decisioni che abbiamo preso per garantire che sia ridimensionato in modo affidabile.
Comprensione della deriva della configurazione
Come accade la deriva nei flussi di lavoro di Terraform
Drift di configurazione Si verifica quando l’infrastruttura viene modificata al di fuori di Terraform – attraverso modifiche manuali, strumenti esterni o correzioni di emergenza non impegnate nel codice. Questo può accadere attraverso:
- Modifiche manuali nella console cloud
- Hotfix non tracciati durante gli incidenti
- Altri strumenti e API che modificano le risorse
- Fattori ambientali come la scala automatica o la marcatura di terze parti
Terraform non rileva le modifiche apportate direttamente alle infrastrutture a meno che lo stato non sia esplicitamente rinfrescato e, anche in questo caso, le modifiche minori possono passare inosservate. Confronta il codice Terraform con l’ultimo stato noto, non l’infrastruttura effettiva, a meno che non sia aggiornato. Anche se lo fai, le modifiche minori o gestite dal cloud potrebbero passare inosservate a meno che non siano adeguatamente differenziate.
Profilo di rischio della deriva
Mentre una deriva non romperà sempre rapidamente l’infrastruttura, degrada lentamente l’affidabilità. Advert esempio, le politiche IAM che non sono memorizzate nel controllo della versione e, quindi, sono cambiate al di fuori della fonte di verità rimangono in genere prive di documenti. La configurazione della rete può aiutare a ripristinare la rete persa fino a quando Terraform risolve i problemi attraverso cambiamenti che in seguito diventano passività a lungo termine quando Terraform ritorna.
La deriva introduce fragilità in ambienti multi-team. Più piccoli cambiamenti propagano incoerenze negli ambienti, più ingegneri perdono la fiducia in Terraform, che dovrebbe essere una fonte di verità.
Progettare il rilevamento della deriva che si ridimensiona
Ancoraggio a Git, non solo allo stato di terraform
Nel nostro design, il principio fondamentale period quello di trattare Git come fonte della verità infrastrutturale piuttosto che lo stato di terraform. Misuriamo la deriva controllando l’ultimo ambiente reside (con un nuovo piano Terraform-Refresh = true) rispetto allo stato del codice come impegnato nel controllo della versione.
In ogni modulo, abbiamo aggiunto un lavoro CI, che funziona con un programma regolare e si basa su ciascun PR. Il lavoro:
- Aggiorna lo stato Terraform del supplier.
- Gestisce un piano contro il codice all’attuale git sha
- Confronta l’output con il piano previsto (commit precedente o basale
Il modulo viene contrassegnato se ci sono differenze e non viene rilevata alcuna modifica del codice corrispondente.
Supporto multi-cloud
Poiché la nostra infrastruttura è diffusa AWS, GCP e AzureI corridori modulari ci aiutano a eseguire controlli di deriva per supplier cloud. In ogni ambiente, un rilevatore di deriva programmato viene eseguito in un contesto limitato di sola lettura, che impedisce la modifica accidentale e gli consente di funzionare in produzione.
I dettagli di Hash, ID commit, timestamp e differenziali del piano vengono spinti insieme ai risultati e ai metadati in una posizione di archiviazione centrale (nel nostro caso, un secchio S3). Questi dati sono emersi e aggregati attraverso avvisi e dashboard Grafana.
Integrare il rilevamento nel flusso di lavoro degli sviluppatori
Estrarre l’integrazione della richiesta
La deriva superfici direttamente durante il ciclo di sviluppo. Controlliamo anche se il modulo corrispondente si sposta quando viene aperta una richiesta di pull che modifica solo il codice dell’infrastruttura.
Se si verifica una deriva, annotiamo il PR con un piano di piano dettagliato e un avvertimento. Ciò consente allo sviluppatore di verificare se la deriva è benigna o dovrebbe essere riconciliata. Advert esempio, se una regola del gruppo di sicurezza è stata modificata manualmente, il diff mostrerà ciò che è stato modificato prima che il PR lo rimuova comunque.
Sopprimere i non emetti noti
Non tutta la deriva è attuabile. I fornitori di cloud aggiungono spesso o modificano i metadati (advert es. Tag Last_updated, Self_Link e Dynamic) per rendere le app più dinamiche. Questi non richiedono la riparazione.
Per risolvere questo problema, abbiamo introdotto regole di soppressione configurabile per modulo. Con queste regole in atto, il lavoro di rilevamento della deriva fornisce solo differenze attuabili, abbastanza per creare lavori di rilevamento della deriva su cui i workforce possono concentrarsi.
Migliorare il segnale e la responsabilità
Output differenziale leggibile dall’uomo
In precedenti iterazioni, il sistema avrebbe semplicemente pubblicato registri “rilevati”. Questi avvisi non sono stati utili. Abbiamo anche apportato miglioramenti alla toolchain che presentava differenze leggibili dall’uomo tra codice e configurazione dal vivo, che sono state raggruppate per tipo di risorsa e attributo per scopi di leggibilità.
Ciò ha permesso agli sviluppatori e alle SRE di elaborare i loro fallimenti casuali senza dover eseguire piani a livello locale o manualmente sfogliare la console cloud.
Drift Inveging e Precedence
Tracciamo anche l’età della deriva (cambiamenti che sono persistiti attraverso più cicli di controllo senza risoluzione). Una deriva in un database Dev di tre giorni va bene. Una deriva più vecchia di 15 minuti è rivolta a una politica IAM non lo è.
Con questo modello di invecchiamento in atto, possiamo intensificare l’avviso in modo appropriato senza squadre schiaccianti durante il triage.
Lezioni dalla produzione
Inizia con i moduli critici
Quindi, abbiamo iniziato eseguendo il rilevamento della deriva solo su moduli associati advert ambienti di produzione e risorse sensibili alla sicurezza come IAM, VPCSe gateway esterni rivolti. Quando si verifica una deriva, il raggio di esplosione di queste risorse è il peggio.
Poiché il lancio è stato gradualmente, abbiamo costruito fiducia mentre mostrava valore in anticipo senza rallentare la consegna o introdurre attrito inutili.
Rileva prima di applicare
Inizialmente, non abbiamo applicato cancelli duri per la deriva. L’obiettivo period la consapevolezza. Una volta che i workforce avevano visibilità, erano proattivi nell’aiutare i cambiamenti manuali riordini e codificare.
Oggi, è probabile che i nostri moduli più critici rompano i controlli di PR se esiste una deriva nota. Alcuni altri riferiscono ma non bloccano la distribuzione. Consente correzioni temporanee senza negare la coerenza a lungo termine.
Conclusione
Usando Strumenti infrastrutturali come code come Terraform è una base solida per la gestione delle risorse cloud; Tuttavia, senza rilevamento della deriva, operano con la fiducia cieca. Questo non è un ambiente nel mondo reale, quindi modifiche manuali, eccezioni non gestite e hotfix esisteranno sempre nelle aree del mondo reale. Il trucco è catturarlo in anticipo, prima che si scatena in interruzioni o regressioni.
Abbiamo combinato Terraform, GIT Historical past, CI automatizzato e report strutturati per costruire un sistema che rileva quando l’infrastruttura non è coerente con il codice. Non sradica tutti i rischi ma è preparato per il ciclo di suggestions necessario per mantenere la coerenza su scala.
Per qualsiasi operazione in un ambiente multi-cloud che lavora su più workforce, questo approccio non è facoltativo. Al centro, si tratta della differenza tra la configurazione come documentazione e configurazione come realtà.