Infrastructure as Code
In che modo Infrastructure as Code (IaC) gestisce infrastrutture complesse
Ian Buchanan
Principal Solutions Engineer
Infrastructure as Code (IaC) è un processo di gestione IT che applica le best practice dello sviluppo del software DevOps alla gestione delle risorse dell'infrastruttura cloud.
L'ascesa della virtualizzazione dell'hardware a metà degli anni 2000 ha generato nuove opportunità per l'hosting dell'infrastruttura cloud. I provider di cloud hosting hanno iniziato a offrire l'accesso a piattaforme Infrastructure as Service (IaaS) dinamiche. Man mano che queste piattaforme crescevano e iniziavano a offrire risorse infrastrutturali più complesse, aumentava anche la complessità del ruolo di amministrazione dei sistemi tradizionali. La necessità di configurare e gestire rapidamente infrastrutture cloud complesse è diventata presto una sfida.
L'idea di Infrastructure as Code (IaC), o di modellare l'infrastruttura con codice, è stata stimolata dal successo di CI/CD. DevOps ha dimostrato quanto fosse produttivo eseguire il commit del codice in un repository Git e quindi applicare i rami di funzionalità e i flussi di lavoro delle pull request. L'automazione che questi flussi di lavoro hanno portato allo sviluppo del software ha contribuito a ridurre la nuova complessità dell'amministrazione dei sistemi cloud.
Prova Compass gratis
Migliora la tua esperienza di sviluppatore, cataloga tutti i servizi e aumenta l'integrità del software.
Che cos'è Infrastructure as Code?
Infrastructure as Code è un processo di gestione dell'infrastruttura IT che applica le best practice dello sviluppo del software DevOps alla gestione delle risorse dell'infrastruttura cloud. Le risorse infrastrutturali applicabili sono macchine virtuali, reti, sistemi di bilanciamento del carico, database e altre applicazioni in rete.
IaC è una forma di gestione della configurazione che codifica le risorse dell'infrastruttura di un'organizzazione in file di testo. Questi file di infrastruttura vengono quindi sottoposti a commit in un sistema di controllo delle versioni come Git. Il repository di controllo delle versioni abilita i flussi di lavoro di branch di funzione e pull request, che sono dipendenze fondamentali di CI/CD.
Infrastructure as Code è reso possibile dall'ascesa delle piattaforme di hosting dell'infrastruttura cloud, in particolare delle piattaforme IaaS. IaaS consente il provisioning su richiesta e la richiesta di risorse cloud tramite API remote, che impostano il modello per le proprietà impegnate nei file di configurazione dell'infrastruttura. Le funzionalità di automazione di IaC possono prendere i file di configurazione ed eseguirli sulle API IaaS remote.
Una volta che un team ha eseguito il commit della configurazione dell'infrastruttura per il controllo della versione, può applicare le pratiche CI/CD alle modifiche dell'infrastruttura. Gli aggiornamenti dell'infrastruttura possono seguire un flusso di lavoro DevOps. Se un membro del team ha modificato uno dei file di testo di configurazione, è possibile utilizzare le richieste pull e i flussi di lavoro di revisione del codice per controllare e verificare la correttezza delle modifiche. Inoltre, un'infrastruttura abilitata per DevOps come sistema di codice utilizzerà distribuzioni e rollback automatici dell'infrastruttura.
materiale correlato
Infrastructure as a Service
Scopri la soluzione
Migliora l'esperienza di sviluppo con Compass
Perché Infrastructure as Code è importante?
IaC si è evoluto per aiutare a risolvere il problema della "deriva ambientale". Le applicazioni cloud di solito dispongono di ambienti di distribuzione separati per le fasi del ciclo di vita del rilascio. È comune avere ambienti di sviluppo, staging e produzione. Questi ambienti sono composti da risorse in rete come server applicazioni, sistemi di bilanciamento del carico e database. La deriva dell'ambiente si verifica quando l'infrastruttura tra questi diversi ambienti non è sincronizzata.
Senza IaC, la gestione dell'infrastruttura può essere un processo disorganizzato e fragile. Gli amministratori di sistema si connettono manualmente ai provider di cloud remoti e utilizzano API o dashboard Web per eseguire il provisioning di nuovo hardware e risorse. Questo flusso di lavoro manuale non offre una visione olistica dell'infrastruttura applicativa. Gli amministratori possono apportare manualmente modifiche a un ambiente e dimenticare di farlo in un altro. In questo modo avviene la deriva ambientale.
La deriva ambientale diventa uno spreco aziendale costoso. Bug e errori si verificano perché i team eseguono la compilazione in un ambiente di staging o di sviluppo e poi scoprono al momento della distribuzione che l'ambiente di produzione non è sincronizzato, il che porta a un'indagine dispendiosa in termini di tempo sul perché e cosa manca.
Senza IaC, la gestione manuale dell'infrastruttura è un processo lento. Se viene identificata una modifica dell'infrastruttura richiesta a causa di deriva ambientale, picchi di traffico o qualche altro problema, un amministratore di sistema può avere bisogno di una quantità di tempo sconosciuta per reagire e adattarsi. Questo porta a interruzioni e frustrazione dei clienti. Con IaC in atto, l'infrastruttura può adattarsi automaticamente ai cambiamenti di configurazione e reagire ai picchi di traffico con le funzionalità di ridimensionamento automatico.
Infrastructure as Code offre maggiore supervisione e visibilità rispetto all'amministrazione manuale dei sistemi. Con i file di configurazione dell'infrastruttura impegnati in un repository centrale per il controllo delle versioni, tutti i membri del team possono visualizzare e modificare i dati dell'infrastruttura. Ciò consente potenti funzionalità di controllo. Ad esempio, se il tuo team viene sottoposto a un audit di conformità PCI, dovrai sapere se una parte specifica della tua infrastruttura utilizza la crittografia SSL. Con IaC puoi vedere rapidamente come è configurato SSL ed eseguire il codice per assicurarti che l'infrastruttura live corrisponda ai file di configurazione, che identifica se SSL è abilitato. La cronologia dei commit del controllo di versione funge anche da registro per controllare quando è stata aggiunta o rimossa.
Come funziona Infrastructure as Code?
Ci sono alcune dipendenze che devono essere presenti per realizzare appieno Infrastructure as Code.
Hosting accessibile da remoto o piattaforma di hosting cloud IaaS
La prima e principale dipendenza è l'hosting accessibile da remoto. Lo strumento di gestione della configurazione deve connettersi e modificare l'host remoto. Se l'infrastruttura remota è autogestita, il tuo team deve assicurarsi che lo strumento di gestione della configurazione abbia accesso. La piattaforma di hosting cloud abilitata per IaaS offre API che consentono agli utenti di creare, eliminare e modificare automaticamente le risorse dell'infrastruttura on demand. È inoltre possibile accedere a queste API tramite strumenti di gestione della configurazione per automatizzare ulteriormente queste attività. Alcuni esempi delle piattaforme IaaS più diffuse sono Digital Ocean, Amazon AWS e Microsoft Azure.
Piattaforma di gestione della configurazione
Il successivo requisito per completare IaC è una suite di strumenti che si connette alle API di IaaS e automatizza le attività comuni. Un team può creare una serie di script e strumenti. Tuttavia, questo richiederebbe molto lavoro, manutenzione futura e probabilmente un basso ritorno sull'investimento. Esistono già molte piattaforme di gestione della configurazione open source che risolvono questo problema, tra cui Terraform, Ansible, Salt Stack e Chef.
Sistema di controllo della versione
Una piattaforma di gestione della configurazione utilizza file di testo leggibili dall'uomo e dalla macchina scritti in un linguaggio di markup come YAML per dichiarare attività e sequenze che la piattaforma deve eseguire. Questi file di testo possono essere trattati come file di codice dell'applicazione e archiviati in un repository del sistema di controllo delle versioni. Il repository funge da fonte centrale di informazioni e abilita le richieste pull e la revisione del codice. Il sistema di controllo delle versioni più richiesto è Git.
Con queste dipendenze in atto, consideriamo uno scenario di esempio in cui uno sviluppatore desidera aggiungere un nuovo servizio applicativo a un sistema. Questo scenario aiuta a dimostrare un flusso di lavoro IaC
- Lo sviluppatore modifica un file di testo di configurazione YAML nella piattaforma di gestione della configurazione di sua preferenza, Terraform. Le modifiche specificano che è necessario un nuovo server di hosting.
- Lo sviluppatore esegue il commit delle modifiche a un ramo di funzionalità nel repository Git. Poiché il repository Git del progetto è ospitato su Bitbucket, lo sviluppatore apre una richiesta pull. Un altro membro del team esamina la richiesta pull e viene a conoscenza delle nuove modifiche all'infrastruttura. Il membro del team approva la richiesta pull e lo sviluppatore quindi unisce il commit nel ramo principale del repository.
- A questo punto, la piattaforma di configurazione è necessaria per eseguire un aggiornamento. L'aggiornamento può essere attivato manualmente dallo sviluppatore. Poiché il team utilizza Bitbucket, ha anche accesso a Bitbucket Pipelines e può automatizzare questo passaggio con una pipeline.
- Al momento dell'esecuzione, Terraform si interfaccia con lo IaaS del team. Terraform esegue una serie di comandi sull'API IaaS per aggiornare IaaS con la configurazione dell'infrastruttura prevista.
In conclusione...
IaC è una forma altamente produttiva di gestione della configurazione incentrata sull'automazione della gestione dell'infrastruttura IT cloud. Una volta installato, IaC può essere utilizzato per raggiungere livelli di automazione CI/CD per le modifiche all'infrastruttura di un progetto. IaC offre molte informazioni utili sulla comunicazione e sulla trasparenza sui cambiamenti dell'infrastruttura. IaC richiede una serie di dipendenze come piattaforme di hosting e strumenti di automazione, ampiamente disponibili presso le moderne società di hosting.
Condividi l'articolo
Argomento successivo
Letture consigliate
Aggiungi ai preferiti queste risorse per ricevere informazioni sui tipi di team DevOps e aggiornamenti continui su DevOps in Atlassian.