Era da un pò che volevo provare nelle Azure Function il Sql Trigger: in questi giorni mi è capitata l’occasione per cui ne scrivo in questo post.
In poche parole questa funzionalità permette di richiamare una funzione Azure Function alla modifica del contenuto di una tabella ospitata in un’istanza di Sql Server Azure.
Ovviamente sarebbe possibile ottenere un risultato simile usando un trigger, ma certamente il fatto che esista un binding con Azure Function lo ritengo molto comodo.
Di seguito Vi spiego come ho messo in produzione la mia soluzione: magari queste mie osservazioni possono essere utili a qualcuno.
Fatto questo occorre preparare l’istanza di Sql Server Azure con i comandi di seguito.
Con il primo comando si abilita l’istanza al tracking, mentre con il secondo si dettaglia quale tabella si vuole utilizzare.
Due parole sul primo comando.
Con il parametro CHANGE_RETENTION si indica per quanto tempo si devono mantenere le modifiche.
Cioè la se la Vs Azure Function NON consuma per più di un giorno i messaggi di Sql Server che indicano le modifica alla tabella (magari per qualche motivo avete spento il servizio), questi allo scadere del giorno vengono cancellati (opzione AUTO_CLEANUP = ON).
Scusate la spieghescion così arraffazzonata, ma questo è…….
Ho trovato le due opzioni del code-snippet presentato più corrette per il mio ambito di utilizzo: ovviamente valutate con attenzione il Vs ambito.
Ora dedichiamoci al progetto che contiene le Azure Function.
Premetto che il progetto di cui parlerò nel seguito è stato creato utilizzando l’opzione Isolated Function: se nel Vs ambito usate l’opzione In-Process ci sono alcune piccole differenze, ed è necessario che consultiate la documentazione.
Iniziamo con l’installare il pacchetto nuget dedicato: Microsoft.Azure.Functions.Worker.Extensions.Sql.
Alla data attuale occorre per forza usare la versione preview (altrimenti non contiene gli attributi che userò nel seguito): io ho usato la versione 3.0.181-preview.
Quindi ecco il codice che permette di consumare gli eventi.
Qui c’è poco da dire: l’attributo SqlTrigger vuole in ingresso il nome della tabella nonchè la stringa di connessione.
Se tutto va come deve ad ogni modifica CRUD che ha come oggetto la tabella TabellaDaMonitorare viene richiamata la funzione.
Spero di esserVi stato utile.
Linkografia
Public preview: Azure SQL trigger for Azure Functions
Azure SQL bindings for Azure Functions