Azure Function Time Trigger: Cron tramite settings

Azure Function Time Trigger: Cron tramite settings

Utilizzare le Azure Function Time Trigger ha dei vantaggi non indifferenti, ma sei sicuro di programmarle correttamente? Un esempio?

Come definisci il timer cron per le esecuzioni?

La soluzione ideale consiste nel sfruttare i settings per definire il cron. In questo modo ci basterà un singolo setting -con annesso restart- dimenticandoci il deploy del codice.

Creazione Function

Nel momento in cui definiamo una Azure Function Time Trigger lo schema che avremo davanti agli occhi sarà (molto simile) al seguente.

1
2
3
4
5
6
7
8
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}");
    }
}

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

TimerTrigger Setting

Come primo passaggio dobbiamo aprire il nostro file local.settings.json e modificarlo aggiungendo il nostro nuovo setting

1
2
3
4
5
6
{
    "IsEncrypted": false,
    "Values": {
        "TimerTriggerCronDefinition": "0 */1 * * * *"
  }
}

Cosa ho fatto? Nella sezione Values ho aggiunto TimerTriggerCronDefinition contenente la definizione di schedulazione. Come avrete (spero) notato sono passato da ogni cinque minuti ad ogni minuto.

Prima di passare alla sessione successivo volevo segnalare due punti importanti:

  • Dalla sezione Values ho cancellato tutti gli alti parametri a scopo didattico dell’articolo
  • Ad ogni Function TimerTrigger potete inserire/associare un setting dedicato

Function TimerTrigger

Dopo avere definito ed inserito il nuovo parametro, non resta che utilizzarlo nella nostra function modificando il template proposto all’inizio.

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

Avete visto la differenza? Siamo passati da avere

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

al seguente codice

1
[TimerTrigger("%TimerTriggerCronDefinition%")]TimerInfo myTimer

Interessante vero?