Microsoft AZ-204: Azure Functions en Serverless Computing — Studiegids
Onderdeel van de Microsoft Azure Developer Associate AZ-204 — Studiegids. Oefen met geverifieerde antwoorden in het Microsoft-examencentrum, of doe getimede oefentests op ExamRoll.io.
Overzicht
Azure Functions is een serverless compute-service die is geoptimaliseerd voor event-driven en kortstondige workloads. Het abstraheert de infrastructuur, zodat u zich kunt concentreren op code die reageert op gebeurtenissen van HTTP-eindpunten, wachtrijen, blobs, data change feeds en streamingdiensten. U selecteert een hosting plan dat het schaalgedrag, de prijsstelling en het cold-start-gedrag bepaalt; u koppelt uw code aan triggers en databronnen met declaratieve bindingen; en u kunt optioneel langdurige, betrouwbare workflows samenstellen met Durable Functions. Robuuste configuratie, herhaalbare implementatie en diepgaande observeerbaarheid met Application Insights completeren het platform voor systemen van productiekwaliteit.
Hosting Plans, Schalen en Cold Starts
De keuze van een hosting plan bepaalt de uitvoeringskenmerken en de kosten.
Consumption plan:
- Schaal en prijsstelling: Betaal per uitvoering en resourceverbruik. Het platform schaalt automatisch uit op basis van events. Het aantal instances schaalt naar nul wanneer er geen activiteit is.
- Uitvoeringslimieten: De time-out van een functie is configureerbaar tot 10 minuten voor niet-HTTP-functies; HTTP-functies hebben in de praktijk kortere time-outs vanwege de connectiviteit van de client.
- Cold start: Cold starts treden op na perioden van inactiviteit of bij het uitschalen wanneer nieuwe instances worden geïnitialiseerd. De opstarttijd is afhankelijk van de taal, de afhankelijkheden en de grootte van de app.
- Netwerk/features: Ondersteunt standaard openbare netwerken. Beperkte set features in vergelijking met Premium (bijvoorbeeld geen VNET-integratie). Deployment slots zijn niet beschikbaar.
Premium plan:
- Schaal en prijsstelling: Schaalt op basis van events, maar behoudt ‘voorverwarmde’ (pre-warmed) instances om cold starts te elimineren. De facturering is gebaseerd op core-seconden en het geheugen dat is toegewezen aan actieve en voorverwarmde instances.
- Uitvoeringslimieten: Vrijwel onbeperkte uitvoeringsduur (afhankelijk van de beperkingen van de HTTP-client). Aanbevolen voor latency-gevoelige of zwaardere workloads.
- Cold start-mitigatie: Voorverwarmde instances houden de runtime ‘warm’. U bepaalt het aantal voorverwarmde instances per plan, wat zorgt voor voorspelbare latency tijdens piekbelasting.
- Netwerk/features: VNET-integratie, private endpoints, grotere instance-groottes en deployment slots worden ondersteund.
Dedicated (App Service) plan:
- Schaal en prijsstelling: Draait op geprovisioneerde App Service-instances met handmatige of autoscale-regels. U betaalt voor het onderliggende App Service plan, ongeacht het gebruik.
- Uitvoeringslimieten: Geen door het platform opgelegde time-out voor achtergrondverwerking. Ideaal als u al reserve App Service-capaciteit heeft of consistente prestaties nodig heeft.
- Cold start-mitigatie: Schakel Always On in om de app geladen te houden. Geen schaling naar nul; instances blijven warm.
Kies het Consumption plan voor kostengeoptimaliseerde, sporadische workloads, het Premium plan voor lage latency en VNET-vereisten, en het Dedicated plan bij consolidatie met bestaande App Service-capaciteit of wanneer volledige controle vereist is. Voor ultralage latency vermindert het Premium plan met voorverwarmde instances of het Dedicated plan met Always On het aantal cold starts. Minimaliseer de impact van een cold start verder door afhankelijkheden te verminderen, run-from-package te gebruiken en clients ’lazy’ te initialiseren.
Triggers en Bindings
Functions worden geactiveerd door triggers en interageren met data via bindings. Triggers bepalen hoe en wanneer een functie wordt uitgevoerd. Bindings maken declaratief verbinding met externe services voor input/output, zonder dat er imperatieve SDK-code nodig is.
Veelvoorkomende triggers:
- HTTP-trigger: Stelt endpoints bloot voor REST-achtige API’s of webhooks. Autorisatieniveaus omvatten Anonymous, Function en Admin, afgedwongen via sleutels of platform-authenticatie. Houd rekening met idempotentie en time-outs voor langdurige taken; verplaats de verwerking naar een queue of Durable Functions indien nodig.
- Timer-trigger: Op CRON gebaseerde schema’s worden uitgevoerd op één enkele instantie per app (per timer). Gebruik NCRONTAB-expressies met tijdzoneconfiguratie. Ideaal voor onderhouds-, polling- en opruimtaken.
- Azure Storage Queue-trigger: Reageert op berichten in een queue. Ondersteunt de afhandeling van ‘poison messages’ met een -poison queue nadat een drempelwaarde voor het aantal ‘dequeues’ is bereikt. Configureer batchgrootte, ‘visibility timeout’ en concurrency via host.json.
- Azure Blob Storage-trigger: Reageert op het aanmaken/bijwerken van blobs via een combinatie van polling en Event Grid-notificaties. Gebruik padpatronen om de scope te beperken tot specifieke containers en prefixes. Begrijp ’eventual consistency’ en het ‘retry’-gedrag bij het uploaden van grote blobs.
- Azure Event Hubs-trigger: Consumeert event-streams met hoge doorvoer met behulp van checkpointing. Configureer partitie-concurrency, batchgrootte en prefetch voor een optimale doorvoer. Geschikt voor telemetrie en streamverwerking waarbij de volgorde per partitie behouden blijft.
- Azure Service Bus-trigger: Ondersteunt een queue- of topic-abonnement. Configureer maxConcurrentCalls, prefetch en auto-complete-gedrag. ‘Dead-letter queues’ vangen berichten op die het maximale aantal afleverpogingen overschrijden, voor latere inspectie.
- Azure Cosmos DB-trigger: Luistert naar de ‘change feed’ voor ‘inserts’ en ‘updates’. Schaalt mee met het aantal fysieke partities; zorg voor voldoende RU-provisioning. Gebruik een ’leases collection’ om de ‘scale-out’ over meerdere instanties te coördineren.
Bindings:
- Input-bindings: Leveren data aan de functie, bijv. blob-inhoud, een ’table entity’, Cosmos DB-documenten of metadata van een queue-bericht. In .NET definiëren attributen (bijv. [BlobInput]) of function.json de binding; in andere talen is de configuratie declaratief.
- Output-bindings: Schrijven data weg zonder SDK’s, bijv. een bericht in een queue plaatsen, een blob aanmaken, naar Event Hub/Service Bus sturen of naar Cosmos DB schrijven. Functies kunnen meerdere output-bindings hebben of één enkele output retourneren vanuit de functie-signatuur.
- Binding-expressies: Parametriseer verbindingsdetails en paden met placeholders, bijv. {queueTrigger}, {rand-guid}, en omgevingsgebaseerde ‘app settings’. Verbindingseigenschappen verwijzen naar de namen van ‘application settings’, wat rotatie en beheer van secrets mogelijk maakt. Geef de voorkeur aan op identiteit gebaseerde verbindingen met ‘managed identity’ waar dit wordt ondersteund, om te voorkomen dat secrets worden ingebed.
- Concurrency en batch: Beheer concurrency en batchgroottes in host.json per extensie (queues, serviceBus, eventHub) om de doorvoer en het geheugengebruik te optimaliseren. Valideer de afhandeling van ‘poison/dead-letter’-berichten om ervoor te zorgen dat fouten zichtbaar worden.
Ontwerp triggers en bindings met het oog op idempotentie, ‘backpressure’ en ‘failure isolation’. Voor bronnen met ‘at-least-once delivery’ (queues, Event Hubs, Service Bus), schrijf functies die idempotent en bestand zijn tegen ‘retries’.
Durable Functions: Betrouwbare Orkestratiepatronen
Durable Functions breidt Azure Functions uit met stateful, betrouwbare orkestratie voor langdurige workflows, gebruikmakend van een ‘durable task framework’.
Functietypes:
- Orchestrator-functies: Beschrijven de workflowlogica in code met behulp van deterministische constructies. Orchestrators spelen de status opnieuw af bij gebeurtenissen en moeten niet-deterministische API’s (DateTime.Now, random, netwerkoproepen) vermijden, tenzij er geschikte helpers worden gebruikt. Gebruik de ‘Durable orchestration client API’s’ om instanties te starten, te bevragen en te beheren.
- Activity-functies: Voeren afzonderlijke werkeenheden uit, zoals het aanroepen van externe API’s, het uitvoeren van CPU-intensieve operaties of IO-taken. Activiteiten zijn ‘retryable’ en onafhankelijk schaalbaar.
- Entity-functies: Bieden duurzame, adresseerbare entiteiten met een kleine, consistente staat en operaties (bijv. tellers, apparaatstatus). Entiteiten verwerken geserialiseerde operaties met ‘single-threaded’ consistentie.
Patronen:
- Function chaining: Voert activiteiten uit in een gedefinieerde volgorde (A → B → C), waarbij de resultaten worden doorgegeven aan de volgende. Handig voor pipelines met afhankelijkheden.
- Fan-out/fan-in: Start meerdere activiteiten parallel en voegt de resultaten samen. Orchestrators coördineren met semantiek die lijkt op Task.WhenAll. Gebruik dit voor de parallelle verwerking van onafhankelijke taken.
- Human interaction (externe events): Wacht op externe input (bijv. goedkeuring) met behulp van WaitForExternalEvent met time-outs en escalatie. Combineer met ‘durable timers’ om SLA’s en compensatielogica te implementeren.
- Async HTTP API’s: Start orkestraties en retourneer een 202 Accepted met status/query-URL’s. Clients pollen de status-endpoints die worden blootgesteld door de ‘Durable client binding’ voor het uiteindelijke resultaat of de status.
- Monitor: Terugkerende checkpoints die volgens een schema worden uitgevoerd, bijv. het pollen van een endpoint totdat aan een voorwaarde is voldaan, met behulp van ‘durable timers’ om te voorkomen dat rekenkracht wordt vastgehouden.
- Aggregator/Entity: Sla een kleine hoeveelheid status op naast de logica met behulp van ’entity functions’ voor fijnmazige coördinatie zonder een volledige workflow.
Durable Functions garanderen ‘at-least-once’ uitvoering van activiteiten en ’exactly-once’ voortgang van de orchestrator-status. Ze slaan de status op in storage (standaard is dit Azure Storage); zorg ervoor dat het storage-account voldoet aan de eisen voor doorvoer en betrouwbaarheid. Gebruik aangepaste ‘retry policies’ voor tijdelijke fouten en ‘raise events’ voor externe interactie. Voor zeer langdurige processen kunnen ‘durable orchestrations’ dagen tot maanden draaien dankzij de ingebouwde duurzaamheid.
Configuratie, Implementatie en Observeerbaarheid
De configuratie van een Function App is gelaagd en omgevingsbewust.
- host.json: Beheert het gedrag van de runtime en extensies. Configureer logging (sampling, logniveaus), functionTimeout, extensie-instellingen (batchgroottes, concurrency, prefetch) en de JSON-schemaversie. Bewaar host.json in versiebeheer.
- local.settings.json: Lokale ontwikkelingsinstellingen, inclusief connection strings en app-instellingen. Wordt niet geïmplementeerd in Azure. Behandel geheimen op de juiste manier; sluit ze uit van openbare repo’s en gebruik user-secrets of omgevingsinjectie voor lokale ontwikkeling.
- Application settings: Opgeslagen in de configuratie van de Function App (App Service). Kritieke instellingen zijn onder andere AzureWebJobsStorage (voor het storage-account dat wordt gebruikt door triggers, logs en checkpoints), extensie-specifieke connection strings en eventuele aangepaste configuraties. Markeer geheimen als ‘slot settings’ om te voorkomen dat ze worden meegenomen bij een swap. Gebruik Key Vault-referenties met een managed identity om te voorkomen dat geheimen in platte tekst worden opgeslagen.
Implementatieopties:
- Zip Deploy: Upload een ZIP van je gebouwde artefacten naar de app. Snel en eenvoudig voor CI/CD. Gebruik
az functionapp deployment source config-zipof dezipdeployAPI. Het schrijft bestanden naar de content-directory. - Run-From-Package: Stel
WEBSITE_RUN_FROM_PACKAGEin op een package-URL (of 1 voor de nieuwste). De runtime koppelt het pakket als alleen-lezen, wat de cold start verbetert en problemen met bestandsvergrendeling tijdens de implementatie elimineert. Sla het pakket op in Blob Storage met een SAS-URL voor reproduceerbare rollbacks. - Deployment slots: Stage- en productieslots maken zero-downtime swaps met warmup mogelijk. Slots worden ondersteund op Premium- en Dedicated-plannen. Configureer slot-specifieke instellingen (‘slot setting’-vlag) voor geheimen en endpoints om te voorkomen dat er informatie tussen omgevingen lekt. Gebruik preSwap warmup om extensies en bindings te valideren voordat het verkeer wordt verplaatst.
Monitoring met Application Insights:
- Invocation logs: Elke aanroep van een functie genereert gestructureerde telemetrie, waaronder Requests, Traces, Exceptions en Dependencies. Gebruik
ILogger(of een equivalent) voor gestructureerde logs. Operation en correlation ID’s koppelen activiteit en afhankelijkheden over services heen. - Live Metrics: Real-time weergave van doorvoer, fouten en latentie zonder sampling. Handig voor het observeren van implementaties, schaalvergroting en ‘hot paths’. Filter op functienaam om problemen te isoleren.
- Failures and reliability: Inspecteer Exceptions, mislukte Requests en dependency failures. Configureer alerts op het foutpercentage, afwijkingen in
FunctionExecutionCountof de groei van de DLQ/poison queue. Voor Storage Queue-triggers, monitor de-poisonqueue; voor Service Bus/Event Hubs, monitor de status van de dead-letter queue en checkpoints. Pas de retry-policies en backoff inhost.jsonaan om de impact van tijdelijke fouten te verminderen. - Distributed tracing: Schakel W3C tracing headers in om correlatie te propageren via HTTP en messaging. Voor Durable Functions koppelt het framework de telemetrie van orchestrations en activities, wat end-to-end diagnostiek ondersteunt. Pas de sampling aan om een balans te vinden tussen kosten en nauwkeurigheid.
Beheer functies met implementatieautomatisering (GitHub Actions/Azure Pipelines), health probes voor HTTP-endpoints en autoscale-bewuste afstemming. Houd pakketten slank, cache clients (bijv. HttpClient, Service Bus client) als statische singletons, en valideer dat de verbindingsinstellingen van bindings bij het opstarten worden opgelost om runtime-fouten te voorkomen.
Praktisch Probleemscenario
Contoso Retail lanceert een promotieservice die in real time kortingen toepast wanneer klanten artikelen aan hun winkelwagen toevoegen. De backend moet reageren op sterk wisselend verkeer met lage latentie, een externe prijs-API aanroepen en een Cosmos DB-document van de winkelwagen bijwerken. De operations-afdeling wil zero-downtime implementaties en diepgaand inzicht in storingen.
- Kies het hostingplan en structureer de app
- Gebruik een Azure Functions Premium-plan met twee pre-warmed instances en VNET-integratie. Premium elimineert cold starts voor latentiegevoelige winkelwageninteracties en beveiligt uitgaand verkeer naar de externe API via een NAT of firewall in het VNET.
- Maak één Function App met een door HTTP getriggerde functie voor het winkelwagen-endpoint en een Durable Functions-orchestrator om het ophalen van kortingen en het bijwerken van de winkelwagen te coördineren.
- Implementeer Durable orchestration voor betrouwbaarheid en parallellisme
- Orchestrator-functie: Keten stappen om de invoer te valideren, voer een ‘fan-out’ uit om parallel kortingen op te halen voor elke regel in de winkelwagen via activity-functies, en voer vervolgens een ‘fan-in’ uit om de beste prijs te aggregeren. Durable orchestration zorgt voor een deterministische control flow en veerkracht bij herstarts.
- Activity-functies: Eén activity roept de externe API aan met retry-policies; een andere werkt de winkelwagen in Cosmos DB bij via een output binding. Activities kapselen externe I/O in en kunnen onafhankelijk opnieuw worden geprobeerd zonder de logica van de orchestrator te dupliceren.
- Configureer triggers en bindings voor eenvoud
- HTTP-trigger met Function-authenticatie om ondertekende verzoeken van de web-frontend te accepteren. Geef een 202 terug met een status-URL voor langlopende winkelwagens, of een 200 voor snelle paden.
- Cosmos DB output binding op de activity om het winkelwagendocument te ‘upserten’. Binding-expressies gebruiken de
cartIduit de HTTP-payload om de juiste partitiesleutel te targeten. - Gebruik een managed identity en op identiteit gebaseerde verbindingen voor Cosmos DB en Key Vault-referenties, waardoor geheimen uit de app-instellingen worden verwijderd.
- Optimaliseer configuratie en implementatie
host.jsonsteltfunctionTimeoutin op onbeperkt (Premium) en configureert service mesh-vriendelijke HTTP-timeouts. Logniveaus zijn afgestemd op ‘Information’ voor productie en Samples zijn ingesteld op 20% om de kosten te beheersen.- Gebruik ‘run-from-package’ met pakketten die zijn opgeslagen in een geversioneerde Blob-container. Implementeer via CI met
az functionapp deploymenten swap van een staging-slot naar productie voor zero-downtime releases. Markeer connection strings en API-endpoints als ‘slot settings’ om te voorkomen dat er informatie tussen omgevingen lekt.
- Monitor en beheer
- Schakel Application Insights en Live Metrics in om de doorvoer en latentie tijdens releases te bewaken. Configureer alerts op HTTP 5xx-fouten, het foutpercentage van de afhankelijkheid naar de prijs-API, en toenames in mislukte Durable Function-orchestrations.
- Gebruik distributed tracing om het HTTP-verzoek te correleren met de Durable orchestration en activity-afhankelijkheden, wat de root-cause-analyse voor periodieke problemen met derden versnelt.
Waarom deze keuzes:
- Het Premium-plan met pre-warmed instances garandeert een consistent lage latentie en ondersteunt VNET-integratie voor veilige uitgaande communicatie.
- Durable Functions biedt betrouwbare aaneenschakeling en fan-out/fan-in met automatisch status- en retry-beheer voor externe API-aanroepen.
- Bindings verminderen boilerplate-code en dwingen een consistente, declaratieve datatoegang tot Cosmos DB af.
- Run-from-package en slots leveren herhaalbare, atomische implementaties zonder problemen met bestandsvergrendeling of downtime.
- Application Insights biedt real-time observeerbaarheid, correlatie en alarmering die aansluiten bij de operationele SLA’s.
← Azure App Service en Web Apps · Alle domeinen · Azure Storage en Blob Storage →
Oefen deze vragen → · Getimede oefening op ExamRoll.io →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
Slaag voor je examen →