Sviluppo di app di Node.js serverless con Funzioni di Azure

Compilare ed eseguire API HTTP e app di Node.js basate su eventi con Funzioni di Azure. Usare quindi il resto di questo articolo per scegliere il percorso di hosting e integrazione serverless appropriato per l'app.

Che cos'è una risorsa di un'app per le funzioni?

Un'app per le funzioni è un'unità logica per la distribuzione e l'esecuzione del codice della funzione in una singola risorsa Azure in una posizione geografica specifica. La risorsa può contenere una singola funzione o molte funzioni, che vengono eseguite indipendentemente l'una dall'altra, ma condividono le stesse risorse di calcolo, connettività e impostazioni. Funzioni offre un'ampia gamma di modelli basati su trigger che consentono di iniziare rapidamente. È possibile aggiungere il codice e potenzialmente altre associazioni di output e input.

Le impostazioni delle risorse dell'app per le funzioni includono configurazioni serverless comuni, ad esempio variabili di ambiente, autenticazione, registrazione e CORS.

Funzioni durevoli, con stato

Mentre le esecuzioni di funzioni in Azure sono intrinsecamente senza stato, Durable Functions mantenere lo stato e gestire funzioni a esecuzione prolungata in Azure. Usali quando ti servono orchestrazioni, nuovi tentativi o flussi di lavoro in più passaggi che durano oltre una singola richiesta. Per iniziare, vedere Creare la prima funzione durevole in JavaScript.

Le app Web statiche includono funzioni

Quando si sviluppa un'applicazione client front-end statica (ad esempio Angular, React o Vue), che richiede anche API serverless, usare app Web statiche con funzioni per aggregare entrambi insieme.

Proxy dall'app client all'API

Se si intende distribuire l'API con l'app Web statica, non è necessario eseguire il proxy delle chiamate API dell'applicazione client. Il proxy viene stabilito automaticamente quando si distribuisce l'app per le funzioni come app gestita.

Quando si sviluppa localmente l'app Web statica usando Funzioni di Azure, l'interfaccia della riga di comando di App Web statiche di Azure fornisce il proxy locale.

Impostazioni di sicurezza comuni che è necessario configurare per la funzione di Azure

Le impostazioni comuni seguenti devono essere configurate per proteggere la funzione di Azure:

  • Autenticazione e autorizzazione:
    • Usare Microsoft Entra ID (in precedenza Azure Active Directory) per un'autenticazione affidabile. Configura la funzione app per richiedere token OAuth2 per i carichi di lavoro di produzione.
    • Evitare di usare chiavi di funzione per applicazioni sensibili. Integrare invece con Microsoft Entra ID o convalidare i token JWT nel codice della funzione.
    • Usare le identità gestite per autenticare l'app per le funzioni con altre risorse di Azure, assicurando che ogni funzione ottenga solo l'accesso necessario.
  • Impostazioni di configurazione:
    • Impostazioni dell'applicazione: creare le impostazioni dell'applicazione per le impostazioni che non influiscono sulla sicurezza.
    • Segreti e chiavi: per qualsiasi impostazione che influisca sulla sicurezza, usare questo approccio a livelli:
      1. In primo luogo, usare Microsoft Entra ID per l'autenticazione, se supportato.
      2. Per le integrazioni che non supportano Entra ID, archiviare i segreti in Azure Key Vault e recuperare tali impostazioni dal tuo Key Vault.
      3. Non incorporare mai segreti in file di codice o di configurazione.
    • Per altre impostazioni di sicurezza della piattaforma, vedere Protezione di Funzioni di Azure.
  • Sicurezza di rete:
    • CORS: configurare i domini client. Non usare *, che indica tutti i domini.
    • Integrazione della rete virtuale: usare endpoint privati o integrazione della rete virtuale per limitare l'esposizione della rete e limitare il traffico in ingresso da origini attendibili.
  • HTTPS e crittografia:
    • Impostazione TLS/SSL per HTTPS: per impostazione predefinita, l'API accetta richieste HTTP e HTTPS. Abilitare HTTPS solo nelle impostazioni TLS/SSL. Poiché l'app per le funzioni è ospitata in un sottodominio sicuro (*.azurewebsites.net), è possibile usarla immediatamente (con https) e ritardare l'acquisto di un nome di dominio e l'uso di un certificato per il dominio fino a quando non si è pronti.
  • Distribuzione e monitoraggio:
    • Slot di distribuzione: creare uno slot di distribuzione, ad esempio stage o preflighte eseguire il push in tale slot. Scambia questo slot di staging con quello di produzione quando sei pronto. Non prendere l'abitudine di eseguire manualmente il push nell'ambiente di produzione. La base di codice deve essere in grado di indicare la versione o il commit presente in uno slot. Se usi Flex Consumption, usa le distribuzioni senza interruzioni anziché gli slot.
    • Abilitare Application Insights per dati di telemetria, avvisi e rilevamento anomalie in tempo reale per monitorare le funzioni e i log di controllo per attività sospette.

Per indicazioni complete sulla sicurezza, vedere Protezione di Funzioni di Azure.

Opzioni host per Funzioni di Azure

È possibile ospitare Funzioni di Azure in modi diversi a seconda dei requisiti:

Piani di hosting delle risorse di Funzioni di Azure

Quando si crea una risorsa app per le funzioni, scegliere uno dei seguenti piani di hosting per Funzioni:

  • Piano a consumo (precedente): Si paga solo per il tempo di esecuzione delle funzioni, grazie al ridimensionamento automatico.
  • Piano a consumo flessibile: offre un controllo avanzato con istanze sempre pronte per ridurre l'avvio a freddo, l'integrazione della rete virtuale e le dimensioni delle istanze configurabili (da 512 MB a 4 GB). Questo piano è consigliato per i nuovi carichi di lavoro basati su Linux che richiedono funzionalità di sicurezza e prestazioni aziendali. Questo piano utilizza una fatturazione basata sull'esecuzione, analoga a quella del piano a consumo, ma con costi aggiuntivi per caratteristiche come le istanze sempre pronte.
  • Piano Premium: offre prestazioni migliorate con istanze pre-riscaldamento, connettività di rete virtuale e durate di esecuzione più lunghe.
  • Piano dedicato (servizio app): eseguire funzioni in macchine virtuali dedicate per costi prevedibili e controllo completo sull'ambiente di runtime.

Per altre informazioni sulla scelta del piano di hosting corretto, vedere Opzioni di hosting di Funzioni di Azure.

Risorsa di app per contenitori di Azure

In alternativa, è possibile distribuire Funzioni di Azure in una risorsa di App Contenitore di Azure come carichi di lavoro in contenitori. Questa opzione fornisce il controllo completo sull'ambiente contenitore ed è ideale quando sono necessarie dipendenze personalizzate, processi a esecuzione prolungata o si vogliono combinare funzioni con altri microservizi in contenitori. Per altre informazioni, vedere Panoramica di Funzioni di Azure in App contenitore di Azure.

Prerequisiti per lo sviluppo di Funzioni di Azure

  • Node.js LTS : usare la versione LTS (Long Term Support) più recente per ottenere la migliore compatibilità e gli aggiornamenti della sicurezza con Funzioni di Azure.
  • Strumenti di base di Funzioni di Azure : usare la versione principale corrente per lo sviluppo e il debug locali.

Una semplice funzione JavaScript per le richieste HTTP

Per funzione si intende una funzione asincrona esportata con informazioni su richiesta e contesto. Lo screenshot parziale seguente del portale di Azure mostra il codice della funzione.

Usare uno degli esempi di modello di programmazione v4 seguenti come punto di partenza per il progetto di funzione.

import { app, HttpRequest, HttpResponseInit, InvocationContext } from "@azure/functions";

export async function status(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
    context.log(`Http function processed request for url "${request.url}"`);

    return {
        status: 200,
        jsonBody: {
            env: process.env
        }
    };
};

app.http('status', {
    route: "status",
    methods: ['GET'],
    authLevel: 'anonymous',
    handler: status
});

Dopo l'avvio dell'app, vai a http://localhost:7071/api/status per testare localmente l'endpoint.

Sviluppare le funzioni in locale con Visual Studio Code ed estensioni

Creare la prima funzione con Visual Studio Code. Visual Studio Code semplifica molti dei dettagli con l'estensione Funzioni di Azure.

Questa estensione consente di creare funzioni JavaScript e TypeScript con modelli comuni.

Integrare il servizio con altri servizi di Azure

Le funzioni serverless rimuovono gran parte della configurazione e della gestione del server, in modo da potersi concentrare solo sul codice necessario.

  • Funzioni a basso codice: Con le Funzioni di Azure, è possibile creare funzioni attivate da altri servizi di Azure o che gestiscono l'output verso altri servizi di Azure usando associazioni di trigger. Il modello di programmazione v4 registra tutti i trigger e le associazioni direttamente nel codice, rendendo il tipo di configurazione sicuro e intuitivo.
  • Funzioni ad alto codice: per un maggiore controllo, usare gli SDK di Azure per coordinare e controllare altri servizi di Azure. Usare le identità gestite per autenticare in modo sicuro le funzioni con altre risorse di Azure senza gestire le credenziali.

Passaggi successivi