Introduzione ad Azure Functions Proxies

pubblicato da , il 27/11/2017 alle 0:00

L'ultima edizione dell'evento Microsoft Connect(); è stato ricco di annunci; tra questi c'è stato anche il rilascio in GA di una nuova funzionalità della piattaforma serverless di Azure: Azure Functions Proxies.

In questo articolo vedremo di cosa si tratta, come utilizzare questa funzionalità, sottolinenado anche cosa di nuovo è stato aggiunto rispetto alla precedente fase di public preview

Cosa sono, come abilitarli e come utilizzarli

Tramite Functions Proxies è possibile definire uno (o più) endpoint che fungano da reverse proxy per altre API, siano esse altre function oppure qualsiasi altra API. In questo modo è possibile definire la superficie di esposizione delle API utilizzate, garantendo uniformità verso i client, anche se le API che verranno effettivamente invocate dal proxy sono profondamente differenti.

La prima grossa differenza della versione in GA rispetto a quella di public preview è che sono abilitati di default su tutte le nuove applicazioni che verranno create. Per le Azure Functions create in precedenza, per cui la funzionalita di Proxy era disabilitata, è necessaria invece un'attivazione esplicita.

Tramite il portale è possibile creare e configurare direttamente un nuovo proxy:

create proxy from portal

Come si può vedere dall'immagine precedente, dal portale è possibile definire le proprietà principali del proxy, si ha anche la possibilità di manipolare la request ricevuta, in modo da adattarla prima di inoltrarla all'API che la gestirà effettivamente, e la response ottenuta prima di inoltrarla al client.

Con il passaggio in GA, è stato aggiunto ai Functions Core Tools (CLI) pieno supporto alla creazione e gestione dei proxy. Una volta installato il relativo pacchetto npm con il semplice comando:

npm i -g azure-functions-core-tools

abbiamo a disposizione un modo rapido per creare, configurare e testare i nostri proxy anche in locale. Ecco i pochi, semplici passi da seguire:

func init func proxy create --name demo

e, selezionando il template Sample Proxy, viene creato nella folder corrente un file proxies.json, in cui verranno definiti e configurati i proxy. L'output dell'operazione precedente è un file con il seguente contenuto:

{
  "Proxies": {
    "demo": {
      "matchCondition": {
        "methods": [
          "GET"
        ],
        "route": "test"
      },
      "backendUri": "http://httpbin.org/ip"
    }
  }
}

Il compito di questo proxy sarà quello di reindirizzare le chiamate alla rotta /test all'API configurata con l'attributo backendUri (in questo caso http://httpbin.org/ip).

Per verificare che quanto appena creato si comporti nel modo atteso, possiamo eseguire il runtime in locale con il pieno supporto al proxy definito negli step precedenti, con il seguente comando:

func host start

Se tutto è andato a buon fine l'output sulla CLI dovrebbe essere simile al seguente:

host starting

Come riportato nell'output della console, all'indirizzo http://localhost:7071 abbiamo il nostro runtime in ascolto. Invocando la rotta definita nella configurazione del proxy, con un client tipo Postman, l'output dovrebbe essere il seguente:

postman

Conclusioni

In questo articolo abbiamo visto una feature particolare all'interno dell'ecosistema serverless proposto da Azure: Functions Proxies. Abbiamo visto cosa sono, come configurarli e come eseguirli e testarli, anche localmente.

Un modo semplice e rapido per definire una sorta di lightway gateway per le API del nostro sistema.