Esercizio - Esplorare i tipi di associazione di input e di output

Completato

In questo esercizio verrà creata una funzione che viene eseguita quando riceve una richiesta HTTP e risponde a ogni richiesta tramite la restituzione di un messaggio.

Di seguito viene mostrata un'immagine generale degli elementi che verranno creati.

Screenshot del riquadro Codice e test che mostra il codice predefinito per il modello di funzione di trigger HTTP.

Il parametro req è l'associazione di trigger e il parametro res è l'associazione di output. Può essere utile pensare a questi parametri come abbreviazioni per "richiesta" e "risposta".

Screenshot del riquadro Codice e test che mostra il codice predefinito per il modello di funzione di trigger HTTP.

Il parametro Request è l'associazione di trigger e il parametro Response è l'associazione di output.

Creare un'app per le funzioni

Si creerà ora un'app per le funzioni che verrà usata in questo modulo. Un'app per le funzioni consente di raggruppare le funzioni come un'unità logica per semplificare la gestione, la distribuzione e la condivisione delle risorse.

  1. Accedere al portale di Azure usando l'account con cui è stata attivata la sandbox.

  2. Dal menu della risorsa o nella pagina Home selezionare Crea una risorsa. Viene visualizzato il riquadro Crea una risorsa.

  3. Nel menu Crea una risorsa selezionare Calcolo e nell'elenco dei risultati selezionare App per le funzioni. Potrebbe essere necessario cercare App per le funzioni nella finestra Servizi di ricerca e marketplace.

  4. Selezionare A consumo, quindi selezionare il pulsante Seleziona. Viene visualizzato il riquadro Crea app per le funzioni.

  5. Nella scheda Informazioni di base immettere i valori indicati di seguito per ogni impostazione.

    Impostazione valore Descrizione
    Dettagli del progetto
    Subscription Concierge Subscription La sottoscrizione di Azure da usare per questo esercizio.
    Gruppo di risorse Nell'elenco a discesa selezionare [nome gruppo di risorse sandbox] Il gruppo di risorse per la sandbox.
    Dettagli dell'istanza
    Nome dell'app per le funzioni Immettere un nome globalmente univoco Questo nome identifica la nuova app per le funzioni. I caratteri validi sono a-z, 0-9 e -.
    Stack di runtime Nell'elenco a discesa selezionare Node.js Il codice di esempio in questo modulo è scritto in JavaScript.
    Versione Accettare l'impostazione predefinita Il valore predefinito è sufficiente per questo esercizio.
    Area Nell'elenco a discesa selezionare un valore per Località Selezionare l'area più vicina.
  6. Accettare le impostazioni predefinite per tutte le altre opzioni. Selezionare Rivedi e crea per convalidare le impostazioni e quindi Crea per effettuare il provisioning e la distribuzione dell'app per le funzioni.

  7. La distribuzione può richiedere tempo. Nei controlli globali accanto al nome dell'account selezionare l'icona Notifiche e controllare la presenza del messaggio La distribuzione è riuscita.

  8. Al termine della distribuzione della funzione, selezionare Vai alla risorsa. Viene visualizzato il riquadro Panoramica per l'app per le funzioni.

  1. Accedere al portale di Azure con lo stesso account usato per attivare la sandbox.

  2. Dal menu della risorsa o nella pagina Home selezionare Crea una risorsa. Viene visualizzato il riquadro Crea una risorsa.

  3. Nel menu Crea una risorsa selezionare Calcolo e nell'elenco dei risultati selezionare App per le funzioni. Potrebbe essere necessario cercare App per le funzioni nella finestra Servizi di ricerca e marketplace.

  4. Selezionare A consumo, quindi selezionare il pulsante Seleziona. Viene visualizzato il riquadro Crea app per le funzioni.

  5. Nella scheda Informazioni di base immettere i valori indicati di seguito per ogni impostazione.

    Impostazione valore Descrizione
    Dettagli del progetto
    Subscription Concierge Subscription La sottoscrizione di Azure da usare per questo esercizio.
    Gruppo di risorse Nell'elenco a discesa selezionare [nome gruppo di risorse sandbox] Il gruppo di risorse per la sandbox.
    Dettagli dell'istanza
    Nome dell'app per le funzioni Immettere un nome globalmente univoco Questo nome identifica la nuova app per le funzioni. I caratteri validi sono a-z, 0-9 e -.
    Stack di runtime Nell'elenco a discesa selezionare PowerShell Core Il codice di esempio per questo modulo è scritto in PowerShell.
    Versione Accettare l'impostazione predefinita Il valore predefinito è sufficiente per questo esercizio.
    Area Nell'elenco a discesa selezionare un valore per Località Selezionare l'area più vicina.
  6. Accettare le impostazioni predefinite per tutte le altre opzioni. Selezionare Rivedi e crea per convalidare l'input e quindi Crea per effettuare il provisioning e la distribuzione dell'app per le funzioni.

  7. La distribuzione può richiedere tempo. Nei controlli globali accanto al nome dell'account selezionare l'icona Notifiche e controllare la presenza del messaggio La distribuzione è riuscita.

  8. Al termine della distribuzione della funzione, selezionare Vai alla risorsa. Viene visualizzato il riquadro Panoramica per l'app per le funzioni.

Suggerimento

Se non si riesce a trovare l'app per le funzioni nel portale di Azure, vedere come aggiungere app per le funzioni ai preferiti nel portale di Azure.

Creare una funzione

Ora che è disponibile un'app per le funzioni, è il momento di creare una funzione. Ogni funzione ha un trigger che la attiva. In questo modulo verrà definito un trigger HTTP usando un modello predefinito.

  1. Selezionare il pulsante Crea funzione in Crea nel portale di Azure nella scheda Funzioni della pagina Panoramica.

  2. Viene visualizzato il riquadro Crea funzione.

    Screenshot del riquadro Crea funzione.

  3. Nella sezione Seleziona un modello selezionare il modello Trigger HTTP e quindi selezionare Avanti.

  4. Nella sezione Dettagli modello confermare le impostazioni seguenti.

    • Nella casella di testo Nome funzione usare il nome predefinito HttpTrigger1. Azure crea automaticamente nomi univoci per le funzioni create. È possibile scegliere un nome diverso, ma ricordare sempre di usare nomi significativi.

    • Nella casella di testo Livello di autorizzazione usare il valore predefinito Funzione. Il livello di autorizzazione determina quali chiavi devono essere presenti nella richiesta affinché venga eseguita. Il livello di autorizzazione Funzione richiede una chiave specifica della funzione, disponibile una volta creata la funzione.

  5. Seleziona Crea. Quando la funzione trigger viene propagata all'app per le funzioni, viene visualizzato il riquadro Funzioni per l'app per le funzioni, in cui appare HttpTrigger1.

  6. Nella barra dei comandi selezionare Recupera URL della funzione. Viene visualizzata la finestra di dialogo Recupera URL della funzione.

  7. Nell'elenco a discesa, selezionare default (function key) (predefinito - tasto funzione), quindi l'icona Copia negli Appunti alla fine dell'URL e infine OK per chiudere la finestra di dialogo.

  8. Nella barra degli indirizzi di una nuova scheda del browser incollare l'URL della funzione copiato. Premere INVIO per eseguire la richiesta nel browser. La risposta potrebbe richiedere un paio di minuti per l'inizializzazione dell'app per le funzioni. Se viene visualizzato un errore di timeout, aggiornare per inviare di nuovo la richiesta.

    Quando la funzione risponde, l'output dovrebbe essere simile all'esempio seguente visualizzato nel browser.

    This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.
    
  9. Aggiungere la stringa di query &name=Joe seguente alla fine dell'URL. L'URL risultante sarà simile a quello nell'esempio seguente:

    https://example.azurewebsites.net/api/HttpTrigger1?code=AbCdEfGhIjKlMnOpQrStUvWxYz==&name=Joe

  10. Premere INVIO per eseguire la richiesta nel browser. Quando la funzione risponde, l'output dovrebbe essere simile all'esempio seguente visualizzato nel browser.

    Hello, Joe. This HTTP triggered function executed successfully.
    

    Come si è potuto osservare finora in questo esercizio, quando si crea una funzione è necessario definire un trigger. Ogni funzione ha un singolo trigger. In questo esempio si usa un trigger HTTP, vale a dire che la funzione viene avviata quando riceve una richiesta HTTP. L'implementazione predefinita dal modello, illustrata nello screenshot seguente in JavaScript, risponde con il valore del parametro name ricevuto nella stringa di query o nel corpo della richiesta. Se non sono state fornite stringhe di query, la funzione risponde con un messaggio che chiede a chi sta eseguendo la chiamata di specificare un valore per il parametro name.

    Illustrazione del trigger HTTP predefinito, che mostra i parametri di binding di richiesta e risposta HTTP.

  11. Nel portale di Azure scegliere Codice + test dal menu Funzione.

    Viene visualizzato il riquadro Codice + test per la funzione e mostra il contenuto del file index.js. Il codice JavaScript predefinito per la funzione deve essere simile a quello nell'esempio seguente.

    module.exports = async function (context, req) {
        context.log('JavaScript HTTP trigger function processed a request.');
    
        const name = (req.query.name || (req.body && req.body.name));
        const responseMessage = name
            ? "Hello, " + name + ". This HTTP triggered function executed successfully."
            : "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.";
    
        context.res = {
            // status: 200, /* Defaults to 200 */
            body: responseMessage
        };
    }
    
  12. Si esaminerà ora brevemente l'altro file della funzione, il file config function.json. Accedere al file selezionando function.json nell'elenco a discesa nel percorso file sopra il blocco di codice. I dati di configurazione sono visualizzati nell'elenco JSON seguente.

    {
        "bindings": [
        {
            "authLevel": "function",
            "type": "httpTrigger",
            "direction": "in",
            "name": "req",
            "methods": [
            "get",
            "post"
            ]
        },
        {
            "type": "http",
            "direction": "out",
            "name": "res"
        }
      ]
    }
    

    Questa funzione ha un'associazione di trigger denominata req di tipo httpTrigger e un'associazione di output denominata res di tipo http.

Nel codice precedente per la funzione si è visto come è stato eseguito l'accesso al payload della richiesta HTTP in ingresso tramite il parametro req. Analogamente, è stata inviata una risposta HTTP impostando il parametro res. Le associazioni risultano davvero utili per alleggerire il carico di lavoro dell'utente.

Ora che è disponibile un'app per le funzioni, è il momento di creare una funzione. Ogni funzione ha un trigger che la attiva. In questo modulo verrà creato un trigger HTTP usando un modello.

  1. Selezionare il pulsante Crea funzione in Crea nel portale di Azure nella scheda Funzioni della pagina Panoramica.

  2. Viene visualizzato il riquadro Crea funzione.

  3. Nella sezione Seleziona un modello selezionare il modello Trigger HTTP e quindi selezionare Avanti.

  4. Nella sezione Dettagli modello confermare le impostazioni seguenti.

    • Nella casella di testo Nome funzione usare il nome predefinito HttpTrigger1. Azure fornisce automaticamente un nome univoco quando si crea una funzione. È possibile scegliere un nome diverso, ma ricordare sempre di usare nomi significativi.

    • Nella casella di testo Livello di autorizzazione accettare il valore predefinito Funzione. Il livello di autorizzazione determina quali chiavi devono essere presenti nella richiesta affinché venga eseguita. Funzione richiede una chiave specifica della funzione.

      Screenshot del riquadro Aggiungi funzione.

  5. Seleziona Crea. Viene visualizzato il riquadro HttpTrigger1 relativo alla funzione.

  6. Nella barra dei comandi selezionare Recupera URL della funzione. Viene visualizzata la finestra di dialogo Recupera URL della funzione.

  7. Selezionare default (function key) (predefinito - tasto funzione) dall'elenco a discesa, quindi l'icona Copia negli Appunti alla fine dell'URL e infine OK per chiudere la finestra di dialogo.

  8. Nella barra degli indirizzi di una nuova scheda del browser incollare l'URL della funzione copiato. Premere INVIO per eseguire la richiesta nel browser. La risposta potrebbe richiedere un paio di minuti per l'inizializzazione dell'app per le funzioni. Se viene visualizzato un errore di timeout, aggiornare per inviare di nuovo la richiesta.

    Quando la funzione risponde, l'output dovrebbe essere simile all'esempio seguente visualizzato nel browser.

    This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.
    
  9. Aggiungere la stringa di query &name=Joe alla fine dell'URL. L'URL risultante sarà simile a quello nell'esempio seguente:

    https://example.azurewebsites.net/api/HttpTrigger1?code=AbCdEfGhIjKlMnOpQrStUvWxYz==&name=Joe

  10. Premere INVIO per eseguire la richiesta nel browser. Quando la funzione risponde, l'output dovrebbe essere simile all'esempio seguente visualizzato nel browser.

    Hello, Joe. This HTTP triggered function executed successfully.
    

    Come si è potuto osservare finora in questo esercizio, quando si crea una funzione è necessario definire un trigger. Ogni funzione ha un singolo trigger. In questo esempio si usa un trigger HTTP, vale a dire che la funzione viene avviata quando riceve una richiesta HTTP. L'implementazione predefinita dal modello, illustrata nello screenshot seguente in PowerShell, usa il cmdlet Push-OutputBinding per rispondere con il valore del parametro name che faceva parte della stringa di query o del corpo della richiesta. Se non sono state fornite stringhe, la funzione risponde con un messaggio che chiede a chi sta eseguendo la chiamata di specificare un valore per il parametro name.

    Riquadro Codice e test per la richiesta HTTP che mostra la risposta e i rispettivi parametri di binding.

  11. Nel menu Funzione selezionare Codice + Test. Viene visualizzato il riquadro Codice + test per la funzione e mostra il contenuto del file run.ps1.

    Il codice PowerShell predefinito per la funzione deve essere simile a quello nell'esempio seguente.

    using namespace System.Net
    
    # Input bindings are passed in via param block.
    param($Request, $TriggerMetadata)
    
    # Write to the Azure Functions log stream.
    Write-Host "PowerShell HTTP trigger function processed a request."
    
    # Interact with query parameters or the body of the request.
    $name = $Request.Query.Name
    if (-not $name) {
        $name = $Request.Body.Name
    }
    
    $body = "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
    
    if ($name) {
        $body = "Hello, $name. This HTTP triggered function executed successfully."
    }
    
    # Associate values to output bindings by calling 'Push-OutputBinding'.
    Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
        StatusCode = [HttpStatusCode]::OK
        Body = $body
    })
    
  12. Si esaminerà ora brevemente l'altro file della funzione, il file config function.json. Aprire il file selezionando function.json dall'elenco a discesa del percorso file. I dati di configurazione sono visualizzati nell'elenco JSON seguente.

    {
      "bindings": [
        {
          "authLevel": "function",
          "type": "httpTrigger",
          "direction": "in",
          "name": "Request",
          "methods": [
            "get",
            "post"
          ]
        },
        {
          "type": "http",
          "direction": "out",
          "name": "Response"
        }
      ]
    }
    

    Come si può osservare, questa funzione ha un'associazione di trigger denominata Request di tipo httpTrigger e un'associazione di output denominata Response di tipo http. Nel codice precedente per la funzione si è visto come è stato eseguito l'accesso al payload della richiesta HTTP in ingresso tramite il parametro Request. Analogamente, è stata inviata una risposta HTTP semplicemente impostando il parametro Response. Le associazioni risultano davvero utili per alleggerire il carico di lavoro dell'utente.

Esplorare i tipi di associazioni

  1. Nel menu Funzione selezionare Integrazione. Viene visualizzato il riquadro Integrazione relativo alla funzione.

    Si noti che sono già definiti un trigger e un'associazione di output, come mostrato nell'immagine seguente. La vista dell'integrazione si adatta al meglio alla larghezza e all'altezza dello schermo. Le stesse informazioni possono essere visualizzate orizzontalmente, se lo schermo è sufficientemente ampio.

    Screenshot del diagramma di flusso verticale che mostra trigger e input che portano alla funzione e funzione che porta agli output.

    È possibile notare che l'aggiunta di più di un trigger non è consentita. Per modificare un trigger per una funzione, è necessario eliminare il trigger e crearne uno nuovo. Tuttavia, le sezioni Input e Output consentono di aggiungere più di un'associazione, in modo che la richiesta possa accettare più di un valore di input e restituire più di un valore di output.

  2. Nella casella Input selezionare Aggiungi input. Viene visualizzato il riquadro Crea input. Selezionare l'elenco a discesa per Tipo di associazione per visualizzare un elenco di tutti i tipi di associazione di input possibili.

    Screenshot delle opzioni Aggiungi input.

    Soffermarsi a esaminare queste associazioni di input e valutarne il possibile uso in una soluzione.

    Più avanti in questo modulo verranno aggiunte le associazioni di input ma, per il momento, selezionare Annulla per ignorare questo riquadro.

  3. Nella casella Output selezionare Aggiungi output. Viene visualizzato il riquadro Crea output. Selezionare l'elenco a discesa per Tipo di associazione per visualizzare un elenco di tutti i tipi di associazione di output possibili.

    Screenshot delle opzioni Aggiungi output.

    Come è possibile notare, sono disponibili diversi tipi di associazioni di output. Più avanti in questo modulo verranno aggiunte le associazioni di output ma, per il momento, selezionare Annulla per ignorare questo riquadro.

  1. Nel menu Funzione selezionare Integrazione. Viene visualizzato il riquadro Integrazione relativo alla funzione.

    Si noti che sono già definiti un trigger e un'associazione di output, come mostrato nell'immagine seguente. La vista dell'integrazione si adatta al meglio alla larghezza e all'altezza dello schermo. Le stesse informazioni possono essere visualizzate verticalmente, se lo schermo non è sufficientemente ampio.

    Screenshot del diagramma di flusso orizzontale che mostra trigger e input che portano alla funzione e funzione che porta agli output.

    È possibile notare che l'aggiunta di più di un trigger non è consentita. Per modificare il trigger per una funzione, è necessario eliminare il trigger e crearne uno nuovo. Tuttavia, le sezioni Input e Output consentono di aggiungere più associazioni, in modo che la funzione possa accettare più di un valore di input e restituire più di un valore di output.

  2. Nella casella Input selezionare Aggiungi input. Viene visualizzato il riquadro Crea input. Selezionare l'elenco a discesa per Tipo di associazione per visualizzare un elenco di tutti i tipi di associazione di input possibili.

    Screenshot delle opzioni Aggiungi input.

    Soffermarsi a esaminare queste associazioni di input e valutarne il possibile uso in una soluzione. Esistono molte possibilità tra cui scegliere.

    Più avanti in questo modulo verranno aggiunte le associazioni di input ma, per il momento, selezionare Annulla per ignorare questo riquadro.

  3. Nella casella Output selezionare Aggiungi output. Viene visualizzato il riquadro Crea output. Selezionare l'elenco a discesa per Tipo di associazione per visualizzare un elenco di tutti i tipi di associazione di output possibili.

    Screenshot delle opzioni Aggiungi output.

    Come è possibile notare, sono disponibili diversi tipi di associazioni di output. Più avanti in questo modulo verranno aggiunte le associazioni di output ma, per il momento, selezionare Annulla per ignorare questo riquadro.

Finora è stato illustrato come creare un'app per le funzioni e come aggiungervi una funzione. Si è vista una semplice funzione in azione, che viene eseguita quando viene effettuata una richiesta HTTP. Sono stati esaminati anche il portale di Azure e i tipi di associazioni di input e output disponibili per le funzioni. Nell'unità successiva si userà un'associazione di input per leggere il testo da un database.