Azure Function Serverless Cold Start

Azure Function Serverless Cold Start

Quando creiamo una Azure Functions possiamo scegliere se associarla ad un piano a pagamento oppure sfruttare la parte di servizi gratuiti (=entro certi limiti) e definirla Serverless.

Scegliendo la Serverless andremo inevitabilmente incontro al fenomeno del Cold Start. In cosa consiste?

Nel momento in cui effettueremo una chiamata ad un endpoint della nostra Function verranno eseguiti i seguenti steps:

  1. Azure allocherà la nostra applicazione su un server
  2. Verrà effettuata la fase di starup della nostra applicazione
  3. Il nostro Endpoint verrà eseguito rispondendo alla chiamata effettuta.

Finito il tutto la nostra Azure Functions resterà attiva per circa 20 minuti. Terminato questo tempo verrà deallocato lo spazio sul server (=punto 1)

Cold Start: Come evitarlo?

Un trucchetto per evitare il cold start consiste nell’inserire un EndPoint di tipo TimerTrigger ed impostarlo ogni 15-20 minuti in modo da mantenere la nostra applicazione sempre sveglia.

1
2
3
4
5
6
7
8
public static class TimerTriggerCronExample
{
    [FunctionName("TimerTriggerCronExample")]
    public static void Run([TimerTrigger("0 */15 * * * *")]TimerInfo myTimer, ILogger log)
    {
        log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
    }
}

Personalmente ho utilizzato questo trucchetto in diverse occasioni e mi sono trovato molto bene.

Tips Omaggio: Per evitare ci consumare “chiamate gratuite” vi invito a ragionare e mettere il cron ogni 15 minuti negli orari in cui la utilizzerete. Nel mio caso -essendo ad uso lavorativo- avevo definito dalle 09:00 CTE alle 18:00 CTE tutti i giorni tranne sabato e domenica.

NOTA IMPORTANTE: Se volete vedere come funziona la definizione dei cron, vi invito a leggere la sezione NCRONTAB expressions scritta in precedenza.