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