Esercizio - Creare una funzione in locale con Core Tools

Completato

Azure Functions Core Tools consente di sviluppare funzioni in locale nel proprio computer:

  • Creazione dei file e delle cartelle necessari per un progetto di funzioni.
  • Specificare un host di Funzioni che viene eseguito localmente dalla directory radice del progetto.

Si è deciso di iniziare a lavorare con Funzioni di Azure sviluppando in locale una funzione che calcola l'interesse semplice. Infine, puoi creare funzioni più complesse che interagiscono e chiamano altri servizi e database. L'uso di Core Tools per creare una funzione che esegue un calcolo di prestito di base è un buon inizio. Si vuole anche provare a eseguire la funzione nel computer locale prima di pubblicarla in Azure. È possibile eseguire tutte le operazioni da Azure Cloud Shell usando Core Tools.

Azure Cloud Shell viene fornito con Core Tools, l'interfaccia della riga di comando di Azure e un editor che è possibile usare per scrivere codice. Prima di continuare, assicurati di selezionare Attiva sandbox sopra.

Creare un progetto di Funzioni di Azure locale

In questo esercizio, usa Cloud Shell per sviluppare la tua prima funzione JavaScript usando Core Tools. Cloud Shell ha già le versioni corrette di Core Tools e Node.js installate.

  1. Dalla cartella radice esegui func init per creare un progetto di funzioni in una nuova cartella loan-wizard.

    func init loan-wizard
    
  2. Quando viene richiesto di selezionare un runtime di lavoro, immetti 3 per nodo.

  3. Quando viene richiesto di selezionare un linguaggio, immetti 1 per javascript.

    L'output elenca i file scritti su disco, inclusi questi file:

    • host.json supporta la configurazione a livello di app sia per l'istanza di runtime che per i tipi di trigger e binding specifici.
    • local.settings.json imposta comportamenti e impostazioni dell'applicazione solo locali (variabili di ambiente locali).
    • package.json è un file specifico di JavaScript che tiene traccia di tutti i pacchetti installati e usati all'interno del codice.
    • .gitignore e extensions.json sono file di configurazione usati rispettivamente dallo strumento di controllo della versione Git e da Visual Studio Code. Puoi ignorarli per il momento.

Creare una funzione attivata da HTTP

È ora di creare la funzione.

  1. In Cloud Shell passa alla nuova directory loan-wizard.

    cd ~/loan-wizard
    
  2. Esegui func new per avviare la creazione guidata della funzione.

    func new
    
  3. Quando ti viene richiesto di selezionare un modello, immetti 7 per trigger HTTP.

  4. Quando ti viene richiesto di specificare un nome di funzione per il trigger HTTP, immetti simple-interest.

  5. Esegui il comando seguente per aprire l'editor di Cloud Shell.

    code .
    

    Screenshot showing the simple-interest folder with the function.json file open in Cloud Shell code editor.

    La procedura guidata crea un nuovo file nel progetto funzioni in src/functions denominato simple-interest.js, con contenuto del modello predefinito. Questo codice supporta il modello di programmazione Node.js v4 per Funzioni di Azure. Dedicare un po' di tempo a esaminare i file di progetto nell'editor. Lo screenshot mostra la cartella ampliata con simple-interest.js aperto nell'editor.

Implementare la funzione simple-interest

L'implementazione della funzione predefinita creata da Core Tools in simple-interest.js cerca un input denominato name nella stringa di query o nel corpo della richiesta HTTP in ingresso e restituisce la stringa Hello, [name]. È una buona illustrazione di come usare un trigger HTTP, ma si vuole sostituire il codice con il codice che calcola l'interesse semplice da tre parametri di input.

  1. Nel riquadro File dell'editor espandi la cartella funzioni>src e seleziona simple-interest.js per aprire il file nell'editor.

  2. Sostituisci il contenuto completo di simple-interest.js con il codice seguente:

    const { app } = require('@azure/functions');
    
    app.http('simple-interest', {
        methods: ['GET','POST'],
        authLevel: 'anonymous',
        handler: async (request, context) => {
            const principal = parseFloat(request.query.get('principal'));
            const rate = parseFloat(request.query.get('rate'));
            const term = parseFloat(request.query.get('term'));
    
          if ([principal, rate, term].some(isNaN)) {
            // If any empty or non-numeric values, return a 400 response with an
            // error message
            return {
              status: 400,
              body: "Please supply principal, rate and term in the query string"
            };
          } else {
            // Otherwise set the response body to the product of the three values
            return { body: principal * rate * term };
          }
        }
    });
    

    Questo script cerca i parametri denominati principal, rate e term nella stringa di query della richiesta HTTP. Restituisce quindi il risultato del calcolo di interesse semplice (principal * rate * term).

  3. Salva il file premendo Ctrl+S e chiudi l'editor premendo Ctrl+Q.

Eseguire la funzione in Cloud Shell

Per eseguire la nuova funzione in locale e provarla, usa func start per avviare il runtime di Funzioni (func.exe) in un processo in background per poter usare la riga di comando mentre è in esecuzione. Quindi, usa uno strumento da riga di comando, curl, per interagire con la funzione.

Se usi Core Tools dal tuo computer, puoi usare curl solo da una seconda finestra del terminale o da un browser Web. L'output prodotto da Core Tools compare in tempo reale nella prima finestra del terminale. In Cloud Shell sei limitato a un singolo terminale, quindi è necessario eseguire Core Tools (func.exe) in un processo in background.

  1. Eseguire il comando seguente per avviare l'host di Funzioni in modalità invisibile all'utente in background.

    func start &> ~/output.txt &
    

    Come per func new, Cloud Shell dovrebbe ancora trovarsi nella directory loan-wizard.

    L'host Funzioni ora scrive il relativo output nel file ~/output.txt. Puoi continuare a usare la riga di comando durante l'esecuzione.

    Usare il comando ps per verificare che il processo func sia in esecuzione.

  2. Immettere il comando seguente per visualizzare il log di output.

    code ~/output.txt
    

    Nell'output vedi un messaggio che elenca Functions: simple-interest: disponibile sia come richiesta HTTP GET che POST http://localhost:7071/api/simple-interest.

    Nota

    Se compare un messaggio di errore, seleziona Ctrl+C per arrestare l'host. Assicurati che il contenuto del file di codice sia uguale a quello dell'esempio.

    Questo URL localhost non viene pubblicato sul Web, ma è accessibile solo dagli strumenti in esecuzione nella sessione di Cloud Shell.

  3. Chiudi l'editor selezionando Ctrl+Q.

  4. Esegui il comando seguente per inviare una richiesta HTTP GET alla funzione in esecuzione in locale.

    curl "http://localhost:7071/api/simple-interest" -w "\n"
    

    L'output, Please supply principal, rate and term in the query string, indica che la funzione è stata richiamata correttamente ed è in grado di restituire una risposta, ma non è stata chiamata come previsto. È necessario fornire i parametri come parte della richiesta HTTP.

  5. Richiama di nuovo la funzione. Questa volta specifica un valore per ognuno dei parametri della stringa di query.

    curl "http://localhost:7071/api/simple-interest?principal=5000&rate=.035&term=36" -w "\n"
    

    Questa volta, l'output è 6300. La funzione si è comportata come previsto.

  6. Immettere il comando seguente per visualizzare nuovamente il log di output.

    code ~/output.txt
    

    Dopo le voci del log di avvio, viene aggiunto un set di voci di log con timestamp per ogni volta che è stata chiamata la funzione con curl:

    [2024-02-20T06:25:56.700Z] Executing 'Functions.simple-interest' (Reason='This function was programmatically called via the host APIs.', Id=5daf20c3-f204-41bb-a5b9-021acaf17c04)
    [2024-02-20T06:25:56.893Z] Executed 'Functions.simple-interest' (Succeeded, Id=5daf20c3-f204-41bb-a5b9-021acaf17c04, Duration=228ms)
    
    
  7. Chiudi l'editor selezionando Ctrl+Q.