Come utilizzare Funzioni di Azure in C#

Come utilizzare Funzioni di Azure in C#

Funzioni di Azure è l'offerta di calcolo serverless nel cloud di Microsoft Azure. In sostanza, "serverless" significa che non hai nemmeno bisogno di una macchina virtuale per eseguire una funzione di Azure. Le Funzioni di Azure sono solo un'implementazione della piattaforma come servizio (PaaS), basata su un modello di programmazione basato su eventi. Questo articolo presenta un'introduzione alle Funzioni di Azure, perché sono utili e come possiamo utilizzarle.

Poiché non sono presenti server da gestire, Funzioni di Azure possono essere ridimensionate automaticamente e si paga solo per il tempo di esecuzione del codice. È possibile sfruttare le Funzioni di Azure per l'elaborazione di eventi in tempo reale o per processi di elaborazione dei dati pianificati, ad esempio il backup dei dati pianificato o la pulizia dei dati. Puoi persino usare Funzioni di Azure come back-end serverless per applicazioni mobili.

Ecco una rapida occhiata ad alcune delle straordinarie funzionalità di Funzioni di Azure:

  • Distribuzione di codice flessibile (tramite il portale di Azure o GitHub, ad esempio)
  • Supporto per più linguaggi (C#, F#, Java, Node.js o PHP)
  • Supporto per dipendenze esterne tramite NuGet o NPM
  • Facile integrazioni con altri servizi di Azure

Per utilizzare gli esempi di codice forniti in questo articolo, è necessario che Visual Studio 2022 sia installato nel sistema. Se non ne hai già una copia, puoi scaricare Visual Studio 2022 qui.

È inoltre necessario disporre della versione più recente di Strumenti per le funzioni di Azure e di una sottoscrizione di Azure attiva. Gli strumenti per le funzioni di Azure sono inclusi come parte del carico di lavoro di sviluppo di Azure in Visual Studio 2022.

Cosa sono le Funzioni di Azure? Perché ne abbiamo bisogno?

Le Funzioni di Azure sono servizi ospitati nel cloud di Microsoft Azure che eseguono codice su richiesta, senza richiedere il provisioning o la gestione dell'infrastruttura. Scrivi solo il codice necessario per l'attività in questione e Funzioni di Azure gestisce tutto il resto.

Una funzione di Azure può essere attivata da un evento (una richiesta HTTP) o in base a una pianificazione (usando un'espressione CRON). Puoi testare rapidamente le funzioni in locale mentre scrivi le tue funzioni prima di distribuirle in Azure.

Vantaggi e svantaggi di Funzioni di Azure

Costi ridotti: Uno dei motivi più convincenti per l'uso di Funzioni di Azure è che riduce drasticamente il costo dell'esecuzione delle applicazioni. Devi solo pagare per le risorse che hai consumato e nessuna risorsa viene consumata finché la tua funzione non viene eseguita.

Flessibilità: Puoi creare e distribuire rapidamente nuove funzioni basate su eventi quando i tuoi requisiti cambiano e puoi anche modificare le funzioni esistenti.

Scalabilità: Funzioni di Azure offre scalabilità consentendo di avviare rapidamente nuove istanze di una funzione quando la domanda aumenta. Ciò elimina la necessità di aumentare e diminuire manualmente le istanze in anticipo, un processo che, se la domanda aumenta in modo imprevedibile o infrequente, diventa laborioso e può anche rivelarsi inefficiente.

Trigger e associazioni in Funzioni di Azure

Funzioni di Azure usano trigger e, facoltativamente, associazioni. I trigger sono funzioni definite dall'utente che specificano come verrà eseguita una funzione di Azure. Un trigger può essere definito da un attributo di codice e attivato da un messaggio di coda, un timer, una richiesta HTTP, un BLOB, ecc.

I trigger hanno collegamenti di input che definiscono i dati disponibili per il codice durante l'esecuzione. Il corpo della richiesta HTTP viene in genere passato come oggetto JSON al parametro di input della funzione di Azure in un trigger HTTP.

L'associazione è un modo per connettere le risorse a una funzione di Azure in modo dichiarativo. Esistono due tipi di associazioni:input e output. Mentre il primo consente l'immissione di dati nella funzione di Azure, il secondo consente alla funzione di Azure di inviare dati a risorse esterne. È possibile avere un solo trigger per una funzione di Azure ma più associazioni.

Tipi di trigger in Funzioni di Azure

I diversi tipi di trigger in Funzioni di Azure consentono di configurare una funzione che viene eseguita quando viene eseguito un aggiornamento di una risorsa, ad esempio un trigger dell'hub eventi che invia un avviso tramite posta elettronica ogni volta che viene aggiornato il servizio.

Attivatore HTTP: Un trigger HTTP utilizza un endpoint HTTP per chiamare la funzione tramite una richiesta HTTP. Puoi utilizzare i trigger HTTP per creare un'applicazione Web serverless per ricevere webhook da altri servizi.

Attivazione timer: Un trigger timer viene chiamato in base a una pianificazione predefinita. Questa pianificazione può essere espressa nella sintassi CRON o utilizzando gli intervalli. Il trigger Timer è utile per pianificare qualsiasi lavoro regolare, come un'attività di pulizia o un rapporto settimanale via email.

Attivazione Hub eventi: Un trigger di Hub eventi risponde a un messaggio di flusso di Hub eventi. Quando si utilizza l'attributo EventHubTrigger, è possibile eseguire il binding al flusso di messaggi da tutte le partizioni.

Attivatore di archiviazione BLOB: Un trigger BLOB risponde agli eventi in Archiviazione BLOB di Azure. Un trigger BLOB può avviare una funzione di Azure ogni volta che viene creato un nuovo BLOB o viene aggiornato un BLOB esistente.

Attivatore Cosmos DB: Un trigger Cosmos DB risponde agli eventi generati da Azure Cosmos DB. Ad esempio, se desideri che la tua funzione di Azure venga eseguita quando viene creato un nuovo documento nel database, puoi creare un trigger Cosmos DB e aggiungere il codice necessario per gestire l'evento.

Attivatore griglia eventi: Un trigger di Griglia di eventi risponde agli eventi di Griglia di eventi di Azure. Griglia di eventi è un servizio di routing degli eventi serverless che consente di creare regole che instradano gli eventi dai servizi di Azure, come l'archiviazione BLOB, i gruppi di risorse e le risorse di terze parti, a qualsiasi destinazione supportata da Griglia di eventi.

Attivatore di archiviazione coda: Un trigger di Archiviazione code di Azure viene attivato quando i messaggi vengono aggiunti ad Archiviazione code di Azure. Archiviazione code di Azure fornisce messaggistica affidabile e asincrona tra i componenti dell'applicazione.

Webhook generico: Un webhook è analogo a un callback HTTP definito dall'utente. Fornisce un modo leggero per essere avvisato da un altro servizio quando qualcuno si verifica. Un webhook generico è un'altra categoria di trigger che viene attivata quando una richiesta HTTP ha origine da un servizio.

Webhook GitHub: Un trigger webhook GitHub viene eseguito quando si verifica un evento nel repository GitHub, ad esempio viene creato un nuovo ramo, viene eliminato un ramo esistente o viene eseguito il commit o il commento del codice.

Attivazione bus di servizio: Un trigger del bus di servizio risponde ai messaggi da una coda o un argomento del bus di servizio di Azure.

Crea un progetto di applicazione di Funzioni di Azure in Visual Studio

Prima di tutto, creiamo un progetto applicativo .NET Funzioni di Azure in Visual Studio. Supponendo che Visual Studio 2022 sia installato nel tuo sistema, segui i passaggi descritti di seguito per creare un progetto di Funzioni di Azure.

  1. Avvia l'IDE di Visual Studio.
  2. Fai clic su "Crea nuovo progetto".
  3. Nella finestra "Crea nuovo progetto", seleziona "Funzioni di Azure" dall'elenco dei modelli visualizzati.
  4. Fai clic su Avanti.
  5. Nella finestra "Configura il tuo nuovo progetto" mostrata di seguito, specifica il nome e la posizione per il nuovo progetto.
  6. Fai clic su Crea.
  7. Nella schermata "Crea una nuova applicazione di Funzioni di Azure", seleziona il tipo di trigger che desideri utilizzare per la tua funzione di Azure.
  8. Fai clic su Crea.

Ora dovresti avere un nuovo progetto di applicazione di Funzioni di Azure .NET pronto per l'uso in Visual Studio 2022. Useremo questo progetto nelle sezioni successive di questo articolo.

Crea una nuova funzione di Azure

Per impostazione predefinita, una funzione di Azure denominata Function1 verrà creata automaticamente all'interno di un file denominato Function1.cs. Sostituiamo la funzione di default con il seguente codice:

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
namespace Azure_FunctionAppDemo
{
    public static class Demo
    {
        [FunctionName("Demo")]
        public static async Task<IActionResult> Run(
          [HttpTrigger(AuthorizationLevel.Function, "get",
          "post", Route = null)] HttpRequest request,
            ILogger logger)
        {
            logger.LogInformation("An HTTP triggered Azure Function.");
            string requestBody = String.Empty;
            using (StreamReader streamReader = new StreamReader(request.Body))
            {
                requestBody = await streamReader.ReadToEndAsync();
            }
            return new OkObjectResult(!string.IsNullOrEmpty(requestBody));
        }
    }

Fare riferimento all'elenco dei codici sopra. Una funzione di Azure è rappresentata da una classe statica con una funzione statica denominata Run. In questo esempio, il nome della funzione di Azure è Demo. L'attributo FunctionName viene usato per indicare che la funzione è una funzione di Azure. Inoltre, contrassegna il metodo Run come punto di ingresso. Il nome della funzione deve essere univoco all'interno di un progetto.

I due parametri del metodo Run sono di tipo HttpRequest e ILogger. Il primo parametro consente di lavorare con l'oggetto HttpRequest (per recuperare i metadati della richiesta, ad esempio). Il secondo parametro consente di registrare i dati relativi alla funzione di Azure in una destinazione di log predefinita.

Sappiamo che le Funzioni di Azure vengono eseguite in base a trigger preconfigurati. L'utilizzo dell'attributo HttpTrigger indica che la funzione di Azure denominata Demo sarà basata su un trigger HTTP. La figura 1 seguente mostra come selezionare il trigger per la funzione durante la creazione dell'applicazione Funzioni di Azure in Visual Studio.

IDG

Testare una funzione di Azure in locale

Ora che la funzione di Azure è pronta, il passaggio successivo consiste nell'eseguirla. È possibile usare gli strumenti di Funzioni di Azure per eseguire Funzioni di Azure in locale nel sistema. Puoi semplicemente premere F5 per eseguire e testare la tua funzione di Azure. Tieni presente che se gli Strumenti per le funzioni di Azure non sono installati, ti verrà chiesto di installarlo quando tenti di eseguire la funzione. Accetta la richiesta di scaricare e installare gli strumenti quando richiesto.

Se gli Strumenti di Funzioni di Azure sono installati, la finestra della console visualizzerà l'URL della funzione di Azure come mostrato nella Figura 2 di seguito.

IDG

Prendere nota dell'URL visualizzato per la funzione di Azure. Ora sfrutteremo Postman, uno degli strumenti di test API più popolari, per testare la funzione. Quando esegui l'URL in Postman, dovresti vedere un output simile a quello visualizzato nella Figura 3 di seguito.

IDG

Pubblica una funzione di Azure in Azure

Supponendo di aver effettuato l'accesso ad Azure, segui i passaggi descritti di seguito per pubblicare il progetto dell'applicazione Funzioni di Azure in Azure:

  1. Fare clic con il pulsante destro del mouse sul progetto dell'applicazione Funzioni di Azure nella finestra Esplora soluzioni.
  2. Fai clic su Pubblica.
  3. Seleziona Azure come destinazione di pubblicazione.
  4. Seleziona App per le funzioni di Azure (Windows) come destinazione specifica.
  5. Fai clic su Avanti.
  6. Infine, fai clic su Fine per completare il processo.
IDG

È possibile sfruttare Funzioni di Azure per implementare funzioni di calcolo serverless in Azure. La possibilità di essere eseguita in un ambiente serverless rende le Funzioni di Azure altamente scalabili ed efficienti. Le Funzioni di Azure sono adatte per attività pianificate, notifiche e API leggere, qualsiasi attività semplice che può essere eseguita ogni volta che si verifica un evento specifico.

Le Funzioni di Azure possono essere richiamate da una richiesta HTTP, come illustrato qui, o da un webhook o da un evento in Azure Cosmos DB, Archiviazione BLOB, App mobili e molti altri servizi di Azure. Puoi persino attivare una funzione di Azure da OneDrive, Excel o Outlook. E puoi archiviare i dati elaborati da Funzioni di Azure in un servizio di archiviazione di Azure, un database di documenti o anche un database SQL, se lo desideri.

Infine, tieni presente che puoi usare Funzioni durevoli di Azure, un'estensione di Funzioni di Azure, per creare funzioni durevoli e con stato che vengono eseguite nel cloud di Azure. Daremo un'occhiata all'utilizzo di Funzioni durevoli di Azure in un post successivo qui.