Azure Function App è un servizio di cloud computing offerto da Microsoft Azure che permette di eseguire piccole porzioni di codice, chiamate "funzioni", senza la necessità di gestire l'infrastruttura sottostante. Si tratta di un esempio di architettura serverless, dove gli sviluppatori possono concentrarsi sul codice e sulla logica applicativa, mentre la gestione dell'infrastruttura viene gestita dal provider cloud. In questo articolo dedicheremo un po’ di tempo a capire meglio cos’è, come funziona e come cominciare a creare una function app da zero.
Azure Function App è un servizio offerto dalla piattaforma cloud di Microsoft che aiuta gli utenti a creare e distribuire applicazioni rapidamente. Questa tecnologia sfrutta i vantaggi offerti sia dal cloud computing che dal serverless computing per permettere agli sviluppatori di creare soluzioni software complesse in tempi significativamente inferiori rispetto ai metodi tradizionali.
Il computing serverless è un tipo di modello di calcolo in cui lo sviluppatore scrive il codice nel cloud e non deve gestire istanze di server o la fornitura di componenti software, concentrandosi solo sulla scrittura del codice.
In sostanza elimina tutte le seccature legate alla gestione delle risorse software sottostanti, come server e database. Niente più preoccupazioni per la gestione dell'hardware e, inoltre, il serverless computing offre anche significativi risparmi sui costi; gli utenti pagano solo per ciò che viene utilizzato – il che significa che quando le loro app sono inattive durante i periodi più tranquilli, i costi diminuiscono notevolmente.
Combinando i servizi cloud di Azure con le funzionalità di Function App, gli sviluppatori possono sviluppare app senza preoccuparsi di ciò che accade sui server sottostanti – ottenendo così scalabilità e bassa latenza per le loro creazioni.
Quindi, se state cercando un modo efficace per ottenere risultati soddisfacenti nello sviluppo delle vostre app, esplorare come funziona Azure Function App potrebbe essere una buona idea e nelle prossime sezioni ci dedicheremo esattamente a questo.
Azure Function App è, come abbiamo già detto, un servizio cloud di Microsoft che permette agli sviluppatori di eseguire codice senza dover gestire l'infrastruttura sottostante. È ideale per lavori di piccola scala, consentendo di creare programmi basati su eventi in modo semplice e rapido.
Si basa sulla stessa tecnologia di Azure App Service ma con funzionalità aggiuntive come scalabilità, trigger e binding – che rendono le soluzioni sviluppate con Function App adatte per applicazioni nel cloud che richiedono tempi di risposta rapidi o aggiornamenti regolari.
Ma cos'è una Azure Function? Fondamentalmente, è un pezzo di codice che gira sulla piattaforma di cloud computing di Microsoft e può essere scritto in vari linguaggi (JavaScript, C# o Java, per citarne alcuni). Funzionerà allo stesso modo sia che tu utilizzi Windows o Linux come sistema operativo.
Le funzioni vengono attivate da certi eventi come una richiesta HTTP o quando avvengono cambiamenti nel database e questo evita di dover scrivere codice aggiuntivo per cose come chiamare API e eseguire lavori pianificati.
Per comprendere meglio il funzionamento di Azure Function App diamo uno sguardo alle sue componenti chiave:
Function App supporta un’ampia varietà di linguaggi come .NET Core, Java 8/9/10/11/12/13+, JavaScript 6+ (Node + Express), Python 2+ / 3+, C# Scripts (file CSX), PowerShell versione 6 (file ps1) e anche la compilazione C# (.csx). Con la 'Function Composition' di Microsoft, è possibile anche combinare molti elementi linguistici diversi in un unico programma. Ciò permette al codice composto in linguaggi diversi di lavorare insieme, consentendo di svolgere compiti sempre più complessi in modo più produttivo.
Oltre a queste caratteristiche, Function App vanta una serie impressionante di funzionalità che lo rendono una scelta eccellente per le applicazioni cloud-native sulla piattaforma di Microsoft.
Per citarne alcune, con i servizi di gestione API si possono utilizzare strumenti per monitorare i modelli di utilizzo e spostare i dati tra le app senza problemi; le Durable Entities consentono di impostare situazioni di calcolo serverless con stato; i servizi cognitivi mettono a tua disposizione modelli di intelligenza artificiale tramite API; gli algoritmi di Machine Learning sfruttano il deep learning (IA); il Batch Processing offre l'auto-scalabilità integrata oltre alle integrazioni con gli strumenti DevOps e i container Docker forniscono ulteriori possibilità.
Supporta anche architetture serverless e modelli di progettazione di microservizi – senza dimenticare i connettori personalizzati che offrono agli sviluppatori un accesso rapido ai servizi di terze parti come Salesforce o Slack senza dover scrivere codice.
E senza dimenticare la sicurezza, Function App mette a disposizione l'Autenticazione e l'Autorizzazione tramite l'integrazione con i servizi Active Directory e il supporto per Blob Storage per mantenere file di log e altri elementi utilizzati dalla tua applicazione. Si può limitare l'accesso attribuendo ruoli particolari a utenti/gruppi (Lettore/Collaboratore/Proprietario) e assicurarsi che qualsiasi dato riservato memorizzato su servizi esterni come database sia crittografato di conseguenza, in modo che solo le persone autorizzate possano vederlo.
Ci sono due modi per distribuire una Azure Function: tramite il Portale di Azure o utilizzando Visual Studio Code in combinazione con GitHub per il controllo delle versioni e il tracciamento della distribuzione. Ciò che è fondamentale qui è che è necessario specificare in quale linguaggio si vuole che la propria funzione sia scritta e quale tipo di versioning; questo assicura che non ci siano problemi di compatibilità tra le dipendenze e che i trigger funzionino come previsto quando avvengono aggiornamenti o rilasci.
Anche se non abbiamo bisogno di un server per le nostre funzioni, ci sono comunque funzionalità di logging che devono essere ispezionate periodicamente in caso di attività dannose, così come informazioni generali sulle prestazioni, come la frequenza con cui le funzioni vengono chiamate, ecc. Tutte queste considerazioni mantengono i dati sicuri e aiutano a stabilire una reale conoscenza di ciò che accade quando la funzione viene messa sotto stress in diverse circostanze.
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.
Ora che abbiamo esaminato l'anatomia delle Azure Functions in linea generale, diamo uno sguardo più da vicino ai trigger e ai binding per capire meglio come funzionano.
I trigger sono ciò che causa l'esecuzione di una funzione. Definiscono come la funzione viene invocata e possono essere basati su una varietà di eventi o pianificazioni. Ogni funzione deve avere esattamente un trigger. Il tipo di trigger utilizzato determina i dati disponibili per la funzione e l'ambiente in cui essa viene eseguita.
Tipi comuni di trigger includono:
I binding forniscono un modo per connettere la tua funzione ad altri servizi e sorgenti di dati senza dover scrivere codice di integrazione personalizzato. Essi astraggono le complessità sottostanti e permettono ai developer di concentrarsi sulla logica aziendale.
I binding possono essere input binding (per portare dati nella funzione) o output binding (per inviare dati dalla funzione) e includono:
Ma come funzionano insieme nello specifico? Un primo esempio coinvolge un Trigger HTTP e un Output Binding Blob Storage. In questo scenario, una richiesta HTTP carica un file su Azure Blob Storage. La funzione viene quindi invocata dalla richiesta HTTP e il contenuto del file viene memorizzato in un blob.
Un possibile secondo scenario riguarda un Trigger Timer e un Binding Cosmos DB. Immaginiamo di dover implementare un'attività programmata che si esegue ogni notte per aggregare dati da vari documenti in una raccolta di Cosmos DB. In questo caso la funzione è invocata da un Timer e interagisce con Cosmos DB utilizzando sia binding di input che di output.
Infine, un terzo esempio possibile potrebbe coinvolgere un Trigger Queue e un Output Binding Service Bus. In questo caso, una funzione elabora messaggi da una coda di Azure Storage e li inoltra a una coda di Service Bus per ulteriori elaborazioni. La funzione viene invocata da nuovi messaggi nella coda di Storage e utilizza un binding di output per inviare messaggi alla coda di Service Bus.
Tra l’enorme mole di servizi messi a disposizione da Azure, diversi sono dedicati all’esecuzione e la scrittura di codice per app. Spesso una nomenclatura simile e funzionalità apparentemente intercambiabili possono confondere gli utenti alle prime armi della piattaforma, che potrebbero rimanere perplessi di fronte alla scelta dello strumento giusto per risolvere le loro problematiche.
In questa sezione ci soffermeremo brevemente sulla differenza tra Function App e un altro dei servizi di Azure pensato per lo sviluppo di App, ovvero App Service, entrambe due offerte di Azure pensate per eseguire codice, ma con scopi e modelli di utilizzo differenti.
Azure Function App è, come abbiamo già potuto vedere, una piattaforma di esecuzione serverless in cui il codice viene eseguito in risposta a eventi specifici, come una richiesta HTTP o un messaggio in una coda, e Azure si occupa automaticamente di allocare le risorse necessarie.
Invece, Azure App Service è un servizio che permette di ospitare applicazioni web, API e servizi backend su infrastruttura gestita. Anche se offre scalabilità automatica, il modello di esecuzione è più tradizionale rispetto a Function App e, in questo caso, si ha maggiore controllo sull'ambiente di esecuzione, potendo configurare il runtime, gestire sessioni e mantenere lo stato dell'applicazione tra le richieste.
La differenza principale sta quindi nell'approccio alla gestione dell'infrastruttura e nell'utilizzo: Azure Function App è orientata all'esecuzione di codice in modo reattivo e su richiesta, senza preoccuparsi dei server, mentre Azure App Service è una piattaforma per l'hosting di applicazioni web più strutturate, con una maggiore enfasi sul controllo e la configurazione dell'ambiente di esecuzione.
App Service è dunque maggiormente indicato per applicazioni web di media o grande complessità che necessitano di essere sempre attive e pronte a rispondere a richieste degli utenti, garantendo una disponibilità continua, dove invece Function App è particolarmente utile per compiti brevi e puntuali, in cui il codice viene eseguito solo quando richiesto, con una gestione dinamica della scalabilità, un approccio ideale per scenari come l'elaborazione di eventi, la gestione di trigger e l'automazione di compiti che devono reagire a cambiamenti o input esterni.
Ma perché limitarci a descriverne la facilità d’uso quando possiamo metterla alla prova personalmente? Ora che abbiamo un’idea più chiara delle sue componenti principali e del suo funzionamento è arrivato il momento di testare Azure Function App sul campo e lo faremo creando una piccola applicazione di prova.
Ci sono alcuni prerequisiti di cui dobbiamo essere a conoscenza prima di creare una Azure Function App:
Ci sono tre modi in cui possiamo creare una Function App:
In questo tutorial, esploreremo la prima opzione, ovvero l'utilizzo del portale di Azure. Accediamo al portale di Azure (accessibile visitando https://portal.azure.com) e cerchiamo Function App.
Si aprirà la dashboard della Function App, che appare come mostrato di seguito. Poiché non si è creato alcuna funzione, la dashboard è vuota. Nel caso si fossero create funzioni in precedenza (e queste siano ancora attive), verrà visualizzato un elenco di tutte le funzioni disponibili create in questo account.
Facciamo clic su Add in alto, oppure clicchiamo sul pulsante Create Function App per iniziare a creare l'applicazione.
Nella pagina successiva, dovremo fornire alcuni dettagli di configurazione su come desideriamo creare la funzione e il suo nome, insieme ad alcuni altri parametri. La prima opzione qui è selezionare l'account di sottoscrizione sotto il quale verrà creata la funzione. Lo si può considerare come un raggruppamento logico per la gestione della fatturazione. In questo caso abbiamo una sottoscrizione predefinita, che selezioneremo per procedere.
Il parametro successivo è selezionare il resource group. Il resource group è anch'esso un gruppo logico e può essere utilizzato per raggruppare varie risorse che appartengono alla stessa soluzione. È possibile selezionare un gruppo di risorse già esistente oppure procedere creandone uno nuovo come segue.
Una volta creato il resource group, possiamo procedere con gli altri parametri. Il prossimo punto importante è fornire un nome valido per la funzione. Questo nome deve essere univoco a livello globale, poiché verrà utilizzato come parte dell'URL di base.
Selezioniamo l'opzione Publish come Code e lo stack runtime come .NET Core. Si può scegliere qualsiasi altro stack runtime in base alle proprie preferenze.
Infine, sarà necessario selezionare la regione in cui desideri distribuire la tua funzione. Come buona pratica, la funzione dovrebbe essere distribuita in una regione vicina a quella in cui si trova il tuo cliente. In questo caso useremo la regione West Europe.
Una volta compilate tutte queste informazioni, facciamo clic su Next: Hosting e configuriamo i parametri relativi.
Qui dobbiamo definire i dettagli dell'account di archiviazione, che verranno utilizzati dalla nostra funzione. Se si dispone già di un account di archiviazione, si può tranquillamente utilizzare quello o crearne uno nuovo.
Una volta creato l'account di archiviazione, potremo selezionare il sistema operativo e il piano per la funzione. Il sistema operativo predefinito per .NET Core è Windows. Per il piano, selezioneremo il Piano Consumption, che verrà scalato in base a quando la funzione viene attivata e sarà tariffato in base al tempo di esecuzione.
Facciamo poi clic su Next: Monitoring per configurare i parametri di monitoraggio. Qui ci verrà chiesto se desideriamo abilitare Application Insights o meno. Per questo tutorial, questa opzione rimarrà disabilitata poiché non è parte integrante dell'argomento trattato. Facciamo quindi clic su No e procediamo oltre.
In questa fase, puoi fare clic su Review + Create per creare la funzione come specificato. Verranno verificate tutte le informazioni e successivamente verranno visualizzati i dettagli per la tua revisione. Una volta che hai esaminato i dettagli in questa pagina, procedi e fai clic su Create.
Il processo di distribuzione della funzione potrebbe richiedere del tempo, a seconda delle risorse disponibili. Una volta completata la distribuzione, vedrai le seguenti informazioni apparire sulla dashboard.
Una volta creata la Function App, il passo successivo è verificare l'URL della funzione e confermare se l'app è attiva e funzionante. Facciamo clic sull'URL e verremo reindirizzati alla homepage della Function App.
La pagina appare simile alla figura sottostante. Questo significa che la Azure Function App è ora attiva e funzionante.
Ora che sappiamo che la nostra funzione è attiva, è il momento di scrivere il codice che dobbiamo distribuire in questa funzione. Durante la creazione della nuova funzione, è importante tenere a mente i seguenti due punti prima di procedere:
Fai clic su Function e poi seleziona Add. Apparirà un elenco di modelli sulla destra; seleziona HTTP Trigger.
Una volta selezionato il tipo di trigger, forniamo i dettagli sulla funzione. Inseriamo un nome per la funzione e il livello di autenticazione. Selezioniamo in questo caso Anonymous come livello di autenticazione e facciamo clic su Create Function.
La funzione verrà creata e distribuita entro pochi minuti, e possiamo verificare i dettagli come segue.
Facciamo clic su Code + Test per visualizzare il codice fornito.
Per testare questa funzione, facciamo clic su Test/Run. Verrà visualizzato un pannello sulla destra in cui dovremo impostare il metodo HTTP su GET. Inoltre, aggiungiamo un parametro name alla lista delle query con un valore a scelta. In questo particolare caso abbiamo utilizzato un nome casuale. Clicchiamo su Run una volta completato.
Il panorama cloud sta offrendo giorno dopo giorno nuove possibilità ai developer che desiderano sfruttarne il potenziale per la scrittura e la distribuzione delle proprie applicazioni.
In questo contesto, Azure (che ricordiamo è la seconda piattaforma cloud più utilizzata al mondo), con la sua mole di servizi, si posiziona grazie a offerte come quelle di Azure Function App come una scelta incredibilmente solida per tutti quegli sviluppatori che vogliono sfruttare le potenzialità del serverless computing e dello sviluppo di applicazioni, slegato dalle vetuste preoccupazioni legate all’infrastruttura sottostante e concentrarsi solo sulla scrittura delle loro app: la parte davvero importante e creativa del loro lavoro.
Non resta dunque che invitarvi a provarlo e vedere se la soluzione di Microsoft basata su questi piccoli frammenti di codice può fare anche per voi una grande differenza in termini di tempo e risorse.
Azure Function App è un servizio di cloud computing serverless fornito da Microsoft Azure. Consente agli sviluppatori di eseguire piccoli pezzi di codice, chiamati "funzioni", senza gestire l'infrastruttura sottostante.
Azure Function App funziona su trigger basati su eventi, scalando automaticamente in base alla domanda. È ideale per attività come richieste HTTP o modifiche ai database.
Azure Function App supporta vari linguaggi tra cui JavaScript, C#, Java, Python e PowerShell.
I trigger comuni includono richieste HTTP, timer, messaggi Azure Queue e modifiche a Cosmos DB.
Azure Function App è ottimizzato per l'esecuzione di piccole attività basate su eventi senza gestione del server, mentre Azure App Service ospita applicazioni web complete con maggiore controllo sull'ambiente di esecuzione.
Una Azure Function App può essere creata tramite il portale Azure, Azure CLI o editor di codice come Visual Studio Code.
I binding in Azure Function App consentono alle funzioni di connettersi ad altri servizi, come Blob Storage o Cosmos DB, senza dover scrivere codice d'integrazione personalizzato.
I principali piani di servizio sono il piano Consumption, che addebita in base al tempo di esecuzione, e il piano App Service, che funziona continuamente senza timeout.
Azure Function App semplifica la gestione dell'infrastruttura, permettendo agli sviluppatori di concentrarsi sul codice, rendendolo ideale per applicazioni piccole, scalabili e basate su 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).