
Diciamo la verità, anche tu come me senti spesso parlare di serverless. E forse ti chiedi: è solo una moda? E’ davvero utile? La risposta è si, ed è qui per rimanere. Quindi esplora il modello serverless e scopri i vantaggi per la tua infrastruttura
Ebbene, cosa è il serverless? Il serverless (in parole molto povere) è un modello di sviluppo cloud native che consente agli sviluppatori di creare ed eseguire logica applicativa senza gestire i server. Certo, il codice verrà sempre eseguito alla fine su un server, ma non sarai tu a gestirlo.
Function as a Service: una interessante declinazione del serverless computing
Il concetto di serverless si declina in backend as a service e function as a service.
Qui parleremo in particolare del FaaS (function as as service) che permette di eseguire del codice all’interno di “contenitori” in risposta a degli eventi.
Questo modello consente agli sviluppatori di creare, eseguire e gestire i pacchetti applicativi come funzioni, senza doversi occupare della propria infrastruttura.
FaaS è una modalità di esecuzione dell’elaborazione serverless, con la quale gli sviluppatori scrivono la logica di business che viene eseguita in container Linux totalmente gestiti da una piattaforma.
Una funzione quindi, è un elemento software che esegue la logica di business. Le applicazioni sono costituite da numerose funzioni.
Questo paradigma di sviluppo permette di gestire il codice in modo particolarmente efficiente anche dal punto di vista economico. Facciamo un esempio: tu hai sviluppato delle web api o dei processi che hai pubblicato su un server in cloud ad un costo “x” mensile.
Se uno dei processi pubblicati necessita di maggiori prestazioni, dovrai inevitabilmente scalare tutto il server aumentando risorse, e di conseguenza, il costo.
Ed ecco il problema! Facendo così andrai a spendere di più anche per le altre funzioni che in realtà non avevano bisogno di maggiori performance!
Con il serverless computing (in particolare stiamo parlando di FaaS) invece puoi pubblicare i tuoi processi in “contenitori” separati. Ogni contenitore sarà una risorsa cloud diversa dalle altre. Ad esempio potrebbe avere anche un runtime differente dagli altri.
Così dovrai incrementare se necessario solo le risorse dello specifico “contenitore” che lo richiede, non di tutte quante!
Inoltre, potrai usare linguaggi differenti, e questo ti tornerà utile in quanto potrai usare la tecnologia più efficiente in base al caso d’uso.
Ma c’è dell’altro: il modello di costo non è basato, come nei casi delle virtual machine o dei servizi app, su un canone mensile. In realtà viene fatturato solo il tempo di esecuzione. Così che in molti casi puoi anche ottenere il tuo servizio a costi davvero vantaggiosi, se non gratis.
Comunque, se vuoi approfondire l’argomento da un punto di vista tecnico ti consiglio questo articolo di Martin Fowler!
Perchè dovresti valutare il serverless, e cosa puoi guadagnarci.
Per spiegarti il perché, ti racconto brevemente l’architettura utilizzata per avviare un nuovo progetto presso un cliente.
Ho avviato da poco tempo una collaborazione con un grosso operatore del turismo che prevede lo sviluppo di un sistema di integrazione dati, analisi e business intelligence.
Per velocizzare le operazioni e non dare al cliente l’incombenza della gestione server ho deciso di sviluppare tutto con un approccio cloud-native, ovvero:
- database Azure SQL
- Azure Storage per il deposito dei file csv (sono una parte delle fonte dati da importare)
- Azure Functions (in python, per i processi ELT e di elaborazione)
- Power BI per la visualizzazione.
Costi? Circa 40€ mensili iniziali con la bontà del fatto che se il progetto proseguirà e saranno necessarie altre risorse, basterà scalare il sistema.
La comodità quindi delle Azure Functions? Poter progettare le pipeline di dati pensando solo alla logica, alla gestione dei dati, ed alle prestazioni.
Così lavorando, la realizzazione di prototipi e successivi affinamenti diventa un lavoro scorrevole e molto più agile rispetto alla messa in opera e configurazione di un server.
Ah, dimenticavo… al momento, visto che siamo ancora in una fase prototipale e le funzioni non richiedono troppe risorse…beh…sono gratis!
L’implementazione del servizio FaaS di Microsoft: Azure Functions!
Azure Functions è l’implementazione Microsoft del modello FaaS tramite il quale, il codice pubblicato all’interno di container in cloud viene eseguito “su richiesta” ovvero in risposta ad un evento.
Di conseguenza, oltre al codice vero e proprio, è necessario stabilire quali eventi faranno scatenare l’esecuzione della funzione.
Nelle Azure Functions gli eventi prendono il nome di “trigger”.
Spesso le funzioni vengono esposte sotto forma di web api e vengono eseguite a seguito di chiamate HTTP (GET o POST). Di conseguenza Azure mette a disposizione un url da chiamare. E se non vuoi che siano pubbliche, puoi impostare la funzione in modo che l’url riporti anche un codice in modo che solo chi ne è in possesso possa eseguirla.
Ad esempio questo può essere comodo quando le funzioni vengono chiamate da altri sistemi che non siano un utente.
Un’ infinità di eventi tra cui scegliere
Ma non è tutto: ad esempio, di recente, avevo la necessità di eseguire una funzione in seguito al caricamento di alcuni file in uno spazio di storage per analizzare il file appena caricato.
Ebbene, in fasi di progettazione della funzione è possibile impostarla in modo da “osservare” un determinato storage. Non appena questo subisce un cambiamento, come un file che viene caricato, la funzione viene invocata con i dettagli del file stesso.
Ma non sono gli unici eventi che si possono associare al lancio di una funzione: ad esempio Azure mette a disposizione timer per esecuzioni schedulate, ecc…
Nel caso di un altro cliente mi è stato utile proprio questo tipo di trigger per schedulare dei “batch” necessari all’importazione dei dati di vendita all’interno di un data warehouse.
Ma devi calcolare anche gli svantaggi!
Ovviamente non è la risposta ad ogni esigenza: ad esempio potresti voler controllare ogni configurazione oppure necessitare di librerie installate a livello di sistema che quindi non puoi ottenere in un contesto serverless “tradizionale” dal momento che non puoi lavorare sul sistema operativo sottostante.
Per venire in contro a questa esigenza Azure Functions permette la pubblicazione di containers Docker che quindi risolvono gran parte dei problemi, se questa è la tua necessità.
Altra cosa da tenere presente? Generalmente le funzioni sono progettate con l’idea di avere cicli di esecuzione “lineari”: ovvero hanno un inizio ed un termine determinati.
Quando però i flussi diventano più articolati (ad esempio la funzione che deve attendere in asincrono il risultato di un’altra funzione, ad esempio una scansione OCR) cosa fare? In questo caso Azure ci mette a disposizione l’estenzione “Durable Functions” che permette di orchestrare il flusso con tanto di gestione dello stato, ecc… Mica male!!
Allora perché non dare una veloce occhiata a come si possono creare nuove funzioni su Azure?
Guarda come è semplice creare nuove funzioni su Azure!
Per prima cosa devi creare la risorsa “function app”. Una function app è di fatto un contenitore associato ad un runtime. Una volta creata la risorsa, potrai sviluppare e pubblicare al suo interno molteplici funzioni, associate a trigger diversi tra loro.
L’unico vincolo sarà quello di far girare il codice sul runtime che sceglierai in fase di configurazione della risorsa Function App.
Ricordati solo che se avrai bisogno di creare altre funzioni su runtime differenti, dovrai necessariamente creare altre risorse Function App.

Le prime informazioni che ti verranno chieste sono fondamentali perché andrai a scegliere il runtime e il modello di deploy (ovvero se utilizzare il servizio “standard”, solo codice, oppure i container Docker).
Infine selezionerai il sistema operativo e sarai pronto! Fatto questo, Azure creerà per te il “contenitore” delle funzioni. Adesso sta a te svilupparle e pubblicarle.
Per semplificare questo passaggio, Visual Studio Code (lo strumento che uso per sviluppare in python su mac) mette a disposizione il plugin Azure Functions.
Ecco come utilizzo Visual Studio code per lo sviluppo di funzioni
Questo plugin permette di eseguire il login su Azure ed in automatico mostrerà le sottoscrizioni su cui puoi lavorare, e le risorse Azure Functions create (anche se si possono creare da qui).

Tramite i comandi in alto è possibile creare un progetto locale collegato alle Azure Functions in cloud e pubblicarlo.
Quando il plugin crea il codice di base in locale, troverai una cartella nel percorso da te indicato in fase di creazione così strutturata.
Troverai i file “host.json”, “local.settings.json” e “proxies.json”. In particolare il file “local.settings.json” sarà utile per specificare tutti i parametri a cui avranno accesso le funzioni, ad esempio password, stringhe di connessione, ecc.
Ricordati solo di riportare tutte le chiavi anche nella risorsa in cloud!
Oltre a questo, nel mio caso, dal momento che ho selezionato il runtime python, il plugin di VS Code creerà per me il virtual environment e il file “requirements.txt” necessario per gestire le dipendenze del codice.
Ogni volta che dal tool creerai una nuova funzione (con il tasto a forma di fulmine), nella cartella principale verrà creata una nuova sotto cartella contenente il codice della singola funzione. Questo codice, se selezionato il runtime python, come nel mio caso, conterrà il file “__init__.py” che sarà l’entry-point applicativo. Inoltre conterrà il file “function.json” che riporterà le configurazioni di base della funzione, ad esempio il tipo di trigger ed eventuali filtri.
Adesso sei pronto per pubblicare le funzioni sviluppate direttamente su Azure!
Una volta sviluppato il codice è possibile testarlo in locale con tanto di debugger e poi pubblicarlo.
Monitorare le funzioni
Il portale di Azure, mette a disposizione un sistema di logging e monitoring davvero ottimo!
Ed infatti, per ogni funzione potrai vedere i grafici di utilizzo e il log delle esecuzioni. Attenzione solo al fatto che il log non viene generato all’istante, ma a volte può volerci qualche minuto!
Lo puoi trovare entrando nella risorsa Azure Function interessata, cliccando su “funzioni” e di conseguenza sulla singola funzione. Al suo interno troverai il menu “Monitor” che ti darà accesso proprio ai log. Mentre la voce “Test” ti darà la possibilità di utilizzare di testarla.

Interessante vero? Vuoi saperne di più?
Nel mio percorso ho raccolto molte informazioni interessanti in merito agli argomenti di cui ti ho parlato in questo articolo. Per questo ho scritto un libro intitolato “Why Your Data Matter”.
Essendo il frutto della mia passione ed esperienza diretta, ho scelto di mettere questo libro gratuitamente a disposizione di tutti gli IT Manager ed i CIO delle aziende che come te vogliono ottenere grandi risultati dalle loro scelte e dal loro lavoro (evitando di trovarsi in situazioni scomode e da risolvere con urgenza).
Ti invito a leggere le prime pagine scaricandole!
Se poi ti piacerà sarò felice di inviartene una copia GRATUITA direttamente nel tuo ufficio.
Clicca qui per scaricare l’estratto del mio libro (se ti piacerà te lo invierò in formato cartaceo!) ==> il mio libro
