Cursus
Azure Functions maakt deel uit van Microsofts serverless compute-service. Het laat je eenvoudig kleine stukjes code draaien als reactie op events, zonder dat je zelf de servers hoeft te beheren.
Zo kan een functie draaien wanneer er een HTTP-verzoek binnenkomt, wanneer een bestand wordt geüpload naar storage, of zelfs wanneer een geplande tijd is bereikt.
“Serverless” betekent niet per se dat er geen servers zijn. Het betekent dat Azure de infrastructuur voor je beheert. Azure regelt de provisioning, schaalvergroting en het onderhoud achter de schermen.
In deze gids behandel ik de bouwstenen: de triggers, bindings, hostingopties en een hands-on voorbeeld om je op weg te helpen.
Wat zijn Azure Functions?
Een Azure Function is simpelweg een klein stukje code dat draait wanneer het wordt getriggerd door een event dat je kiest. Jij schrijft de logica, en Azure regelt de rest voor je.
Drie ideeën definiëren dit model.
- Event-driven uitvoering laat de code alleen draaien wanneer er iets gebeurt, niet de hele tijd.
- Automatisch schalen laat Azure rekenkracht toevoegen of verwijderen op basis van de vraag.
- Verbruiksgebaseerde prijsstelling laat je, in sommige hostingplannen, alleen betalen voor de tijd dat je code daadwerkelijk draait.
Idealiter doet één functie één taak, zoals een afbeelding resizen of een bericht verwerken. Een Function App is de container die één of meer functies bevat. Deze beheert gedeelde instellingen, zoals configuratie en deployment, voor alle functies die erin zitten.
Hoe Azure Functions werkt
De lifecycle van een functie volgt grofweg het volgende eenvoudige patroon:
- Er gebeurt een event, zoals een bestandsupload of een HTTP-call.
- Een trigger detecteert het event en start de functie direct.
- De functie voert zijn code uit.
- De bindings koppelen de functie aan andere services die de benodigde input lezen of output versturen.
- Azure beheert de rekenresources achter dit proces, uiteraard op basis van je gekozen hostingplan.
Deze flow is grotendeels hetzelfde, ongeacht taal of hostingoptie. Alleen de trigger, de code en de bindings verschillen.
Azure Functions-triggers
Elke functie heeft precies één trigger. De trigger bepaalt hoe de functie precies start. Dit zijn de meest voorkomende typen die je moet kennen:
- HTTP-trigger: Voert een functie uit wanneer deze een HTTP-verzoek ontvangt. Veelgebruikt voor het bouwen van API’s.
- Timer-trigger: Voert een functie uit volgens een schema, bijvoorbeeld elk uur of eenmaal per dag.
- Blob Storage-trigger: Voert een functie uit wanneer een bestand wordt toegevoegd of gewijzigd in Azure Blob Storage.
- Queue-trigger: Voert een functie uit wanneer er een nieuw bericht in een queue binnenkomt.
- Event Hub-trigger: Voert een functie uit als reactie op een stroom aan events. Erg nuttig voor grote hoeveelheden data.
- Cosmos DB-trigger: Voert een functie uit wanneer documenten worden gemaakt of bijgewerkt in een Cosmos DB-container, gebruikmakend van de Change Feed.
- Service Bus-trigger: Voert een functie uit als reactie op berichten van een Azure Service Bus-queue of -topic, vaak gebruikt voor enterprise messaging en het ontkoppelen van systemen.
- Durable Functions: Een uitbreiding op Azure Functions waarmee je stateful functies kunt schrijven in een serverless omgeving om complexe workflows met meerdere stappen te orkestreren.
Azure Functions-bindings
Triggers en bindings worden vaak verward, maar hoewel ze op elkaar lijken, doen ze totaal verschillende dingen. Een trigger start een functie, maar een binding koppelt de functie aan data door die te lezen of te versturen.
Inputbindings
Hier geef je je functie data zonder eigen integratiecode te schrijven. Zo kan een functie automatisch een record uit een database lezen, simpelweg door de binding te declareren.
Outputbindings
Hiermee stuur je het resultaat van je functie ergens anders heen. Je kunt bijvoorbeeld outputbindings gebruiken om een verwerkt bericht naar een queue te schrijven.
Hier is een voorbeeld ter verduidelijking: Een Blob Storage-trigger start een functie wanneer een afbeelding wordt geüpload. Een outputbinding slaat vervolgens de geresize-de afbeelding op in een andere storagecontainer. De bindings regelen de storage-verbindingen, en er is geen handmatige storage client-code nodig.
Je eerste Azure Function maken
Hier is een eenvoudig voorbeeld van een zeer simpele HTTP-getriggerde functie die een begroeting teruggeeft. De flow is als volgt:
- Maak een Function App. Dit is de container voor je functie in Azure.
- Kies een runtime en selecteer de taal waarin je wilt coderen.
- Voeg een nieuwe functie toe binnen je Function App.
- Selecteer de HTTP-trigger zodat de functie op webverzoeken reageert.
- Voeg eenvoudige functionaliteit toe, zoals een naam uit het verzoek lezen en “Hallo, [naam]” retourneren.
- Draai en test de functie met de ingebouwde testtools of stuur simpelweg een verzoek vanuit je browser.
- Deployment naar Azure zodat deze live en bereikbaar is.
Ik heb dit voorbeeld bewust klein gehouden om je het patroon te laten zien en je creativiteit de rest te laten doen.
Talen die Azure Functions ondersteunt
Azure Functions ondersteunt veel talen, zoals:
- C#
- JavaScript/TypeScript
- Python
- Java
- PowerShell
Ondersteuning en ontwikkelmodellen kunnen verschillen per taal en versie. Daarom raad ik aan om de actuele Azure-documentatie te checken voordat je een nieuw project start, omdat deze details vaak wijzigen.
Hostingopties voor Azure Functions
Niet elke Azure Function draait op dezelfde manier. Azure biedt verschillende hostingplannen, elk met andere afwegingen. De juiste keuze hangt af van jouw situatie. De belangrijkste afwegingen zijn:
- Schalen: Sommige plannen schalen automatisch en direct, terwijl andere meer handmatige controle vergen.
- Opstartgedrag: Sommige plannen houden functies “warm”. Dit betekent simpelweg dat ze meteen klaar zijn om te draaien, terwijl andere functies on demand starten.
- Netwerken: Sommige plannen ondersteunen geavanceerde netwerkfuncties zoals verbinding met een privé virtueel netwerk, terwijl andere dat niet doen.
- Kosten: Prijsmodellen verschillen sterk, van betalen per uitvoering tot vaste maandelijkse kosten.
Schalen en cold starts in Azure Functions
Twee extra concepten worden belangrijk zodra je functie in productie draait. Dit zijn:
Automatisch schalen
Hierbij houdt Azure de load op je functie in de gaten. Als de vraag toeneemt, voegt het meer compute-instances toe, en als de vraag daalt, verwijdert het ze. Je hoeft dit niet handmatig te beheren.
Cold starts
Als een functie onlangs niet heeft gedraaid, kan het even duren om op te starten voordat een nieuw verzoek wordt verwerkt. Deze vertraging heet een cold start. Sommige hostingplannen verminderen of voorkomen dit door de instance warm te houden, zoals genoemd.
Veelvoorkomende use-cases voor Azure Functions
Het event-driven model past bij veel alledaagse problemen waar je tegenaan kunt lopen. Met name:
API’s en webhooks
Hiervoor verwerk je inkomende HTTP-verzoeken zonder 24/7 een volledige webserver te hoeven draaien.
Bestands- en beeldverwerking
Hiermee trigger je een functie zodra er een bestand in storage komt, om het vervolgens te resizen, converteren of gewoon te scannen.
Geplande jobs
Handig om cleanup-taken, rapportages of herinneringen op een timer te draaien zonder een dedicated always-on server.
Dataverwerking-pijplijnen
Hiermee verwerk je berichten of events zodra ze binnenkomen, stap voor stap.
IoT en eventverwerking
Dit helpt grote hoeveelheden sensor- of apparaatdata te verwerken terwijl die binnenstromen.
Achtergrondtaken
Dit besteedt traag of incidenteel werk uit, zoals e-mails versturen, zodat je hoofdapplicatie niet blokkeert.
Monitoren en troubleshooten van Azure Functions
Zodra een functie live is, heb je zicht nodig op de prestaties.
Je kunt bijvoorbeeld de logs bekijken die opslaan wat er tijdens elke run is gebeurd, wat erg handig is voor debuggen. Je kunt ook Application Insights in Azure-tools raadplegen, dat prestaties, verzoeken en fouten centraal bijhoudt.
Je moet ook de invocation-fouten volgen zodat je weet wanneer en waarom een functie niet is voltooid. Prestatiemonitoring helpt je trage functies te signaleren voordat ze een probleem worden, en natuurlijk kan retry-gedrag worden geconfigureerd zodat mislukte uitvoeringen automatisch opnieuw worden geprobeerd.
Conclusie
Azure Functions biedt een manier om code uit te voeren als reactie op events, zonder dat je de onderliggende servers hoeft te beheren. De triggers bepalen wanneer een functie start. De bindings maken het daarentegen makkelijk om die functie zonder extra integratiecode aan andere services te koppelen.
Als je van een eenvoudige testfunctie naar iets in productie gaat, worden de hosting- en schaalkeuzes veel belangrijker. Het juiste plan beïnvloedt niet alleen de kosten, maar ook snelheid en betrouwbaarheid.
Ik werk aan versnelde AI-systemen die edge-intelligentie mogelijk maken met gefedereerde ML-pijplijnen op gedecentraliseerde data en gedistribueerde workloads. Mijn werk richt zich op Large Models, spraakverwerking, computervisie, reinforcement learning en geavanceerde ML-topologieën.
FAQs
Wat zijn Azure Functions?
Een serverless service die kleine stukjes code draait als reactie op events, zonder dat jij servers hoeft te beheren.
Wat triggert een Azure Function?
Events zoals HTTP-verzoeken, timers, bestandsuploads of queue-berichten.
Wat is het verschil tussen een trigger en een binding?
Een trigger start de functie. Een binding koppelt deze aan andere services voor input of output.
Wat is een cold start?
Een korte vertraging wanneer een functie opstart na een periode van inactiviteit.
Welke talen ondersteunt Azure Functions?
C#, JavaScript/TypeScript, Python, Java en PowerShell.

