Imposta la pipeline DevOps su AWS con il supporto di Flowing

Configura la CI/CD su AWS con il supporto di Flowing

Pubblicato il da

Alessandro

Alessandro

Cloud & DevOps

In passato, generalmente lo sviluppo di applicazioni e software veniva effettuato con il supporto di due team separati: il team di sviluppatori e il team che crea e gestisce l’infrastruttura.

Mentre il compito del team di sviluppatori era, come suggerisce il nome, creare e assicurare il funzionamento del codice sorgente di un software, la responsabilità di caricare l’applicazione su un server e risolverne eventuali errori spettava al team che crea e gestisce l’infrastruttura.

Questo processo, per quanto semplice in teoria, all’atto pratico risultava essere lungo nelle tempistiche e dispendioso nelle risorse impiegate.

La causa era dovuta principalmente al fatto che questi due team lavorassero separatamente e indipendentemente gli uni dagli altri.

Il team che crea e gestisce l’infrastruttura doveva per forza di cose attendere che il team di sviluppatori completasse la sua parte del progetto prima di poter iniziare a lavorare, mentre quest’ultimo raramente veniva coinvolto nelle attività di debug e pubblicazione del codice svolte dai loro colleghi.

Negli ultimi anni, invece, grazie alle continue innovazioni in campo informatico e tecnologico, questo processo lavorativo è diventato ormai obsoleto, grazie alla creazione e alla diffusione su larga scala di Amazon Web Services e, in particolare, dei servizi di cloud computing offerti da AWS.

Originariamente concepito per gestire l’intera infrastruttura del sito di eCommerce Amazon, Amazon Web Services è al giorno d’oggi una piattaforma irrinunciabile per qualsiasi realtà aziendale, grazie ai suoi oltre 200 servizi, l’impiego di tecnologie cloud e la diffusione della rete AWS su scala globale grazie a decine di cosiddette zone di disponibilità.

Grazie alle soluzioni cloud AWS, di cui il cloud computing è sicuramente uno dei servizi più importanti, viene meno la necessità di adoperare un metodo lavorativo come evidenziato in precedenza, perché consente ai team di sviluppatori e ai team che creano e gestiscono l’infrastruttura di collaborare ad un progetto e comunicare più efficacemente fin dalla sua fase concettuale, utilizzando il modello lavorativo DevOps.

Se dovessimo dare una definizione di DevOps, potremmo dire che si tratta di un modello pensato per rendere la creazione, la pubblicazione e la distribuzione di software in maniera estremamente agile, scalabile e gestibile all’interno dell’ambiente produttivo.

Eventuali problematiche causate ad esempio da un errore nel codice sorgente possono essere individuate più rapidamente e corrette con altrettanta celerità, senza dover allungare i tempi di inattività.

Il processo DevOps può essere riassunto brevemente in quattro fasi:

  1. Il team di sviluppo implementa ed apporta eventuali modifiche al codice sorgente direttamente all’interno di una repository accessibile e visionabile a tutti i membri del team
  2. Il team che crea e gestisce l’infrastruttura analizza il codice caricato all’interno della repository per individuarne potenziali errori e/o criticità
  3. In seguito a questo “controllo qualità”, il team di sviluppo può procedere con la compilazione della versione finale del codice sorgente pronto per essere implementato
  4. Infine, il team che crea e gestisce l’infrastruttura si occupa di caricare l’applicazione sul server

Per velocizzare ulteriormente questo processo, l’automazione delle attività può essere introdotta durante le fasi di pubblicazione e debug attraverso l’implementazione di AWS CodePipeline.

Nell’articolo di oggi parleremo di:

Cos’è il cloud computing

Una definizione che possiamo dare di cloud computing è l’offerta di servizi cloud come server, database, strumenti per networking e analytics e soluzioni software pensate per offrire opportunità di innovazione per ogni realtà aziendale, puntando sulla flessibilità delle risorse e l’economia di scala.

All’interno di un ecosistema come Amazon Web Services, questo significa avere accesso a numerosi servizi seguendo un modello economico definito pay per use, ossia l’utente (in questo caso, l’azienda) paga solo per ciò che effettivamente utilizza.

Le soluzioni di cloud computing sono estremamente vantaggiose perché aiutano a mantenere i costi operativi relativamente bassi, gestire l’infrastruttura in maniera più efficiente e scalare agilmente le proprie risorse solo in caso di necessità.

Quali sono i benefici del cloud computing

Il cloud computing si differenzia da altre soluzioni perché, come accennato poc’anzi, consente agli utenti di pagare solo per l’effettivo utilizzo di uno o più servizi, evitando di investire ingenti quantità di risorse (tanto economiche quanto umane) per server e data center non necessari.

In poche parole, viene meno la problematica legata al dover pensare a lungo termine su quelle che saranno (o potrebbero essere) le risorse da avere a propria disposizione.

Con l’aiuto del cloud AWS, è possibile incrementare o diminuire la capacità dei propri server o data center a seconda delle necessità e in maniera semplice e dinamica, con tempi di inattività inferiori a 15 minuti e costi molto bassi.

Questa flessibilità, si traduce in una migliore ottimizzazione dell’infrastruttura di un’azienda, perché si avrà sempre la possibilità di aumentare la capienza di un server solo se strettamente necessario, come ad esempio per gestire un flusso di traffico maggiore in determinati periodi dell’anno e ridurne la stessa una volta che il picco di attività sarà superato.

Quali sono i tipi di cloud computing

Il cloud computing in sé non è uno strumento definito, nel senso che si tratta di un concetto relativamente generico del come funziona il cloud AWS.

All’interno della definizione di cloud computing, possiamo ritrovare diverse soluzioni, ciascuna pensata per una determinata tipologia di attività:

  • Infrastructure as a service (IaaS): l’infrastruttura (IT) come servizio racchiude al suo interno tutte quelle soluzioni pensate per la gestione della stessa, dallo spazio per l’immagazzinamento di dati, a funzioni di networking passando per i software impiegati. Offre la migliore flessibilità e gestione delle risorse IT, ed è l’insieme di strumenti più conosciuto e utilizzato al giorno d’oggi.
  • Platform as a Service (PaaS): la piattaforma come servizi elimina il bisogno di effettuare manualmente determinate attività come ad esempio la gestione dell’infrastruttura, la pianificazione della capienza dei server e la manutenzione dei software, tutti elementi che contribuiscono a migliorare l’efficienza operativa.
  • Software as a Service (SaaS): il software come servizio è inteso come un modo per gestire prodotti di natura informatica come i software indipendentemente dal resto dell’infrastruttura. Coloro che si occupano della creazione del software ne sono gli unici responsabili per la manutenzione.

Definizione di data pipeline

Tradotto letteralmente in italiano, per data pipeline si intende un convogliamento di dati.

All’interno di una data pipeline, i dati vengono ordinati in serie, processati seguendo l’ordine stabilito e utilizzando i prodotti risultanti per future applicazioni.

Per certi versi, la data pipeline può essere considerata come la catena di montaggio di una fabbrica, dove si parte dalla materia prima o dal materiale grezzo e si arriva, gradualmente, ad un prodotto finito.

All’interno di un ambiente cloud, vi è inoltre la possibilità di eseguire queste operazioni in parallelo, perché diventa possibile canalizzare le istruzioni da eseguire a numerosi processi contemporaneamente, anziché farlo individualmente per ciascuno di essi.

Come innovare e far crescere il tuo business con AWS

Cos’è AWS CodePipeline

AWS CodePipeline può essere considerato come il metodo più recente per creare e distribuire software, inoltre ha portato con sé un cambiamento culturale dei metodi di lavoro all’interno delle aziende, consentendo un approccio agile nel ciclo di vita dello sviluppo di software.

Esistono diversi strumenti pensati appositamente per gestire questi processi e tipicamente il contributo umano, per così dire, è relativamente minimo.

L’obiettivo di AWS CodePipeline, infatti, è automatizzare il più possibile queste attività, consentendo agli sviluppatori di concentrarsi su altri aspetti del progetto.

I sopracitati strumenti rientrano nelle seguenti categorie:

1. Controllo del codice sorgente

Si tratta di una parte essenziale della pipeline, perché è durante questa fase che il codice sorgente viene caricato e testato all’interno della pipeline dagli sviluppatori.

Tutto ciò che è necessario per creare, compilare, testare e distribuire un codice sorgente è immagazzinato in una o più repository.

Ogni qualvolta un nuovo codice viene aggiunto alla repository, innesta l’intero processo sopra elencato, partendo dalla compilazione del codice.

Man mano che il progetto prende forma, la pipeline viene gradualmente divisa in processi paralleli.

Questo avviene per consentire la distribuzione del codice in altri sistemi o all’interno di container.

2. Cos’è la containerizzazione?

Si può pensare alla containerizzazione come una serie di raccoglitori all’interno dei quali sono contenute sezioni di codice e altri strumenti necessari per lanciare il codice stesso senza errori.

I container, inoltre, possono essere implementati e utilizzati all’interno di qualsiasi sistema operativo.

Questo significa che è possibile, ad esempio, scrivere un codice sorgente su un ambiente Windows e condividerlo con un ambiente Linux, ed entrambi gli ambienti saranno in grado di lanciare lo stesso codice senza problemi.

Tutti i file e le librerie necessarie per il corretto funzionamento di un container sono contenuti all’interno dello stesso, rendendo i container “portatili”, ossia in grado di funzionare all’interno di qualsiasi sistema e senza la necessità di ulteriori configurazioni.

3. Strumenti per la gestione della configurazione dei server

Per gestione della configurazione dei server si può utilizzare AWS OpsWorks che fornisce istanze gestite di Chef e Puppet.

Chef e Puppet sono piattaforme di automazione che permettono di utilizzare del codice per automatizzare le configurazioni dei tuoi server. OpsWorks utilizza Chef e Puppet per automatizzare il modo in cui vengono configurati, distribuiti e gestiti i server in tutte le istanze Amazon EC2 o in tutti gli ambienti di calcolo locali.

In parole povere, si tratta di server principali i quali contengono al loro interno istruzioni e configurazioni per ciascun agente (o elemento) presente all’interno di un’infrastruttura.

Per gestire la configurazione, si possono applicare generalmente due metodi conosciuti come push e pull:

  • Con il metodo push, il sistema informa ogni agente di verificare se sia necessario o meno aggiornare la piattaforma o se l’attuale configurazione sia corretta e/o già aggiornata.
  • Il metodo pull, invece, è operato dagli strumenti Chef e Puppet, i quali interrogano periodicamente il sistema per verificare se durante quell’arco temporale siano stati effettuati o meno dei cambiamenti.

4. Strumenti di monitoraggio per lo sviluppo di AWS CodePipeline

Il monitoraggio della piattaforma è un punto chiave di una pipeline di successo.

Gli strumenti di monitoraggio aiutano a verificare se ciascun cambiamento effettuato al software abbia offerto dei benefici o meno.

Possono anche essere utilizzati per informare il sistema circa lo stato di sovraccarico dell’infrastruttura, tenendo traccia del traffico dati.

Se dovessero sopraggiungere eventuali problemi, i sistemi di monitoraggio saranno in grado di intercettarli prima che essi vadano ad inficiare l’utilizzo di un servizio o di un’applicazione da parte dell’utente.

Come implementare una pipeline su AWS con Flowing

Come abbiamo detto in precedenza, la AWS CodePipeline è pensata per aiutare gli sviluppatori a creare, rilasciare e distribuire un’applicazione in maniera agile ed efficace.

Per facilitare ulteriormente questo processo, Amazon Web Services offre una serie di servizi pensati appositamente per gestire attività di cloud computing, creazione dei database, gestione delle infrastrutture e via discorrendo, tra i quali è possibile trovare.

Ciascuno di questi servizi che andremo a vedere tra poco è inoltre pensato principalmente per una facile integrazione con gli altri presentati oggi.

Ovviamente, da un punto di vista puramente teorico, non è obbligatorio adottarli tutti, perché ciascuna realtà aziendale avrà le sue necessità, i suoi bisogni e i suoi obiettivi da raggiungere.

Tuttavia, noi di Flowing riteniamo che il massimo potenziale di tutti questi servizi possa essere meglio estrapolato mediante una “collaborazione” omogenea degli stessi.

Con oltre 200 servizi tra cui scegliere, a primo impatto Amazon Web Services potrebbe sembrare disorientante, ma possiamo assicurare che non è così, e i seguenti servizi non soltanto fanno della facilità di utilizzo il loro punto di forza, ma sono anche strumenti che noi stessi di Flowing usiamo quotidianamente nella nostra attività lavorativa.

Amazon EC2

Amazon Elastic Compute Cloud si occupa di creare server virtuali chiamati istanze, per effettuare principalmente operazioni di calcolo.

Come suggerisce il nome, Amazon EC2 è in grado di gestire automaticamente numerose tipologie di istanze diverse, ed è in grado di ampliarne o ridurne le dimensioni automaticamente in caso di necessità

Amazon S3

Amazon Simple Storage Service è un servizio pensato per immagazzinare e archiviare dati, strumenti, software, codici sorgenti e backup dell’intera infrastruttura.

Si può pensare ad Amazon S3 come una serie di contenitori dalla capacità virtualmente infinita grazie alla loro scalabilità, noti in gergo come “bucket”.

Inoltre, mediante l’utilizzo di un servizio “secondario” conosciuto come Amazon Elastic Block Store, diventa possibile includere all’interno di un bucket di Amazon S3 anche tutte le istanze di Amazon EC2 delle quali si potrebbe avere bisogno.

Amazon Relational Database Services

Amazon RDS si occupa principalmente di mettere a disposizione dei servizi di database completamente gestiti.

Integrando Amazon RDS con Amazon Codepipeline (che vedremo tra poco), diventa possibile gestire molto più facilmente i propri database presenti sul cloud AWS.

Amazon Virtual Private Cloud Networking

Amazon VPC permette un controllo totale a livello amministrativo sull’intero network virtuale di server e database presenti sul cloud AWS.

L’utente ha il controllo completo sul proprio ambiente virtuale di rete, incluse la selezione del proprio intervallo di indirizzi IP, la creazione di sottoreti e la configurazione di tabelle di routing e di gateway di rete. È possibile utilizzare sia IPv4 sia IPv6 per la maggior parte delle risorse all’interno del VPC, contribuendo a garantire un accesso sicuro e facile a risorse e applicazioni.

AWS Codepipeline

Si tratta di un servizio pensato per automatizzare il rilascio di nuove pipeline così da consentire il rilascio di aggiornamenti di una o più applicazioni con più rapidità e affidabilità.

Grazie ad AWS Codepipeline, è possibile creare, testare e distribuire ogni nuovo aggiornamento del codice sorgente di un’applicazione man mano che esso viene modificato, basandosi su un modello di rilascio definito dall’utente.

AWS Codepipeline, infine, offre la possibilità di una facile integrazione con servizi di terze parti come ad esempio GitHub.

GitHub non fa parte dei servizi offerti dal cloud AWS, ma si tratta di una delle più popolari e delle più utilizzate piattaforme di repository dove gli utenti possono pubblicare i codici sorgenti open source delle loro applicazioni o, in un contesto aziendale, avere accesso a “Git” private per lo sviluppo interno delle stesse.

AWS Data Pipeline

Quest’ultimo servizio è forse uno dei più importanti tra quelli presentati oggi, perché il suo compito è quello di assistere l’utente nell’elaborazione, nello spostamento e nella gestione dei dati tra servizi AWS diversi presenti all’interno del cloud.

Con Amazon Data Pipeline, è possibile ad esempio accedere ai dati contenuti all’interno di un bucket di Amazon S3 o di un’istanza Amazon EC2, consentendo la modifica dei dati stessi in maniera flessibile, scalabile e dai costi contenuti.

Inizia ora ad usare la AWS CodePipeline nella tua attività lavorativa

Come abbiamo visto nel corso di questo articolo, impostare un sistema di pipeline all’interno di Amazon Web Services è estremamente facile, soprattutto se si adotta l’approccio DevOps.

Aiuta inoltre snellire il workflow dei team di sviluppatori e team che creano e gestiscono l’infrastruttura, risparmiando tempo e risorse, così come riduce le probabilità che trapelino uno o più errori all’interno del codice sorgente di un’applicazione, garantendo una maggiore sicurezza.

Se il tuo obiettivo è quello di velocizzare i processi di sviluppo, di pubblicazione e di rilascio di applicazioni all’interno della tua azienda, i servizi cloud AWS sono indubbiamente la scelta migliore e con Flowing impostare una pipeline su AWS è più facile che mai.

Come Advanced Tier Partner per AWS, il nostro obiettivo è quello di accompagnare i nostri clienti e i nostri partner in ogni fase del percorso di migrazione sul cloud AWS, dalla creazione all’evoluzione di infrastruttura.

Come ti abbiamo mostrato oggi, l’approccio DevOps è probabilmente uno dei metodi di lavoro migliori quando si opera all’interno di un ecosistema cloud, e l’implementazione di un sistema di pipeline all’interno del cloud AWS può essere la mossa vincente per far fare alla tua azienda un salto di qualità e distinguerla dalle altre.

Il 29 Aprile abbiamo deciso di organizzare il primo evento in presenza nelle Marche completamente gratuito, nel corso del quale affronteremo più in dettaglio i servizi e le opportunità offerte da AWS e mostreremo alcune applicazioni pratiche dei concetti di innovazione tramite i nostri casi studio.

Come innovare e far crescere il tuo business con AWS