Azure Function TimerTrigger - CRON

Azure Function TimerTrigger - CRON

Utilizzare le Azure Function TimerTrigger ha indubbiamente dei vantaggi, ma bisogna prestare attenzione a come le si configura. Vi state chiedendo in che senso? La Azure Function per scattare ha bisogno di un orario di attivazione oppure di un timer. Nel momento in cui si verifica lo scoccare dell’orario, vi sarà l’esecuzione del nostro codice sorgente.

Azure Function - Template

Nel momento in cui si crea una Azure Function TimerTrigger dobbiamo dichiarare subito il timining di esecuzione. Vi riporto il template d’esempio nel momento in cui si genera una nuova function di questa tipologia.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;

namespace DEVAndreaCarratta
{
    public static class TimerTriggerCronExample
    {
        [FunctionName("TimerTriggerCronExample")]
        public static void Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer, ILogger log)
        {
            log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
        }
    }
}

Una volta definito il template d’esempio entramo nel vivo dell’articolo.

TimerTrigger - CRON

Il primo parametro del metodo Run è la chiave della nostra esecuzione e relative schedulazioni

1
[TimerTrigger("0 */5 * * * *")]

Se state pensando “Hey, io quel formato lo conosco ed è CRON!” avete indovinato. Se -invece- non vi dice nulla vi consiglio di leggere sino in fondo. Prima di spiegarvi il significato dei numeri e del carattere asterisco, vi ricordo che il timing bisogna definirlo in formato UTC e non nell’orario locale.

Ora diamo un peso/ordine ai valori presenti in TimerTrigger

1
{second} {minute} {hour} {day} {month} {day-of-week}

Come vedete -sulla carta- è tutto semplice, ma se vi state chiedendo come mai vi è un / nella definizione dei minuti vi consiglio il prossimo paragrafo.

NCRONTAB expressions

Come avrete intuito esistono dei caratteri jolly da usare nella definizione del TimerTrigger e li illustro di seguito.

TypeExampleWhen triggered
A specific value“0 5 * * * *”at hh:05:00 where hh is every hour (once an hour)
All values (*)“0 * 5 * * *”at 5:mm:00 every day, where mm is every minute of the hour (60 times a day)
A range (- operator)“5-7 * * * * *”at hh:mm:05,hh:mm:06, and hh:mm:07 where hh:mm is every minute of every hour (3 times a minute)
A set of values (, operator)“5,8,10 * * * * *”at hh:mm:05,hh:mm:08, and hh:mm:10 where hh:mm is every minute of every hour (3 times a minute)
An interval value (/ operator)“0 */5 * * * *”at hh:00:00, hh:05:00, hh:10:00, and so on through hh:55:00 where hh is every hour (12 times an hour)

La tabella non è farina del mio sacco lo ammetto. Ho fatto il copia ed incolla dalla documentazione ufficiale Microsoft visto che non è molto da inventare cambiandola.

Come avrete sicuramente visto la definizione è abbastanza flessibile e vi consente di gestire al meglio l’esecuzione del vostro codice. Molto probabilmente sbaglierete le prime definizioni. Non preoccupatevi, la mia prima definizione è finita male con un bombardamento mail ogni secondo.