Definizione e strumenti Open Source del Platform Engineering
La crescente adozione di microservizi e container ha introdotto nuove sfide e ha permesso la formazione di team di Platform Engineering. In molti aspetti, il ruolo del platform engineer è simile alle figure DevOps. Ci sono però alcuni fattori che stanno sempre più aumentando le distanze tra queste figure professionali, come la crescente popolarità e versatilità dei provider cloud, di Kubernetes e dal concetto di Infrastructure as Code (IaC). Questi fattori introducono un nuovo e ampio spettro di possibilità per le aziende, come il service discovery e la capacità di scalare orizzontalmente con facilità.
Le imprese che ancora operano su infrastrutture legacy stanno attivamente preparandosi alla “grande migrazione al cloud”, una transizione prontamente supportata dai fornitori di servizi cloud. Con questa migrazione emerge una crescente necessità di competenze specializzate nel cloud e nell’orchestrazione di container: sono proprio i team di Platform Engineering a colmare questo divario.
Al contrario, le aziende nate nel contesto della rivoluzione cloud o poco prima non condividono le stesse preoccupazioni, avendo pochi o nessun sistema legacy da gestire.
Nonostante alcune opinioni possano considerare il ruolo del Platform Engineer come una semplice etichetta alternativa per compiti tradizionalmente svolti dagli specialisti infrastrutturali, questa prospettiva è limitata. Vediamo perché.
> Scopri il nostro servizio di Progettazione e Orchestrazione Container
Che cos’è il Platform Engineering
Secondo Gartner, il Platform Engineering è
un approccio tecnologico emergente che può accelerare l’erogazione delle applicazioni e il ritmo a cui queste producono valore per il business.
Il Platform Engineering fa riferimento al processo che fornisce a software engineer e sviluppatori tutte le risorse di cui hanno bisogno per eseguire dall’inizio alla fine le operazioni del ciclo di vita di una particolare applicazione. I Platform Engineer spesso creano ambienti integrati che forniscono funzionalità self service agli sviluppatori. In altre parole, è un insieme di strumenti, processi e workflow che aiutano la gestione e l’ottimizzazione completa delle operazioni: il platform engineer gestisce la piattaforma alla base degli strumenti di sviluppo, dei servizi e dell’ambiente informatico.
Gli obiettivi del Platform Engineering
La progettazione di piattaforme interne efficaci richiede una costante attenzione a una serie di obiettivi chiave, tra cui:
- La produttività degli sviluppatori: una piattaforma efficace non può limitarsi a diminuire la complessità dei task, ma migliora e accelera attivamente gli sforzi di chi sviluppa.
- Self service: gli sviluppatori dovrebbero essere liberi di utilizzare la piattaforma e i servizi necessari senza nessun intervento del team di platform engineering.
- Sicurezza, non sono nel senso di accesso agli utenti, ma anche nel senso di protezione della proprietà intellettuale e dei dati utilizzati nella codebase.
- Resilienza, in termini di scalabilità e disponibilità per soddisfare i fabbisogni di performance dei developer.
- Osservabilità, ossia l’integrazione con strumenti di monitoraggio delle performance.
- Collaborazione: molte persone potrebbero dover utilizzare la piattaforma, che deve quindi essere integrata con strumenti collaborativi.
- Miglioramento continuo, nelle forme di troubleshooting e report, insieme ad aggiornamenti periodici e miglioramenti agli strumenti, alle API, ai flussi di lavoro e alle policy.
5 strumenti open source di Platform Engineering
Kubernetes
Kubernetes è una delle piattaforme di orchestrazione di container open source più apprezzate: fornisce infatti un valido aiuto nel processo di automazione del container, dalla sua configurazione, alla scalabilità, dalla gestione della rete, alla sicurezza. Consente agli sviluppatori di confezionare cluster di container per distribuzioni simili su macchine diverse e consente di distribuire automaticamente i container su nodi di calcolo nelle macchine virtuali.
Kubernetes consente ai team di personalizzare il processo di integrazione continua e la distribuzione continua (CI/CD) per adattarsi alle esigenze degli sviluppatori.
In altre parole, Kubernetes offre un modo flessibile e potente per gestire le applicazioni containerizzate, semplificando il processo di deployment e fornendo un ambiente affidabile e scalabile per le applicazioni legacy e le nuove soluzioni cloud. La documentazione esaustiva e il supporto attivo della community contribuiscono a rendere Kubernetes una scelta affidabile per i team di sviluppo impegnati nell’integrazione di applicazioni nell’ambiente cloud.
> Scopri la formazione su Kubernetes
Pensiamo ad esempio ad un’applicazione complessa con vari microservizi che devono interagire tra loro. Kubernetes consente di definire chiaramente la configurazione di ciascun servizio, gestire le dipendenze e orchestrare il deployment su un cluster di container. Questo livello di controllo e automazione è fondamentale per garantire la coerenza e l’affidabilità dell’ambiente.
Ansible
Ansible è uno strumento di sviluppo di applicazioni, provisioning cloud e gestione della configurazione che aiuta a modificare i file di configurazione, configurare gli ambienti di runtime e impostare la configurazione di sicurezza per installare o aggiornare il software. Questa piattaforma consente l’automazione dell’intero flusso di lavoro.
Ansible distribuisce applicazioni a più livelli in modo affidabile, senza la necessità di scrivere codice personalizzato, semplificando drasticamente le complesse operazioni di deployment.
Integrare Ansible in un ambiente di platform engineering permette la gestione semplificata della configurazione, la distribuzione affidabile delle applicazioni e l’automazione efficiente dei processi. Utilizzando Ansible, è possibile orchestrare in modo coerente e ripetibile le attività di deployment e configurazione, portando maggiore coerenza e sicurezza nell’ambiente cloud. La flessibilità di Ansible nell’interagire con vari componenti, come piattaforme cloud e dispositivi di rete, lo rende uno strumento versatile per soddisfare le esigenze di automazione del platform engineering.
> Scopri anche Red Hat Ansible Automation Platform
Supponiamo ad esempio di dover implementare un aggiornamento su tutti i server di un’applicazione distribuita su più ambienti. Utilizzando Ansible, è possibile definire un playbook che specifica le azioni necessarie per l’aggiornamento, dalla modifica dei file di configurazione al riavvio dei servizi. Questo playbook può essere eseguito in modo coerente su tutti i nodi, garantendo un deployment uniforme e sicuro.
Terraform
Terraform è uno strumento di infrastructure-as-code (IaC) che facilita la definizione, la creazione e la gestione dell’infrastruttura in modo dichiarativo e permette l’automazione del provisioning e la gestione delle risorse in ambienti cloud e on-premise. Si integra inoltre con AWS, OpenStack, Google Cloud, Microsoft Azure, e Oracle Cloud.
Terraform supporta anche la creazione di moduli, che permettono di organizzare e riutilizzare porzioni di configurazione, semplificando notevolmente la gestione di configurazioni complesse e favorendo la riusabilità del codice.
Integrare Terraform nell’ambiente di Platform Engineering è un modo efficiente per automatizzare il provisioning delle risorse necessarie per supportare le applicazioni legacy e nuove implementazioni cloud. L’approccio dichiarativo, la multi-cloud capability e la gestione basata su codice contribuiscono a rendere Terraform uno strumento essenziale nella gestione dell’infrastruttura.
> Scopri il nostro corso di Terraform
Supponiamo di dover creare una configurazione complessa che includa istanze virtuali, un servizio di bilanciamento del carico e un database gestito. Utilizzando Terraform, è possibile definire in modo dichiarativo l’intera infrastruttura come codice, specificando le risorse necessarie e le loro relazioni in un file di configurazione Terraform.
Supponiamo che, in futuro, si decida di spostare parte dell’infrastruttura da AWS a Azure. Con Terraform, è sufficiente modificare la configurazione, e il processo di provisioning verrà eseguito coerentemente su entrambe le piattaforme.
GitLab
GitLab è un gestore di repository Git basato su web, utilizzato principalmente per supportare il processo di sviluppo, dalla pianificazione alla gestione del codice sorgente, fino al testing, alla manutenzione e al deployment. GitLab è uno dei pacchetti più completi per migliorare l’infrastruttura e supporta i team in ogni fase dello sviluppo riducendo i carichi cognitivi.
Consente inoltre una revisione dettagliata del codice e gestisce il processo di integrazione continua e distribuzione continua (CI/CD) in un’interfaccia unica, supporta l’automazione dell’infrastruttura come codice, l’orchestrazione dei container e la gestione della configurazione. Questo permette di definire e gestire l’infrastruttura necessaria come parte integrante del processo di sviluppo.
GitLab fornisce strumenti per la collaborazione tra membri del team, facilitando la comunicazione e il lavoro condiviso e traccia le modifiche, semplificando il monitoraggio delle attività di sviluppo nel tempo.
Doppler
Doppler è uno strumento di “secret management”, con un buon livello di automazione: fornisce una piattaforma centralizzata per gestire i dati sensibili, consentendo un controllo più efficace e una gestione centralizzata dei secrets in diversi ambienti.
Immagina di dover gestire le chiavi API, le credenziali di accesso e altri dati sensibili necessari per il corretto funzionamento delle tue applicazioni. Doppler consente di centralizzare e gestire in modo sicuro questi secrets, garantendo un controllo efficace sulla loro distribuzione in diversi ambienti. Gli utenti possono facilmente aggiungere, modificare o revocare l’accesso ai segreti attraverso un’interfaccia user-friendly, migliorando la produttività e riducendo la possibilità di errori umani.
Inoltre, l’automazione del recupero e dell’archiviazione contribuisce a garantire la coerenza e la sicurezza nei vari ambienti di deployment.
Questi strumenti, quando integrati sinergicamente, forniscono un arsenale potente per i team di platform engineering e consentono una gestione coesa e scalabile di infrastrutture complesse.
La continua evoluzione delle tecnologie cloud, la crescente complessità delle applicazioni distribuite e l’importanza della sicurezza informatica aprono nuove frontiere. È probabile che il platform engineering abbraccerà sempre più l’intelligenza artificiale, l’apprendimento automatico e l’analisi dei dati per ottimizzare le decisioni operative e migliorare l’efficienza. Dall’altra parte, si vedrà un’enfasi crescente su pratiche di sicurezza avanzate per proteggere le applicazioni in un panorama che presenta minacce sempre più sofisticate.
Fonti:
Bigelow, S. J. (2023). What is platform engineering?: Definition from TechTarget. IT Operations. https://www.techtarget.com/searchitoperations/definition/platform-engineering
Fusari, G. (2023). Platform Engineering, La Disciplina tecnologica che accelera DevOps. ZeroUno. https://www.zerounoweb.it/cio-innovation/metodologie/platform-engineering-la-disciplina-tecnologica-che-accelera-devops/
GeeksforGeeks. (2024). Top 10 platform engineering tools you should consider in 2024. GeeksforGeeks. https://www.geeksforgeeks.org/platform-engineering-tools/
What is platform engineering?. Gartner. (2023). https://www.gartner.com/en/articles/what-is-platform-engineering
The rise of Platform Engineering. Software Engineering Daily. (2021). https://softwareengineeringdaily.com/2020/02/13/setting-the-stage-for-platform-engineering/