DevOps nasce dalla sinergia tra cultura aziendale, pratiche e strumenti e fornisce a un'organizzazione l'abilità di sviluppare applicazioni e servizi con la massima agilità. DevOps consente l'evoluzione e il miglioramento dei prodotti a ritmo più serrato rispetto alle aziende che usano i tradizionali processi di sviluppo di software e di gestione dell'infrastruttura. La maggiore agilità consente alle aziende di offrire servizi migliori ai clienti e offre una maggiore competitività sul mercato.
Secondo il modello DevOps, i team dedicati a sviluppo e produzione non agiscono più separatamente. In alcuni casi, al contrario, i due team vengono fusi in un'unità in cui i tecnici sono attivi lungo tutto il ciclo di vita dell'applicazione, da sviluppo e testing a distribuzione e produzione, e acquisiscono una serie di competenze non limitate da una singola funzione.
In alcuni modelli DevOps, anche i team dedicati a controllo della qualità e sicurezza spesso sono coinvolti più direttamente nelle fasi di sviluppo e gestione in tutto il ciclo di vita dell'applicazione. Quando in un team di DevOps la sicurezza è il punto focale di tutti, a volte prende il nome di DevSecOps.
I team si affidano all'automatizzazione per velocizzare processi manuali che sono da sempre lenti. Le tecnologie e gli strumenti impiegati aiutano i team a far funzionare ed evolvere le applicazioni in modo rapido e affidabile. Questi strumenti aiutano i tecnici anche a portare a termine attività che normalmente avrebbero richiesto l'attenzione di altre unità aziendali, ad esempio la distribuzione di codice o il provisioning dell'infrastruttura, aumentando ulteriormente l'efficienza.
Processi più agili per velocizzare l'innovazione, adattarsi meglio ai cambiamenti dettati dal mercato e potenziare l'efficienza. Il modello DevOps consente a sviluppatori e team di produzione di ottenere questi risultati e molto altro. Microservizi e distribuzione continua, ad esempio, consentono di controllare i servizi e rilasciare aggiornamenti con maggiore frequenza.
Aumenta la frequenza delle nuove release per facilitare innovazione e miglioramento dei prodotti. La maggiore rapidità nel rilascio di nuove funzioni e correzioni di bug aumenterà il vantaggio sulla concorrenza: potrai soddisfare le esigenze dei clienti prima degli altri. Integrazione continua e distribuzione continua sono pratiche che automatizzano le procedure di rilascio del software, dalla build alla distribuzione.
Verifica che gli aggiornamenti delle applicazioni e le modifiche dell'infrastruttura siano sempre conformi agli standard di qualità per garantire affidabilità e produttività senza sacrificare l'esperienza degli utenti finali. Con funzioni quali integrazione continua e distribuzione continua potrai verificare che ogni modifica sia funzionale e sicura. Monitoraggio e registrazione di log consentiranno di mantenere sotto controllo le prestazioni in tempo reale.
Gestisci l'infrastruttura e i processi di sviluppo su qualsiasi scala. Automazione e coerenza consentono di gestire sistemi complessi e soggetti a variazioni in modo efficiente e contenendo i rischi. Ad esempio, l'utilizzo di infrastrutture come codice permette di gestire ambienti di sviluppo, testing e produzione in modo iterabile e più efficiente.
Crea team più efficaci con il modello DevOps, che attribuisce enorme importanza a valori come titolarità e responsabilità. I team di sviluppo e produzione potranno collaborare gomito a gomito, condividere responsabilità e integrare i loro flussi di lavoro. In questo modo vengono ridotte le cause di inefficienza e migliorati i tempi di esecuzione, ad esempio riducendo i periodi di passaggio di consegne e scrivendo codice che tenga conto dell'ambiente in cui sarà eseguito.
L'aumento della velocità non significa un minore controllo sulla conformità. Puoi adottare un modello DevOps senza dover rinunciare alla sicurezza grazie a policy di conformità automatizzate, controlli granulari e tecniche di gestione della configurazione. Ad esempio, utilizzando infrastruttura come codice e policy come codice, è possibile definire e monitorare la conformità su larga scala.
Il software e Internet sono fattori che hanno cambiato il mondo e la sua economia, a partire da shopping, intrattenimento e settore bancario. Il software non è più solo un supporto per il business; è diventato un componente integrante di qualsiasi organizzazione. Le aziende interagiscono con i loro clienti tramite prodotti software sotto forma di applicazioni o servizi online che è possibile utilizzare su molti dispositivi differenti. Impiegano altri prodotti software per migliorare l'efficienza operativa apportando trasformazioni a qualsiasi anello della catena di valore, ad esempio logistica, comunicazioni e operazioni. Le aziende di oggi, quindi, devono trasformare il modo in cui creano e distribuiscono il loro software, come le industrie che creano beni materiali hanno trasformato nel corso del XX secolo il modo in cui progettavano, creavano e distribuivano i loro prodotti attraverso l'automazione industriale.
La transizione verso l'approccio DevOps richiede un'evoluzione di mentalità e cultura aziendali. In poche parole, un modello DevOps punta alla rimozione delle barriere tra due team che in genere non comunicano tra loro, gli sviluppatori e il team operativo. In alcune organizzazioni i due gruppi potranno addirittura essere fusi in un'unica unità, in cui i tecnici potranno occuparsi di tutto. Nell'approccio DevOps, i due team collaborano a stretto contatto per ottimizzare sia la produttività degli sviluppatori sia l'affidabilità delle operazioni. Tendono a comunicare con maggiore frequenza per ottenere maggiore efficienza e migliorare la qualità dei servizi che forniscono ai clienti. Mantengono sempre il controllo sui propri servizi, spesso oltre la definizione tradizionale del loro ruolo, perché sono concentrati sulle esigenze del cliente finale e desiderano contribuire a soddisfare tali esigenze. Anche i team dedicati a controllo della qualità e sicurezza spesso sono coinvolti più direttamente nei compiti di questi team. Le aziende che adottano un modello DevOps, indipendentemente dalla loro struttura organizzativa, dispongono di team che annoverano tra le loro responsabilità il controllo dell'intero ciclo di vita di sviluppo e infrastruttura.
Alcune prassi di particolare importanza possono aiutare le aziende a innovare con maggiore velocità tramite automatizzazione e ottimizzazione dello sviluppo di software e dei processi di gestione dell'infrastruttura. Per la maggior parte di queste prassi è sufficiente adottare strumenti appropriati.
Una prassi fondamentale è aumentare la frequenza degli aggiornamenti e diminuirne le dimensioni. Questo è uno dei modi con cui un'azienda può innovare più rapidamente a beneficio dei propri clienti. Questi aggiornamenti solitamente hanno una natura maggiormente incrementale rispetto agli aggiornamenti saltuari previsti dalle prassi di rilascio di software tradizionali. Quando la frequenza degli aggiornamenti è maggiore e le dimensioni minori è più facile tenere sotto controllo il rischio. I bug vengono risolti più rapidamente perché è più facile individuare quale implementazione ha provocato il problema. Anche se la cadenza e le dimensioni degli aggiornamenti variano, le aziende che adottano un modello DevOps distribuiscono aggiornamenti più di frequente rispetto a quelle con modelli di sviluppo di software tradizionali.
Sarà inoltre possibile usare un'architettura di microservizi per rendere le applicazioni più flessibili e facilitare l'innovazione. L'architettura di microservizi suddivide sistemi grandi e complessi in progetti semplici e indipendenti. Le applicazioni vengono spezzate in singoli componenti (servizi), ciascuno dei quali ha una sola funzione e opera in modo indipendente sia rispetto agli altri servizi sia rispetto all'applicazione. Questa architettura riduce il carico di lavoro di coordinamento per aggiornare le applicazioni; quando tutti i servizi sono assegnati a team agili e di piccole dimensioni che gestiscono ogni singolo servizio, anche l'azienda nel suo insieme è più agile.
L'utilizzo di microservizi e la maggiore frequenza delle release aumentano tuttavia il numero di distribuzioni, il che può presentare problemi dal punto di vista operativo. Le prassi DevOps come l'integrazione continua e la distribuzione continua risolvono questi problemi e consentono alle organizzazioni di velocizzare le distribuzioni in modo sicuro e affidabile. Le prassi di automatizzazione dell'infrastruttura, come ad esempio l'infrastruttura come codice e la gestione della configurazione, aiutano a mantenere elasticità e tempi di risposta ottimali delle risorse di organizzazione. Monitoraggio e registrazione di log, inoltre, aiutano i tecnici a tenere sotto controllo le prestazioni di applicazioni e infrastruttura, per rispondere in modo tempestivo ai problemi.
Globalmente, queste prassi sono uno strumento eccezionale per fornire aggiornamenti più rapidi e affidabili ai clienti. Di seguito offriamo una panoramica delle prassi DevOps più importanti.
Le seguenti sono le best practice DevOps:
- Integrazione continua
- Distribuzione continua
- Microservizi
- Infrastruttura come codice
- Monitoraggio e accessi
- Comunicazione e collaborazione
L'integrazione continua è un metodo di sviluppo software in cui gli sviluppatori aggiungono regolarmente modifiche al codice in un repository centralizzato, quindi la creazione di build e i test vengono eseguiti automaticamente. Gli obiettivi principali dell'integrazione continua sono individuare e risolvere i bug con maggiore tempestività, migliorare la qualità del software e ridurre il tempo richiesto per convalidare e pubblicare nuovi aggiornamenti.
La distribuzione continua è un metodo di sviluppo software in cui le modifiche al codice vengono applicate a una build, testate e preparate per il rilascio in produzione in modo automatico. Estende l'integrazione continua distribuendo tutte le modifiche al codice all'ambiente di testing e/o di produzione dopo la fase di creazione di build. Se la distribuzione continua viene implementata correttamente, gli sviluppatori hanno sempre a disposizione una build temporanea pronta per la distribuzione che ha già passato un processo di testing standardizzato.
Ulteriori informazioni su distribuzione continua e AWS CodePipeline »
L'architettura di microservizi è un approccio alla progettazione in cui un'applicazione si basa su un gruppo di servizi di minori dimensioni. Ogni servizio esegue il proprio processo e comunica con gli altri servizi tramite un'interfaccia predefinita utilizzando un mezzo con impatto ridotto sulle prestazioni, in genere un'interfaccia di programmazione dell'applicazione (API) basata su HTTP. I microservizi vengono creati in base alle caratteristiche di un'organizzazione; ogni servizio ha una sola funzione. Per scrivere microservizi e distribuirli (in modo indipendente, come servizio singolo o come gruppo di servizi) è possibile utilizzare diversi framework o linguaggi di programmazione.
Ulteriori informazioni su Amazon Container Service (Amazon ECS) »
L'infrastruttura come codice è una prassi secondo cui provisioning e gestione dell'infrastruttura avvengono tramite metodologie di sviluppo di software e codice quali il controllo di versione e l'integrazione continua. Il modello di gestione del cloud tramite API permette a sviluppatori e amministratori di sistema di interagire con l'infrastruttura in modo programmatico e su larga scala, piuttosto che tramite l'impostazione e la configurazione manuale delle risorse. Di conseguenza, i tecnici possono interfacciarsi con l'infrastruttura mediante strumenti basati sul codice e secondo le stesse modalità previste per il codice di un'applicazione. Poiché possono essere definiti tramite codice, l'infrastruttura e i server possono essere distribuiti con la massima rapidità tramite modelli standardizzati, aggiornati con patch e versioni più recenti o duplicati in modo iterabile.
Ulteriori informazioni su come gestire l'infrastruttura come codice con AWS CloudFormation »
Sviluppatori e amministratori di sistema utilizzano codice per automatizzare sistemi operativi e mantenere in hosting configurazione, attività operative e altri processi. L'utilizzo di codice rende le modifiche alla configurazione iterabili e standardizzate. Solleva sviluppatori e amministratori di sistema dal compito di configurare manualmente sistemi operativi, applicazioni di sistema o software dei server.
Scopri come configurare e gestire Amazon EC2 e i sistemi in locale con Amazon EC2 Systems Manager »
Ulteriori informazioni su gestione della configurazione con AWS OpsWorks »
Con l'infrastruttura e la relativa configurazione codificate nel cloud, le aziende possono monitorare e applicare la conformità in modo dinamico su vasta scala. Un'infrastruttura descritta tramite codice può perciò essere monitorata, convalidata e riconfigurata in modo automatico. In questo modo è più semplice per le organizzazioni gestire le modifiche apportate alle risorse e verificare che le misure di sicurezza siano applicate in modo corretto e distribuito (ad esempio la protezione delle informazioni o la conformità agli standard PCI DSS o HIPAA). I team aziendali potranno perciò operare in modo più rapido, perché le risorse non conformi possono essere segnalate automaticamente per applicare ulteriori controlli o addirittura riportate automaticamente nell'alveo della conformità.
Le aziende tengono sotto controllo i parametri e i log per scoprire in che modo le prestazioni di applicazione e infrastruttura influiscano sull'esperienza dell'utente finale. Per capire l'impatto di modifiche o aggiornamenti sugli utenti finali, le aziende devono acquisire dati e log generati da applicazioni e infrastruttura, suddividerli in categorie e analizzarli, esaminando le possibili cause primarie dei problemi o le modifiche impreviste. Il monitoraggio attivo diventa ancora più importante quando la disponibilità del servizio non deve presentare interruzioni e a mano a mano che aumenta la frequenza degli aggiornamenti di applicazione e infrastruttura. Anche la creazione di allarmi o l'analisi dei dati in tempo reale sono attività che aiutano le organizzazioni a monitorare proattivamente i loro servizi.
Scopri come usare Amazon CloudWatch per monitorare parametri e log dell'infrastruttura »
Scopri come usare AWS CloudTrail per registrare e memorizzare in log le chiamate API di AWS »
Uno degli aspetti cruciali dell'approccio DevOps è l'aumento di comunicazione e collaborazione interne all'azienda. L'uso di strumenti DevOps e l'automatizzazione dei processi di distribuzione software prevede maggiore collaborazione tramite l'unione di flussi di lavoro e responsabilità in genere distribuiti tra sviluppatori e produzione. Su queste basi, i diversi team devono affidarsi alla condivisione delle informazioni e a una maggiore comunicazione mediante l'utilizzo di applicazioni, sistemi di gestione di problemi e progetti e pagine wiki. La comunicazione tra sviluppatori, produzione e, spesso, altri team aziendali (ad esempio marketing e vendite) ne risulta più efficiente, consentendo all'organizzazione nella sua interezza di allinearsi maggiormente ai propri obiettivi.
Il modello DevOps si basa sull'utilizzo di strumenti che consentano alle unità aziendali di rendere più rapide e affidabili la distribuzione e l'innovazione. Questi strumenti consentono di automatizzare alcune attività, semplificano la gestione di ambienti complessi e offrono ai tecnici il massimo controllo possibile in un ambiente ad alte prestazioni. AWS offre servizi creati per l'approccio DevOps e perfettamente integrati nel cloud AWS. Questi servizi faciliteranno l'adozione delle pratiche DevOps descritte in questa pagina.