Che cos'è l'infrastruttura come codice (IaC)?
'infrastruttura distribuita come codice (IaC) usa la metodologia DevOps e il controllo delle versioni con un modello descrittivo per definire e distribuire l'infrastruttura, ad esempio reti, macchine virtuali, servizi di bilanciamento del carico e topologie di connessione. Proprio come lo stesso codice sorgente genera sempre lo stesso file binario, un modello IaC genera lo stesso ambiente ogni volta che distribuisce.
IaC è una pratica DevOps chiave e un componente di consegna continua. Con IaC, i team DevOps possono collaborare con un set unificato di procedure e strumenti per distribuire applicazioni e l'infrastruttura di supporto in modo rapido e affidabile su larga scala.
Evitare la configurazione manuale per applicare la coerenza
IaC si è evoluto per risolvere il problema della deriva degli ambienti nelle pipeline di rilascio. Senza IaC, i team devono gestire singolarmente le impostazioni dell'ambiente di distribuzione. Nel corso del tempo, ogni ambiente diventa un "fiocco di neve", una configurazione univoca che non può essere riprodotta automaticamente. L'incoerenza tra gli ambienti può causare problemi di distribuzione. L'amministrazione e la manutenzione dell'infrastruttura comportano processi manuali soggetti a errori e difficili da tenere traccia.
IaC evita la configurazione manuale e applica la coerenza rappresentando gli stati dell'ambiente desiderati tramite codice ben documentato in formati come JSON. Le distribuzioni dell'infrastruttura con IaC sono ripetibili e impediscono problemi di runtime causati dalla deriva della configurazione o dalle dipendenze mancanti. Le pipeline di versione eseguono le descrizioni dell'ambiente e i modelli di configurazione della versione per configurare gli ambienti di destinazione. Per apportare modifiche, il team modifica la fonte, non la destinazione.
Idempotenza, la capacità di una determinata operazione di produrre sempre lo stesso risultato, è un importante principio IaC. Un comando di distribuzione imposta sempre l'ambiente di destinazione nella stessa configurazione, indipendentemente dallo stato iniziale dell'ambiente. L'idempotenza viene ottenuta configurando automaticamente la destinazione esistente o rimuovendo la destinazione esistente e ricreando un ambiente nuovo.
Strumenti utili
Distribuire rapidamente ambienti di test stabili su larga scala
IaC aiuta i team devOps a testare le applicazioni in ambienti simili alla produzione all'inizio del ciclo di sviluppo. Teams può effettuare il provisioning di più ambienti di test in modo affidabile su richiesta. Il cloud effettua dinamicamente il provisioning e smantella gli ambienti in base alle definizioni IaC. Il codice dell'infrastruttura stesso può essere convalidato e testato per evitare problemi di distribuzione comuni.
Utilizzare file di definizione dichiarativa
Se possibile, IaC deve usare file di definizione dichiarativi. Un file di definizione descrive i componenti e la configurazione richiesti da un ambiente, ma non necessariamente come ottenere tale configurazione. Ad esempio, il file potrebbe definire una versione e una configurazione del server necessarie, ma non specificare il processo di installazione e configurazione del server. Questa astrazione consente una maggiore flessibilità per l'uso di tecniche ottimizzate fornite dal provider di infrastruttura. Le definizioni dichiarative consentono anche di ridurre il debito tecnico associato al mantenimento del codice imperativo, come gli script di distribuzione, che può accumularsi nel tempo.
Non esiste una sintassi standard per IaC dichiarativo. La sintassi per descrivere IaC dipende in genere dai requisiti della piattaforma di destinazione. Piattaforme diverse supportano formati di file, ad esempio YAML, JSON e XML.
Distribuire IaC su Azure
Azure offre supporto nativo per IaC tramite il modello di Azure Resource Manager