Close

Infrastructure as Code

In che modo Infrastructure as Code (IaC) gestisce infrastrutture complesse

Foto di Ian Buchanan
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.

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 trasferiti in un sistema di controllo delle versioni come Git. Il repository di controllo della versione abilita flussi di lavoro di feature branch 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.

icona admin-cloud
materiale correlato

Infrastructure as a service

icona di tre anelli
Scopri la soluzione

Gestisci i componenti 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?


Immagine codice infrastruttura

Ci sono alcune dipendenze che devono essere in atto 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

  1. 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.
  2. 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.
  3. 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.
  4. 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.

Ian Buchanan
Ian Buchanan

Ian vanta una lunga e approfondita esperienza in materia di Java e .NET ed è noto per essere un campione in fatto di metodi Agile nelle imprese di grandi dimensioni. Attualmente si occupa dell'emergente cultura DevOps e degli strumenti per migliorare la continuous integration, la continuous delivery e l'analisi dei dati. Nel corso della sua carriera, ha gestito con successo strumenti per lo sviluppo software aziendale in tutte le fasi del loro ciclo di vita. Si è occupato del miglioramento dei processi a livello di organizzazione riuscendo a ottenere maggiore produttività, qualità superiore e migliore soddisfazione del cliente. Ha creato team multinazionali in cui viene valorizzata la capacità di gestire e organizzare autonomamente il lavoro. Quando non parla o codifica, Ian si dedica alle sue passioni: parser, metaprogrammazione e linguaggi specifici di dominio. Segui Ian all'indirizzo @devpartisan.


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.

Illustrazione su Devops

Community di Compass

illustrazione del superamento di ostacoli

Tutorial: Creare un componente

Illustrazione di una mappa

Inizia a utilizzare Compass gratuitamente

Iscriviti alla nostra newsletter DevOps

Thank you for signing up