Progettare Internal Developer Platform su Azure: costruire le fondamenta
By Mirko Peters ·
Bentornati sul blog di accompagnamento al podcast! In questo approfondimento vogliamo ampliare un tema che domina le discussioni sull'architettura in tutto il settore tecnologico: gli Internal Developer Platform, o IDP. Se hai ascoltato il nostro ultimo episodio, sai che abbiamo parlato di come il carico cognitivo stia silenziosamente frenando la velocità degli sviluppatori. Oggi andiamo oltre. Ve
Automatically translated with AI from the original post. Read the English original
Bentornati sul blog di accompagnamento al podcast! In questo approfondimento vogliamo ampliare un tema che domina le discussioni sull'architettura in tutto il settore tecnologico: gli Internal Developer Platform, o IDP. Se hai ascoltato il nostro ultimo episodio, sai che abbiamo parlato di come il carico cognitivo stia silenziosamente frenando la velocità degli sviluppatori. Oggi andiamo oltre. Vedremo come costruire un IDP solido, scalabile e sicuro, nativamente su Microsoft Azure, sfruttando i paradigmi cloud moderni, le strategie di containerizzazione e i principi dell'infrastruttura come codice.
L'organizzazione IT moderna si trova davanti a un paradosso. Il cloud ha dato agli sviluppatori un potere senza precedenti, ma allo stesso tempo li sommerge di complessità operativa. Passano più tempo a combattere con topologie di rete, configurazioni di gestione delle identità e degli accessi e pipeline di deployment che a scrivere logica di business. Un Internal Developer Platform risolve questo problema fungendo da livello di astrazione curato. Non limita gli sviluppatori; al contrario, li rende più efficaci offrendo percorsi privilegiati (golden path) che portano in produzione in modo rapido e sicuro. Vediamo come progettare queste fondamenta su Azure.
Introduzione agli Internal Developer Platform su Azure
Prima di immergerci negli aspetti tecnici dei servizi Azure, chiariamo cos'è davvero un IDP e perché Azure sia in una posizione unica per ospitarlo. Un IDP non è un singolo software che si acquista già pronto. È una raccolta productizzata di strumenti interni, servizi e flussi di lavoro infrastrutturali, assemblati in un portale per sviluppatori coeso. Si colloca tra gli sviluppatori e l'infrastruttura cloud sottostante, traducendo le intenzioni di alto livello degli sviluppatori in risorse cloud sicure, conformi e pronte per la produzione.
Azure offre un ecosistema ampio di primitive di livello enterprise. Tuttavia, esporre direttamente queste primitive agli sviluppatori porta spesso a deriva di configurazione, vulnerabilità di sicurezza e risorse orfane. Progettando un IDP su Azure, i platform engineer possono incapsulare questi servizi nativi in modelli standardizzati e orientati a criteri precisi. Ciò significa che uno sviluppatore può richiedere un ambiente microservizi completamente configurato, con database e livello di cache collegati, senza dover avere una laurea in networking di Azure o in Role-Based Access Control.
Pilastri fondamentali di un IDP moderno
Quando ti siedi a progettare la piattaforma, devi ancorare le tue decisioni a quattro pilastri: self-service, golden path, astrazione e guardrail. Senza questi, il tuo IDP rischia di diventare l'ennesimo sistema di ticketing o l'ennesima pagina wiki non documentata.
Self-service senza l'overhead operativo
Il self-service è il cuore pulsante di qualsiasi IDP. In un'impostazione tradizionale, quando uno sviluppatore ha bisogno di un nuovo ambiente di staging o di un'istanza di Cosmos DB, apre un ticket in Jira, attende che il team di piattaforma lo esamini, attende che il reparto operations lo provisioni e spera che la configurazione corrisponda a quella di produzione. Un IDP su Azure automatizza l'intero ciclo di vita. Attraverso un portale centralizzato, gli sviluppatori possono avviare flussi di lavoro self-service che effettuano il provisioning delle risorse in pochi minuti, riducendo drasticamente il lead time per le modifiche.
Golden path e livelli di astrazione
I golden path sono modalità supportate e orientate a precise scelte per svolgere le attività all'interno dell'organizzazione. Non eliminano la flessibilità; eliminano l'attrito. Astraendo la complessità sottostante di Azure dietro semplici file di configurazione, come un unico manifest dell'applicazione, gli sviluppatori dichiarano cosa vogliono distribuire, mentre l'IDP gestisce come la distribuzione avviene su Azure.
Sfruttare i servizi Azure per l'infrastruttura nativa
Costruire un IDP su Azure significa scegliere i servizi fondamentali giusti per gestire calcolo, archiviazione, rete e identità. Vediamo come mappare i requisiti della piattaforma sui servizi nativi di Azure.
Gestione delle identità e degli accessi con Microsoft Entra ID
La sicurezza inizia dall'identità. Microsoft Entra ID (in precedenza Azure Active Directory) è la base di sicurezza del tuo IDP. Integrando il portale della piattaforma con Entra ID puoi applicare il Single Sign-On (SSO) e associare i gruppi di sviluppatori a funzionalità specifiche della piattaforma. Usando le identità gestite di Azure, le applicazioni distribuite possono accedere in modo sicuro ad altre risorse di Azure, come Azure Key Vault o Azure SQL, senza inserire credenziali nei file di configurazione o nei repository.
Astrazioni per dati e archiviazione
Le applicazioni hanno bisogno di dati, ma i team di piattaforma non dovrebbero dover creare manualmente i database ogni volta che un team avvia un nuovo progetto. Puoi usare Azure Service Operator per Kubernetes oppure i modelli di Azure Resource Manager (ARM), inseriti in flussi di lavoro self-service, per effettuare il provisioning on demand di servizi gestiti come Azure Database for PostgreSQL, Azure Cosmos DB o Azure Cache for Redis. L'IDP garantisce che questi database vengano sottoposti a provisioning con crittografia a riposo, regole del firewall appropriate e backup automatizzati abilitati per impostazione predefinita.
Strategie di containerizzazione e orchestrazione
I container sono la lingua franca delle applicazioni cloud-native moderne. Standardizzare il modo in cui le applicazioni vengono pacchettizzate ed eseguite è essenziale per il successo di un IDP.
Azure Kubernetes Service come motore di calcolo
Per la maggior parte delle aziende moderne, Azure Kubernetes Service (AKS) funge da motore di calcolo principale per l'IDP. AKS offre la scalabilità, la portabilità e le funzionalità di orchestrazione necessarie per eseguire microservizi su larga scala. Tuttavia, gli sviluppatori non dovrebbero dover scrivere manifesti YAML di Kubernetes grezzi. L'IDP dovrebbe nascondere la complessità di controller Ingress, criteri di rete e attestazioni di volume persistente dietro astrazioni di carico di lavoro di alto livello.
Registri dei container e sicurezza della supply chain
Azure Container Registry (ACR) si integra perfettamente con AKS e costituisce un elemento fondamentale della strategia per i container. L'IDP dovrebbe automatizzare la pipeline che va dal commit del codice alla creazione dell'immagine del container, sfruttando strumenti come Microsoft Defender per i container per analizzare le immagini alla ricerca di vulnerabilità prima che raggiungano un cluster. Integrando ACR nei flussi di lavoro della piattaforma, garantisci che in produzione possano essere distribuite solo immagini attendibili e analizzate.
Principi di Infrastructure-as-Code per il platform engineering
L'Infrastructure-as-Code (IaC) è imprescindibile quando si costruisce un IDP. Ogni componente dell'infrastruttura gestita dalla piattaforma deve essere definito, sottoposto a controllo di versione e distribuito tramite pipeline automatizzate.
Scegliere gli strumenti IaC nell'ecosistema Azure
Azure supporta un'ampia gamma di strumenti IaC. Bicep è il linguaggio specifico di dominio di Microsoft per la distribuzione dichiarativa delle risorse di Azure, con una sintassi più pulita rispetto ai tradizionali modelli ARM e con supporto nativo alle funzionalità di Azure. In alternativa, Terraform (o OpenTofu) è ampiamente adottato negli ambienti multi-cloud e aziendali. Qualunque strumento tu scelga, l'IDP dovrebbe astrarre questi script dallo sviluppatore, eseguendoli in background quando una richiesta di provisioning viene approvata.
Gestione dello stato e progettazione modulare
Per mantenere la piattaforma gestibile nel tempo, costruisci una libreria di moduli di infrastruttura riutilizzabili. Ad esempio, crea un modulo standard "web-api-module" che raggruppi una distribuzione di App Service o AKS con un database associato e un'istanza di monitoraggio. Conserva lo stato IaC in modo sicuro negli account di Archiviazione di Azure con il controllo delle versioni dei BLOB abilitato, così che il team di platform engineering mantenga un registro di controllo affidabile di tutte le modifiche all'infrastruttura in tutte le sottoscrizioni.
Integrare guardrail di sicurezza e conformità
Una preoccupazione diffusa tra la dirigenza quando si adottano piattaforme self-service è la perdita di controllo su sicurezza e conformità. Un IDP efficace ribalta questa prospettiva, anticipando la sicurezza (shift left) e integrando i guardrail direttamente nei flussi di lavoro della piattaforma.
Azure Policy come strumento di applicazione automatica
Azure Policy è il tuo migliore alleato nella progettazione dei guardrail della piattaforma. Invece di verificare manualmente le risorse, puoi usare Azure Policy per applicare automaticamente gli standard aziendali, come limitare la creazione di risorse a specifiche aree di Azure, richiedere la crittografia su tutti gli account di archiviazione o imporre determinati tag di rete. Se uno sviluppatore tenta di effettuare il provisioning di una risorsa che viola questi criteri, l'IDP la intercetta durante la fase di convalida, fornendo un riscontro immediato.
Gestione dei segreti e integrazione con Key Vault
I segreti hardcoded sono una vulnerabilità di sicurezza ricorrente. Il tuo IDP dovrebbe imporre per impostazione predefinita una gestione sicura dei segreti. Integra Azure Key Vault nei flussi di distribuzione in modo che segreti delle applicazioni, chiavi API e stringhe di connessione vengano inseriti in modo sicuro a runtime, completamente al riparo dalla vista degli sviluppatori e dai repository di controllo del codice sorgente.
Creare il portale self-service per gli sviluppatori
Tutti questi elementi di base (identità, calcolo, IaC e sicurezza) devono confluire in un unico punto di accesso: il portale per gli sviluppatori. È l'interfaccia utente del tuo IDP.
Adottare Backstage per portali orientati ad Azure
Framework open source come Backstage di Spotify sono diventati lo standard de facto per la creazione di portali per gli sviluppatori. Backstage consente di creare un catalogo del software, gestire i modelli (noti come modelli software) e integrare plugin. Puoi creare plugin Backstage personalizzati che comunicano direttamente con le API di Azure, permettendo agli sviluppatori di creare risorse Azure, visualizzare l'integrità dei servizi e monitorare le pipeline di distribuzione da un'unica dashboard.
Progettare un'esperienza per gli sviluppatori intuitiva
Quando progetti il portale, tratta gli sviluppatori come clienti. L'esperienza utente deve essere priva di attriti. Uno sviluppatore dovrebbe poter accedere al portale, selezionare il modello « Microservice with SQL Backend », compilare un semplice modulo con il nome del servizio e il team proprietario, e fare clic su Invia. Nel giro di pochi minuti, l'IDP dovrebbe eseguire il provisioning dell'infrastruttura Azure, generare il repository GitHub con il codice di base, configurare la pipeline CI/CD e registrare il servizio nel catalogo interno.
Misurare il successo e i prossimi passi
Costruire un IDP non è un progetto con una data di fine prestabilita; è un percorso di prodotto continuo. Una volta che la piattaforma è attiva, devi misurarne l'impatto per giustificare l'investimento e migliorare costantemente l'esperienza degli sviluppatori.
Metriche chiave da monitorare
Concentrati su metriche che riflettano la velocità di sviluppo e la stabilità della piattaforma. Monitora il tempo necessario ai nuovi sviluppatori che entrano in azienda per arrivare al primo « hello world », la frequenza di distribuzione, la percentuale di modifiche che causano errori e il tempo medio di ripristino (MTTR). Inoltre, esegui regolarmente sondaggi sulla soddisfazione degli sviluppatori per capire dove si trovano ancora gli attriti nei flussi di lavoro della piattaforma.
Da qui in avanti
Inizia in piccolo. Non cercare di costruire subito una piattaforma enterprise su larga scala. Scegli un singolo caso d'uso, ad esempio standardizzare le distribuzioni dei container o automatizzare il provisioning dei database, e costruisci attorno ad esso una minimum viable platform. Raccogli il feedback dei primi team che adottano la piattaforma, itera sui tuoi golden path ed espandi gradualmente le funzionalità della piattaforma in tutta l'organizzazione.
Costruendo il tuo Internal Developer Platform nativamente su Azure, non stai solo automatizzando le distribuzioni: stai creando un motore per una crescita sostenibile dell'ingegneria. Grazie per la lettura, e non perdere l'episodio del podcast per una discussione audio più approfondita su questo tema. Buona architettura!