Serverless and Azure Functions pro-tips and tricks @ Anglebrackets

Jeff Hollan, Program Manager hos Microsoft, gav en præsentation med tips og tricks til Azure Funtions onsdag til Anglebrackets i Orlando.

Efter en lidt for lang introduktion med lidt for meget anekdote, kom Jeff i gang med sine tips og tricks, som jeg vil løbe igennem herunder.

Dependency Injection

Dependency injection er nyt i Azure Functions og giver mulighed for fx at genbruge en HttpClient for alle eksekveringer af en function på en given instans. Som eksempel brugte han SqlConnection og sagde, at den burde man lave som en singleton og injecte ind i sin function. Efter et kritisk spørgsmål fra salen sagde han selv at “this is a bad example”, da det lige præcis for SqlConnection ikke er nødvendigt, da den har indbygget connection pooling. Det virkede uprofessionelt og ikke særlig gennemtænkt.

host.json

host.json er en fil, der er til stede i alle Azure Functions og bruges til konfiguration. Jeff Hollan demonstrerede, at man på en nem måde kan kontrollere concurrence, timeouts og logging. Som en vigtig note skal det nævnes, at konfigurationerne gælder per instans.

Azure Key Vault

Azure Functions snakker rigtig nemt sammen med Azure Key Vault, som kan bruges til connection strings, API-nøgler og andre ting, man ikke ønsker i sin source control. En Function App kan sættes op til at optræde som en bruger i Azure Active Directory og den kan herefter få adgang til en Key Vault. Anbefalingen var, at man lokalt bruger local.settings.json til secrets, mens man i skyen skifter over til Key Vault.

Durable functions

Durable functions. En mulighed for at orkestrere functions, der skal kaldes i sekvens. Et output fra en function kan på den måde bruges som input til den næste. Durable functions har ikke nogen timeout og de koster ikke penge at køre mens de venter på andre functions.

Message ordering

Som det sidste viste han to teknikker til at sikre, at beskeder sendt til en function, vil blive processeret i samme rækkefølge som de bliver sendt.

Første måde at løse det på er med event hubs. Her kan man sikre at én partition kører på én instans. Det skal i den forbindelse nævnes, at det giver en begrænsning i skalering, da en instans kan låse en og kun en partition. Man er derfor begrænset til at kunne skalere til det samme antal instanser som man har partitions.

Den anden mulighed er at bruge queues og lægge beskeder, der skal processeres i rækkefølge, i den samme session. Den løsning vil skalere bedre, da man kan have alle de sessions man vil og derfor ikke løber ind i nogen begrænsning på antallet af instanser, der måtte blive spundet op.

Konklusion

Efter en lidt langsom start og et rigtig skidt første eksempel fik Jeff Hollan præsenteret nogle rigtig interessante ting omkring Azure Functions og jeg gik derfra med følelsen af, at jeg havde fået noget ny og god viden med.

Kategorier: AngleBrackets2019