Che cos'è l'infrastruttura come codice (IaC)?

L'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.

Diagram of infrastructure as code defining the environment in a versioned file.

IaC è una pratica devOps chiave e un componente del recapito continuo. 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 dell'ambiente nelle pipeline di versione. 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 ed evitano i problemi di runtime causati dalla deriva delle configurazioni o da 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 l'origine, non la destinazione.

L'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 rimuove gli ambienti in base alle definizioni IaC. Il codice dell'infrastruttura stesso può essere convalidato e testato per evitare problemi di distribuzione comuni.

Usare 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 di mantenere il codice imperativo, ad esempio gli script di distribuzione, che possono 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 in Azure

Azure offre supporto nativo per IaC tramite il modello di Azure Resource Manager . Teams può definire modelli arm dichiarativi o Bicep che specificano l'infrastruttura necessaria per distribuire soluzioni.

Piattaforme di terze parti come Terraform, Ansible, Chef e Pulumi supportano anche IaC per gestire l'infrastruttura automatizzata.