Azure Functions è una piattaforma serverless offerta da Microsoft Azure che consente agli sviluppatori di eseguire codice senza dover gestire l'infrastruttura sottostante, permettendogli di concentrarsi sulla scrittura di funzioni che rispondono a eventi specifici. Functions supporta una varietà di linguaggi di programmazione e si integra facilmente con altri servizi Azure, rendendola una scelta ideale per la creazione rapida di applicazioni, microservizi e automazioni. In questo articolo, vedremo più nel dettaglio cos’è, come funziona, quali sono i costi del servizio e come ottimizzarli.
Sviluppare applicazioni software può richiedere molte risorse, ma i veri problemi emergono sotto forma di manutenzione e supporto per gli utenti. In passato, il firmware e le risorse necessarie per eseguire le operazioni erano molto costosi, ma quei tempi sono ormai lontani grazie a Microsoft Azure e Azure Functions, il servizio di computing serverless fornito da Azure che consente agli sviluppatori di creare e distribuire applicazioni basate su eventi senza la necessità di gestire l'infrastruttura sottostante.
Il servizio permette agli sviluppatori di scrivere e gestire piccoli pezzi di codice, chiamati "funzioni", che è possibile scrivere e far eseguire nel cloud senza dover gestire i server. Funzionano in risposta a eventi specifici, come un click su un sito web o l'arrivo di un messaggio in una coda.
Queste funzioni sono molto utili perché permettono ai developer di concentrarsi solo sul codice che devono scrivere, senza preoccuparsi di tutto il resto che serve per farlo funzionare, come i server o l'infrastruttura di rete, lasciando alla piattaforma Azure la gestione dell'infrastruttura sottostante e dell'aspetto della scalabilità.
Microsoft Azure gestisce tutta la gestione dei server, inclusi aggiornamenti, patch di sicurezza e scaling, liberando gli sviluppatori dagli oneri operativi e permettendo loro di concentrarsi sullo sviluppo del codice e, poiché Azure Functions scala automaticamente in base alla domanda, non c'è bisogno di pagare per risorse server inutilizzate, una vera e propria manna per la gestione di applicazioni con carichi di lavoro variabili.
Rapidità, efficienza e risparmio sono le parole d’ordine alla base del servizio. Ma come funziona nello specifico? Vediamolo meglio nelle prossime sezioni.
Azure Functions segue il paradigma del computing serverless, il che significa che non ci sono server da configurare o gestire. La piattaforma gestisce automaticamente la scalabilità dell'infrastruttura, assicurando che le risorse vengano allocate in base alla domanda effettiva, rendendola altamente efficiente dal punto di vista dei costi.
Le soluzioni sviluppate con Azure Functions vengono attivate da vari eventi, come richieste HTTP, timer, messaggi in coda, caricamenti di file o modifiche ai dati nei database. Questo approccio basato su eventi consente agli sviluppatori di rispondere a eventi specifici in tempo reale senza la necessità di mantenere istanze server persistenti.
Questo supporta un design collegato che è più efficiente e facile da mantenere e la natura event-driven di Azure Functions permette anche di disaccoppiare i componenti dell'applicazione, facilitando la creazione di architetture e microservizi scalabili e resilienti.
Azure Functions supporta diversi linguaggi di programmazione, tra cui C#, JavaScript, Java, Python e TypeScript. Questa flessibilità consente agli sviluppatori di lavorare con il loro linguaggio preferito e di utilizzare senza problemi i codebase esistenti.
Le funzioni sviluppate con il servizio si integrano perfettamente con vari altri servizi Azure come Azure Storage, Azure Cosmos DB, Azure Service Bus, Azure Event Grid e molti altri, consentendo agli sviluppatori di costruire applicazioni sofisticate combinando le funzionalità e le possibilità offerte dai diversi servizi.
In generale, le funzioni sviluppabili con Azure Functions sono più adatte per le parti della propria applicazione che possono essere eseguite come processi separati, spesso eseguiti più volte in parallelo e attivati da eventi specifici che potrebbero richiedere una rapida scalabilità di tanto in tanto.
I casi d'uso più comuni di Azure Functions includono:
Detto ciò, è importante capire quando non usarle. Non tutte le applicazioni possono o dovrebbero utilizzare Azure Functions, poiché si tratta di una app basata su trigger. Una volta attivato un evento, il compito viene eseguito in background.
I servizi di Azure Functions servono a progettare soluzioni per accelerare il processo di sviluppo delle applicazioni. Con l'architettura serverless, è possibile smettere di preoccuparsi delle sfide legate all'infrastruttura e concentrarsi sulla creazione del codice. Tuttavia, come tutti i servizi, le soluzioni di Azure Functions hanno le loro limitazioni e costi che è necessario tenere a mente ed è per questo che ci teniamo a ricordare che:
Azure Functions Core Tools è un'interfaccia a riga di comando (CLI) fornita da Microsoft che permette agli sviluppatori di creare, testare e distribuire soluzioni Azure Functions nel loro ambiente di sviluppo locale e disponibile per Windows, macOS e Linux. Questo strumento è essenziale per chi desidera sviluppare senza dover interagire direttamente con i servizi cloud di Azure.
L’interfaccia consente di eseguire le funzioni localmente, simulando l'ambiente cloud, permettendo agli sviluppatori di fare debug e test senza necessitare di un abbonamento Azure. Supporta l'emulazione locale di vari trigger e binding di Azure, come HTTP, Timer, Blob e Queue, permettendo ai programmatori di testare le funzioni come se fossero eseguite in Azure.
Il tool semplifica la creazione di nuove app di funzioni e funzioni stesse, offrendo modelli per vari tipi di funzioni e trigger, facilitando l'avvio con una configurazione specifica. Aiuta anche a configurare l'ambiente e le impostazioni necessarie per eseguire le funzioni, inclusi i settaggi dell'app e le stringhe di connessione.
Azure Functions Core Tools offre comandi per distribuire le funzioni sviluppate localmente alle Azure Function Apps, garantendo una transizione fluida dallo sviluppo locale al cloud. Si integra bene con pipeline CI/CD, permettendo distribuzioni e aggiornamenti automatizzati.
Lo strumento funziona con i più diffusi IDE, come Visual Studio Code, offrendo un'esperienza di sviluppo senza interruzioni con supporto integrato per progetti Azure Functions. Può essere esteso con ulteriori strumenti e plugin per migliorare le funzionalità, come l'integrazione con Azure DevOps per processi di distribuzione semplificati.
Abbiamo creato il team Infra&Security, verticale sul cloud Azure, per rispondere alle esigenze dei clienti che ci coinvolgono nelle decisioni tecniche e strategiche. Oltre a configurare e gestire il loro tenant, ci occupiamo di:
Con Dev4Side, hai un partner affidabile in grado di supportarti sull'intero ecosistema applicativo di Microsoft.
Le Azure Durable Functions sono un'estensione delle normali soluzioni sviluppabili con Functions che permettono di gestire funzioni stateful (che mantengono lo stato) in un ambiente serverless. Questa caratteristica consente agli sviluppatori di gestire lo stato, i checkpoint e i riavvii all'interno dei loro workflow serverless. Sono particolarmente utili per orchestrare processi complessi che coinvolgono molti passaggi, rendendole una componente essenziale nel toolkit di qualsiasi sviluppatore specializzato in Microsoft Azure.
Questi workflow possono essere messi in pausa e ripresi senza preoccuparsi della perdita delle informazioni di stato, grazie al Durable Task Framework che si occupa dei checkpoint e dei riavvii per l’utente.
Inoltre, le Durable Functions possono semplificare il codice e ridurne la complessità in situazioni che altrimenti richiederebbero concatenamenti complicati di funzioni o l'uso di un'archiviazione esterna per mantenere lo stato. Sono utilissime anche in scenari in cui è necessario eseguire una sequenza di compiti in ordine, gestire errori o rollback delle transazioni e mantenere lo stato attraverso una serie di operazioni.
Qui sotto forniamo un piccolo elenco con alcuni esempi reali in cui l’implementazione delle Azure Durable Functions può essere vantaggiosa. Ognuno di questi scenari implica compiti multipli che devono essere completati in ordine, possono richiedere interazione umana e necessitano di gestire lo stato durante l'intero processo, tutte cose in cui le durable functions eccellono:
Azure Functions presenta diverse similitudini con un altro servizio offerto dalla piattaforma di cloud computing di Microsoft: Azure Logic Apps. Tuttavia, nonostante le similitudini, i due sono differenti nello scopo e nel modo in cui vengono utilizzati e potrebbero addirittura essere considerati per certi versi complementari.
Per cominciare, Azure Functions e Azure Logic Apps sono entrambi servizi basati su cloud utilizzati per automatizzare processi e flussi di lavoro, ma differiscono nel loro approccio all'automazione. Mentre Functions si concentra sull'esecuzione di codice in risposta a specifici eventi, Logic Apps fornisce una piattaforma visiva per creare ed eseguire workflow che coinvolgono molteplici azioni e integrazioni.
Azure Functions come abbiamo visto nelle sezioni precedenti è ideale per eseguire piccoli pezzi di codice in risposta a eventi, come il caricamento di un file o un nuovo messaggio in una coda. È perfetto per compiti specifici e personalizzati che richiedono programmazione, offrendo flessibilità per creare logiche complesse attraverso il codice.
Azure Logic Apps, invece, è una piattaforma per la creazione di workflow automatizzati senza necessità di scrivere codice. Utilizza un'interfaccia grafica dove è possibile collegare diversi servizi e applicazioni, orchestrando processi che coinvolgono più passaggi e integrazioni con facilità. È particolarmente utile per automatizzare processi aziendali, come inviare una notifica email quando viene aggiunto un nuovo contatto in un sistema CRM.
Le soluzioni sviluppate con Azure Logic Apps sono più flessibili e possono gestire flussi di lavoro complessi, ma possono essere più impegnative da configurare e mantenere a causa della loro interfaccia visuale meno versatile e della necessità di gestire connettori e integrazioni.
Le Azure Functions sono, al contrario, generalmente più facili da configurare e mantenere, grazie alla loro interfaccia basata su codice semplice e al design leggero. Tuttavia, potrebbero non essere adatte per flussi di lavoro più complessi che richiedono passaggi e servizi multipli (anche con l’implementazione delle Durable Functions menzionate nella sezione precedente).
Come si può vedere, pur essendoci un certo grado di sovrapposizione superficiale, le differenze tra i due servizi li rendono adatti per compiti di tipo ed entità diversi ma in un certo senso complementari. Si potrebbe addirittura considerare di utilizzare entrambi per la progettazione delle proprie soluzioni di automazione, con Azure Functions a gestire le logiche complesse e personalizzate che richiedono codice, mentre Azure Logic Apps si occupa di orchestrare processi più ampi collegando vari servizi e automazioni senza la necessità di programmare.
Azure Functions utilizza un modello di prezzo che si allinea con il principio fondamentale del serverless computing: si paga solo per ciò che si utilizza (una formula comunemente nota come pay-as-you-go). A differenza dei servizi di calcolo tradizionali, non ci sono costi per i periodi di inattività; la fatturazione si basa sulle metriche di utilizzo effettivo. In particolare, il costo è determinato da due parametri: il numero totale di esecuzioni delle funzioni e il tempo consumato da tali esecuzioni in un mese.
È importante notare che il tempo di esecuzione è misurato in gigabyte secondi, che è il prodotto della memoria utilizzata da una funzione e del tempo in cui essa è in esecuzione. Azure ha stabilito una memoria minima di 128 MB per le sue funzioni. Pertanto, anche le funzioni che utilizzano meno memoria verranno addebitate in base a questo limite minimo.
Azure Functions mette a disposizione dei suoi utenti due piani: Consumption e Premium.
Il piano Consumption è il più comune ed è basato sul numero di esecuzioni e sul tempo di esecuzione delle funzioni. Nessun costo è addebitato durante i tempi di inattività.
Il piano Premium è invece pensato per applicazioni che richiedono una maggiore potenza di elaborazione, tempi di esecuzione più lunghi e funzionalità avanzate come la connettività a reti virtuali e le connessioni ibride. Il piano Premium offre risorse dedicate che non sono condivise con altri clienti, garantendo alta disponibilità e affidabilità.
Il prezzo di Premium si basa, a differenza di Consumption sul numero di vCPU (unità di elaborazione centrale virtuali) e risorse di memoria allocate alla propria funzione. È possibile scegliere tra quattro diversi livelli:
Il prezzo di Azure Functions è influenzato non solo dal piano scelto ma anche da diversi altri fattori che è necessario considerare quando si stimano i costi del servizio. Vediamo qui sotto quali sono i più importanti:
Per ulteriori informazioni sul pricing di Azure Functions vi rimandiamo come sempre al comodo strumento di calcolo messo a disposizione da Microsoft (qui) per scoprire i prezzi del servizio in base a regione geografica, valuta e tempo di utilizzo (calcolato in ore o mesi).
Sebbene Azure Functions offra un modo conveniente per creare applicazioni serverless, è essenziale ottimizzare e affinare l’utilizzo del servizio per ridurne i costi operativi. La mancanza di attenzione e cura può portare a tutta una serie di problematiche non da poco che possono arrivare a compromettere le nostre finanze e l’utilizzo efficiente del servizio.
Di seguito forniamo quindi alcuni consigli per ridurre i costi di utilizzo di Azure Functions per il proprio business e sfruttare al massimo le potenzialità del servizio, spendendo però in maniera intelligente:
Per concludere la nostra panoramica non possiamo non sottolineare ancora una volta come Azure Functions sia uno strumento di grandissima utilità per tutti gli utenti e developer che lavorano ogni giorno sulla piattaforma di cloud computing di Microsoft.
La capacità delle funzioni di automatizzare, con piccoli frammenti di codice personalizzato, tutti quei compiti che un tempo avrebbero richiesto lavoro extra sull’infrastruttura sottostante non è da sottovalutare e può portare a significativi risparmi di tempo, denaro e fatica, permettendo alle aziende e agli sviluppatori di concentrarsi sui loro compiti più importanti senza fossilizzarsi sulle minuzie.
Il servizio si conferma dunque come uno dei più utili e comodi offerti da Azure e non ci resta che invitarvi calorosamente a provarlo e sperimentarne di persona le potenzialità. Rimarrete piacevolmente sorpresi dal suo potenziale.
Azure Functions è un servizio di calcolo serverless fornito da Microsoft Azure che consente di eseguire codice guidato dagli eventi senza dover gestire esplicitamente l'infrastruttura. È progettato per semplificare il processo di creazione e distribuzione di piccole unità di codice che possono essere attivate da vari eventi.
Le Azure Functions scalano automaticamente in base alla domanda. Ciò significa che possono aumentare il numero di istanze durante i picchi di utilizzo e ridurlo durante i periodi di bassa domanda, garantendo un uso efficiente delle risorse e una gestione ottimale dei costi.
Le Azure Functions supportano una varietà di linguaggi di programmazione, tra cui C#, JavaScript, Python, Java e PowerShell. Questa flessibilità consente agli sviluppatori di utilizzare i loro linguaggi preferiti nella creazione delle funzioni.
Le Azure Functions possono essere attivate da vari eventi, come richieste HTTP, messaggi provenienti da Azure Queue Storage, eventi da Event Grid, timer e altro ancora. Questo rende facile l'integrazione con diversi servizi Azure e sistemi esterni.
Azure Functions offre due principali modelli di pricing: il Piano di Consumo e il Piano Premium. Il Piano di Consumo addebita in base al numero di esecuzioni e alle risorse consumate, mentre il Piano Premium offre prestazioni migliorate e funzionalità come l'integrazione con VNET a un costo fisso.
Il processo di sviluppo per le Azure Functions solitamente prevede la scrittura del codice nel linguaggio di programmazione preferito, la definizione dei trigger e la distribuzione della funzione su Azure. Azure fornisce strumenti come Visual Studio e Visual Studio Code per uno sviluppo e un debug semplificati.
Le Azure Functions sono ideali per scenari che richiedono l'esecuzione guidata dagli eventi, come l'elaborazione di flussi di dati, l'esecuzione di attività pianificate, l'automazione dei flussi di lavoro e la creazione di microservizi. Sono particolarmente utili per applicazioni che devono scalare dinamicamente in base al carico degli eventi.
Le prestazioni delle Azure Functions possono essere monitorate utilizzando Azure Application Insights, che fornisce metriche dettagliate, log e diagnostica. Questo aiuta a tracciare le prestazioni, identificare problemi e ottimizzare l'esecuzione delle funzioni.
Sì, le Azure Functions possono essere integrate senza problemi con altri servizi Azure come Azure Storage, Event Grid, Cosmos DB e altri. Questo consente la creazione di architetture complesse e guidate dagli eventi all'interno dell'ecosistema Azure.
I principali vantaggi dell'utilizzo delle Azure Functions includono la riduzione della gestione dell'infrastruttura, la scalabilità automatica, l'efficienza dei costi e la possibilità di concentrarsi sulla scrittura del codice anziché sulla gestione dei server. Questo le rende una potente opzione per gli sviluppatori che cercano di creare applicazioni scalabili e guidate dagli eventi.
Il team Infra & Security è verticale sulla gestione ed evoluzione dei tenant Microsoft Azure dei nostri clienti. Oltre a configurare e gestire il tenant, si occupa della creazione dei deployment applicativi tramite le pipelines di DevOps, monitora e gestisce tutti gli aspetti di sicurezza del tenant, supportando i Security Operations Centers (SOC).