Wednesday, October 12, 2016

Azure Functions

Introductie

Dit document beschrijft Azure Functions’ zijn mogelijkheden en onmogelijkheden en mogelijke toepassingen. Azure Functions is geïntroduceerd op Build 2016. Het is een toevoeging op de Azure stack die voortborduurt op de mogelijkheden van Azure WebJobs, de onderliggende WebJobs SDK is ook de basis voor Azure Functions. Azure Functions maakt het mogelijk om kleine stukjes code aan te roepen of op een schema te laten draaien om een specifieke functie in je applicatie/architectuur mee te bewerkstelligen. Net als de WebJobs draait het op de App Services infrastructuur en daarmee is een Azure Function meteen zeer schaalbaar, en betaal je alleen voor de tijd dat de code daadwerkelijk draait. 

Features

Een Azure Function wordt gestart door middel van een handmatige actie, een (tijd)schema dat ingesteld kan worden of door middel van een trigger. Een trigger is een gebeurtenis waarbij een extern systeem de Function aanroept door middel van een bericht naar het http end point van de Azure Function. Zo kan er ook informatie van buitenaf de Function bereiken, en kan het een geïntegreerd mini subsyteem (microservice) worden van de applicatie. De Function kan ook output retourneren. Het http eindpunt kan door elke applicatie die http kan praten gebruikt worden maar er is ook een handige set van trigger en connectors die het mogelijk maakt met andere systemen te integreren dat voor een gedeelte is in te regelen via de grafische interface van Azure Functions. De set van triggers en connectoren zal verder uitgebreid worden maar bevat op dit moment in ieder geval de Azure storage oplossingen zoals Tables, Queues en Blob storage. Het is bijvoorbeeld mogelijk om een image file die aan de blob storage wordt toegevoegd te behandelen en bijvoorbeeld een watermerk toe te voegen door het uitvoeren van de Function. Naast de set van trigger en connectoren bestaan er in de grafische interface ook templates waarmee je de Function ontwikkeling kunt kickstarten. Zo kun je snel een Function maken die een Azure Queue uitleest bijvoorbeeld.
Zoals gezegd is er een web-interface voor het creëren van Azure Functions, of eigenlijk meerdere. Via de nieuwe Azure portal en een specifieke portal voor Azure Functions, maar ook via Visual Studio Online ‘Monaco’. In de laatst genoemde web interface is er ook al Intelli-sense voorhanden wat het ontwikkelen flink vergemakkelijkt. Natuurlijk is ontwikkeling in Visual Studio ook mogelijk, al zijn de gebruikelijke set aan tools daarin nog niet  voorhanden op dit moment mbt Azure Functions. Azure Functions ondersteunt ook Continuous integration (CI) vanuit Git of Visual Studio Online zodat deployments professioneel kunnen worden opgepakt. Wanneer CI wordt ingeschakeld is editing in de Web interface niet meer mogelijk zodat de developer altijd weet welke code er daadwerkelijk op de (productie) omgeving gedraaid wordt.
Zoals veel ontwikkelingen binnen Microsoft de laatste jaren is de SDK volledig open source. Hiernaast is de runtime portable zodat deze ook binnen andere Cloud providers of zelfs on premises jouw Azure Functions kan draaien. Door deze twee eigenschappen van Azure Functions betekent dit dat een bedrijf niet opgesloten wordt in het Azure ecosysteem van Microsoft en dat de buy-in klein is. Een bedrijf kan altijd beslissen de Azure Functions op een andere plek onder te gaan brengen.
Een andere belangrijke nieuwe ontwikkeling die Azure Functions met zich mee heeft gebracht is het dynamic hosting plan voor App services. Dit houdt in dat de Azure Function infrastructuur daadwerkelijk volledig uit wordt gezet wanneer hij niet wordt aangeroepen, en dan zijn er dus totaal geen kosten. Er wordt aangegeven dat het ‘cold start’ probleem wat dit met zich meebrengt van kleine omvang is, binnen één seconde zou het eerste request bij een Azure Function binnen moeten komen. Na ongeveer 5 minuten idle-time wordt een Azure Function uitgeschakeld. Microsoft geeft aan dat de maximale loop tijd van een Azure Function geen harde limiet zal krijgen, er zullen alleen mechanismen in werking komen om de Function te stoppen wanneer het erop lijkt dat de Function (bijvoorbeeld) in een oneindige lus is gekomen. De Azure Functions kunnen ook op de ‘classic’ hosting plans van App Services gedraaid worden. In ieder geval profiteren de Azure Functions altijd mee van de mogelijkheden van App Services zoals de mogelijkheden om makkelijk authenticatie op basis van bijv. Azure AD in te bouwen.
Azure Functions zal een groot aantal van de gangbare programmeertalen ondersteunen is de planning. Dit zullen zijn: Node.JS, C#, F#, PHP, Python, Java. Hiernaast zullen Bash, Batch en executables ondersteund gaan worden.

Toepassingen

Azure Functions kunnen binnen een meer omvangrijke architectuur als micro services gebruikt worden. Wanneer er een klein losstaand stukje code is dat niet past in een grotere Web API of website dan kan dat als Azure Function zijn plek krijgen. Om bepaalde klein-schalig integraties tussen SaaS services op te zetten kan een Azure Function ook zeer nuttig zijn. Het kan ook een custom onderdeel worden van een Logic App, waarmee een werkproces kan worden ingericht. Het is daarnaast een laagdrempelige manier om een executable in de cloud te gaan draaien, waar WebJobs ook al geschikit voor waren.
Ook Office365 integratie is een mogelijkheid, de Azure Function kan inhaken op een gebeurtenis in Office365 of kan operaties aan de hand van een schema uitvoeren op Office365.

Discussie


Azure Functions lijkt een zeer nuttige toevoeging aan de Azure stack. Vooral in combinatie met Logic Apps kan het een laag drempelige manier worden om processen te automatiseren in de cloud. De vraag kan echter gesteld worden hoe de (vele) Functions die gaan ontstaan beheersbaar blijven binnen een applicatie landschap. Voor alles behalve triviale gevallen zal er goed nagedacht moeten worden over de architectuur en of een Azure Function een toekomst vaste oplossing is voor een (sub)probleem. Met Azure Functions heeft Azure er weer een krachtig platform bij en gaat het de competitie met Amazon Web Services heads-on aan.

No comments:

Post a Comment