DEV Community

Cover image for [ITA] Primi passi con le Azure Functions
pul
pul

Posted on

[ITA] Primi passi con le Azure Functions

Le Azure Functions sono una soluzione di serverless computing fornita da Azure, consentono l'esecuzione di codice in cloud senza il provisioning dell'infrastruttura.

Le funzioni possono essere scritte usando diversi linguaggi di programmazione: C#, Java, JavaScript, PowerShell, Python, Typescript, Rust e Go.

Il codice viene eseguito in risposta a diversi tipi di evento detti trigger come ad esempio una chiamata http utilizzando HttpTrigger, all'arrivo di un nuovo messaggio in uno dei sistemi di code di Azure, alla creazione di un blob o in base ad un intervallo di tempo prestabilito.

In questa pagina della documentazione di Microsoft si possono trovare tutti i trigger utilizzabili nel servizio.

E' possibile sviluppare le Azure Functions tramite Visual Studio e Visual Studio Code.

Lo scopo di questo articolo è quello di creare il setup minimo allo sviluppo di una funzione di "Hello World" come mia reference futura e come aiuto a chi dovesse utilizzare per la prima volta questo servizio di Azure.

Setup ambiente di sviluppo

Per questo tutorial utilizerò Visual Studio Code e Typescript, la funzione avrà un trigger http ed eseguirà una chiamata http per recuperare il prezzo attuale di BTC da restituire al chiamante.

Prerequisiti

  • Una subscription ad Azure (Esiste anche un piano gratuito ottimo per provare i servizi di Azure)
  • Visual Studio Code
  • nodejs con versione ≥ 14
  • Estensione "Azure Functions" di VS Code
  • Azure Functions Core Tools

Creazione del servizio su Azure

Dal portale di Azure creare una nuova risorsa di tipo "Function App".

Creazione risorsa portale azure

Cliccare su "Create" e popolare i campi richiesti scegliendo la propria subscription e un resource group al quale associare la nuova risorsa.

I resource group non sono altro che contenitori di risorse.

Volendo creare la funzione in Typescript scelgo come runtime di esecuzione Node.js.

A questo punto è possibile spostarsi sulla tab successiva "Hosting".

Per poter funzionare, il servizio, ha necessità di uno spazio di archiviazione in questa tab è possibile selezionarne uno già esistente o crearne uno nuovo dedicato, in questo caso ne creerò uno dedicato.

Come sistema operativo si può anche lasciare il default (Windows) ma in questo caso scelgo linux e come piano "Consumption".

Non è scopo di questa guida approfondire i piani di Azure Functions ma la scelta serverless in generale consente di non avere costi fissi ma pagare solo a consumo, ha inoltre una quota gratuita piuttosto consistente.

Unica pecca è il cold start che in alcuni casi può essere penalizzante. Il piano serverless infatti non prevede una funzione sempre attiva e pronta a gestire le richieste in ingresso, può quindi capitare che il primo avvio di una funzione sia piuttosto lento.

Maggiori informazioni qui

Creazione Function App 1

Creazione Function App 2

Creazione Function App 3

Connettere VS Code

Tramite le estensioni di VS Code "Azure Tools" e "Azure Functions" è possibile autenticarsi ad Azure di modo da gestire il deploy delle proprie funzioni direttamente dall'IDE.

Cliccare sull'icona dell'estensione, spostarsi nella sezione FUNCTIONS scegliere "Sign In".

Una volta autenticati dovrebbe essere visibile il servizio di Azure Functions creato al punto precedente.

Autenticazione estensione Azure su VS Code

Creazione progetto

Tramite le estensioni è possibile creare il progetto direttamente da VS Code.

Creazione progetto Azure Function da VS Code 1

Creazione progetto Azure Function da VS Code 2

Scegliere Typescript, allo step successivo verrà richiesta la tipologia di trigger. Scegliere Http trigger.

Creazione progetto Azure Function da VS Code 3

Negli step successivi scegliere:

Function Name: HttpTriggerPrice

Authorization Level: Function

Open Project: Open in current window

Il tipo di autorizzazione "Function" forza l'esecuzione alle sole richieste autenticate tramite una chiave specifica generata dal portale.

Maggiori informazioni qui.

A questo punto il progetto è pronto per essere editato.

Lanciare il comando per installare le dipendenze.

npm install
Enter fullscreen mode Exit fullscreen mode

Sviluppo funzione

La cli di Azure durante lo scaffolding del progetto crea una funzione di Hello World

import { AzureFunction, Context, HttpRequest } from "@azure/functions"

const httpTrigger: AzureFunction = async function (context: Context, req: HttpRequest): Promise<void> {
    context.log('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
    };

};

export default httpTrigger;
Enter fullscreen mode Exit fullscreen mode

E' possibile eseguire la funzione facendo il deploy sul servizio di Azure ma la cli contiene anche un emulatore che rispecchia esattamente il comportamento del servizio in cloud dando la possibilità di sviluppare localmente e offline.

Avviare l'emulatore locale

Per avviare l'emulatore è sufficiente lanciare il comando

npm start
Enter fullscreen mode Exit fullscreen mode

Nel package.json il comando è associato al seguente comando della cli

func start
Enter fullscreen mode Exit fullscreen mode

All'avvio nel terminale viene visualizzato l'endpoint locale utilizzabile per testare la funzione.

Output terminale emulatore azure functions

Visitando il link con Postman o con il browser la funzione risponderà con un messaggio.

Recuperare il prezzo di BTC ed esporlo tramite la funzione

Come detto in precedenza andremo a consumare un API terza per recuperare il prezzo attuale di BTC.

Per questo breve esempio utilizzeremo le api pubbliche di CoinGeko.

Come prima cosa dobbiamo installare una libreria che ci consenta di gestire in modo semplice le chiamate http, io uso axios.

npm install axios
Enter fullscreen mode Exit fullscreen mode

L'endpoint che richiameremo è:

https://api.coingecko.com/api/v3/exchange_rates
Enter fullscreen mode Exit fullscreen mode

Questa API è pubblica e fornisce il prezzo di bitcoin in relazione ad altre monete, nel nostro caso in relazione al valore di USD.

L'api risponde con un json di questo tipo:

{"rates":{ 
    "btc":{"name":"Bitcoin","unit":"BTC","value":1.0,"type":"crypto"},
  "eth":{"name":"Ether","unit":"ETH","value":12.486,"type":"crypto"},
  "ltc":{"name":"Litecoin","unit":"LTC","value":271.838,"type":"crypto"},
  "usd":{"name":"US Dollar","unit":"$","value":58870.611,"type":"fiat"},
    ...
}}
Enter fullscreen mode Exit fullscreen mode

Una volta recuperati i dati dovremo quindi accedere alla sezione "usd" e scegliere il campo "value".

A questo punto il codice della funzione potrebbe diventare simile al seguente:

import { AzureFunction, Context, HttpRequest } from "@azure/functions"
import axios from "axios";

const httpTrigger: AzureFunction = async function (context: Context, req: HttpRequest): Promise<void> {
    const apiEndpoint = `https://api.coingecko.com/api/v3/exchange_rates`;
    const request = await axios.get(apiEndpoint);
    const data = request.data;
    const usdValue = data?.rates["usd"]?.value;
    const responseMessage = usdValue;
    context.res = {
        // status: 200, /* Defaults to 200 */
        body: responseMessage
    };

};

export default httpTrigger;
Enter fullscreen mode Exit fullscreen mode

Lo so lo so, questo codice non è pronto per la produzione 😅 ma rende l'idea di quello che si può fare con le funzioni. Da qui si può aggiungere gestione dell'errore, eventuali autenticazioni, interazioni con altri servizi, calcoli e così via...

Deploy

Eseguire il deploy utilizzando VS Code è davvero un'operazione semplicissima. Dalla tab dell'estensione dedicata ai servizi Azure si può selezionare la propria funzione locale e cliccare su "Deploy to Function App" e seguire il wizard di deploy selezionando la subscription e il servizio function app creato in precedenza.

A questo punto la funzione dovrebbe essere stata rilasciata in cloud! 🥳

Dal portale di Azure, nella function app è possiibile selezionare la nostra funzione e recuperare l'URL per effettuare qualche test.

Visualizzare la azure function tramite il portale di Azure

Cliccare sulla funzione e poi su Get Function Url.

Recuperare il link alla funzione dal portale di Azure

Provare il link nel browser e il gioco è fatto.

Notare che l'url copiato contiene un codice che è la function key utilizzata per l'autenticazione.
Più informazioni qui

L'argomento Azure Functions non finisce qui, ci sarebbe molto altro da coprire, dall'autenticazione al monitoring, alle diverse tipologie di trigger ecc..

Spero comunque che questi appunti possano essere utili a prendere dimestichezza con il servizio.

Top comments (0)