De voordelen van het gebruik van
Azure Functions

De voordelen van het gebruik van Azure Functions in je applicaties zijn talrijk. Het is serverless, helpt je de ontwikkeling te vereenvoudigen en integreert zelfs naadloos met andere Azure-services om je leven als ontwikkelaar veel eenvoudiger te maken.

Digital marketing
14 oktober 2020
Martijn van der Put

Je eigen Azure Functions maken

Om je geheugen op te frissen: een van de praktische voorbeelden die we in onze vorige post hebben besproken, ging over een applicatie waarin gebruikers hun cijferlijst in ZIP-formaat moeten uploaden. Om de authenticiteit van die cijferlijsten te valideren, moesten de bestanden worden uitgepakt en sequentieel worden verwerkt. Om dit te bereiken, gaan we een Azure Function maken die wordt geactiveerd zodra de gecomprimeerde bestanden in blobopslag zijn geüpload. Deze functie zal de bestanden vervolgens uitpakken en de uitgepakte bestanden naar een andere blobopslag verplaatsen, zodat de applicatie ze kan ophalen.

Voorwaarden

Dat Microsoft Visual Studio met de benodigde plugins voor Azure geïnstalleerd. 

Stappen

  • Stap 1: Kies de ‘Azure Function’ template als projecttemplate bij het aanmaken van een nieuw project in je Microsoft Visual Studio.


  • Stap 2: Geef een geldige naam op voor de Azure Function. In dit geval hebben we de functie de naam PracticeFunctionApp gegeven. 


  • Stap 3: Kies het type trigger (in ons geval een Blob-trigger) waarmee de Azure Function kan worden geactiveerd. 


  • Stap 4: Zodra dit is aangemaakt, bekijk de Solution Explorer die er als volgt uitziet.


  • Stap 5: Open het bestand Function1.cs, waarin een methode genaamd ‘Run’ al is gedefinieerd. Deze methode haalt het blobbestand en de naam ervan op via de trigger.



  • Stap 6: Werk de Run-methode bij zodat deze de vereiste functionaliteit uitvoert (lees het gecomprimeerde bestand dat wordt geactiveerd en pak het uit. Plaats vervolgens de uitgepakte bestanden in een andere blobopslag). 

    De onderstaande code logt de bestandsnaam zodra de functie wordt geactiveerd. Vervolgens valideert het of de bestandsextensie ‘zip’ is (zorgt ervoor dat de invoer wordt gevalideerd). Het gebruikt de ingebouwde klasse ZipArchive om de bestanden uit te pakken. Na het uitpakken van het bestand, maakt het verbinding met de bestemmingscontainer en uploadt het de individuele bestanden.

Reference code

Best practices voor Azure Functions

Nu je hebt gezien hoe je Azure Functions implementeert, laten we enkele best practices bespreken die je kunt volgen bij het ontwerpen en creëren van Azure Functions.

Kortlopende functies

Maak functies die kort lopen en ontwerp ze om lichte bewerkingen uit te voeren. Dit voorkomt onverwachte timeout-excepties en onafgemaakte operaties.

Een kenmerk van kortlopende functies is de afwezigheid van grote afhankelijkheden. Maak een reeks functies, elk met kleine stukjes code en unieke operaties, wat leidt tot snellere uitvoeringstijd. Dit bevordert ook herbruikbaarheid.

Gebruik een medium om informatie door te geven

De reeks functies die je maakt, moet niet direct met elkaar communiceren, maar via opslagqueues.

Opslagqueues kunnen dienen als medium tussen de functies. Hierbij wordt de output van de ene functie in de opslagqueue geplaatst, wat vervolgens de input wordt voor een andere functie. Op dezelfde manier kan Service Bus ook worden gebruikt als medium.

Validateer invoer

Omdat functies op verschillende manieren kunnen worden geactiveerd (Cloud-opslag (Blob), NoSQL-database (CosmosDB), Event Hubs, Queue, HTTP, enz.), is er altijd een mogelijkheid dat er ongeldige invoer wordt doorgegeven en de code wordt misbruikt. Het is dus altijd verstandig om de invoer die aan de functie wordt doorgegeven te valideren. 

Het vermogen om identieke invoer te verwerken

Aangezien functies event-gedreven zijn, bestaat de mogelijkheid dat een event meerdere keren wordt geactiveerd door omgevings- of menselijke fouten. Zorg er dus voor dat de functie zo is ontworpen dat het de functionaliteit van de operatie valideert voordat het begint met uitvoeren.

Bijvoorbeeld, stel je een functie voor die is geschreven om een bepaalde invoer uit de database te verwijderen. Door systeemproblemen kan deze functie meerdere keren worden geactiveerd, wat een ramp kan veroorzaken. Om dit te voorkomen, zorg ervoor dat de functie hiermee om kan gaan.

Maak functies stateless

Stateless applicaties slaan doorgaans geen informatie op die in één sessie is gegenereerd en dragen deze niet over naar de volgende sessie voor verwerking. Functies moeten stateless worden ontworpen zodat ze dezelfde invoer op dezelfde manier kunnen verwerken, ongeacht het aantal keren.

Als er een afhankelijkheid is om de status te behouden, kan de informatie worden opgeslagen en opgehaald uit een SQL-database of bestandsopslag.

Beveilig de geheimen die in de functie worden gebruikt



In sommige gevallen moet je verbinding maken met databases, API's of andere systemen om gevoelige configuratie-informatie vanuit de functies te beheren.

Het direct opslaan van dergelijke geheimen in het configuratiebestand kan erg gevaarlijk zijn, omdat de kans groot is dat deze informatie in verkeerde handen valt, vooral omdat het wordt opgeslagen in de coderepositories. In dergelijke scenario's kan Azure Key Vault worden gebruikt om de geheimen op te slaan.

Bouw asynchrone code

Asynchroon programmeren wordt altijd aanbevolen, vooral wanneer blokkerende invoer- en uitvoerbewerkingen zijn betrokken.

Stel bijvoorbeeld dat er een API-aanroep in de functie zit, die een paar seconden zou blokkeren tijdens het uitvoeren van de functie en ons zou verhinderen de code verder uit te voeren. In dergelijke gevallen is asynchroon programmeren nuttig, omdat het ons in staat stelt verder te gaan terwijl de API-aanroep wordt gedaan en het antwoord wordt verkregen.

Gebruik aparte function apps voor verschillende regio's

Functies die zijn gedeployed onder dezelfde function app delen dezelfde resources (bijvoorbeeld geheugen). Vermijd daarom het creëren van functies voor verschillende regio's (zoals ontwikkeling, testen en productie) onder dezelfde function app. 


Evenzo zijn functie-apps gekoppeld aan opslagaccounts. Om de prestaties van de functies te verbeteren, is het raadzaam om voor elke functie-app een apart opslagaccount te hebben.

Wijs alleen noodzakelijke rechten toe

Functie-apps moeten alleen over de essentiële rechten beschikken die nodig zijn voor de succesvolle uitvoering van hun taak. Functies met privileges om toegang te krijgen tot niet-essentiële functies kunnen leiden tot beveiligingsrampen in de cloud van de organisatie.

Om dergelijke incidenten te voorkomen, kan Azure Role-Based Access Control worden gebruikt om essentiële rechten toe te wijzen.

Registreer de activiteiten

Schrijf de functiecode zodanig dat belangrijke operaties en foutgebeurtenissen worden gelogd, zodat dit van pas komt wanneer de gewenste resultaten niet worden behaald na de uitvoering van de functie. Het inschakelen van 'Application Insights' voor Azure Functions zal helpen bij het vastleggen van de logs.

Gebruik beveiligingsfuncties

Het implementeren van Azure Functions met een opslagaccount in een openbare cloud stelt de eindpunten van Azure Functions bloot aan het internet. Als de eindpunten niet goed zijn geauthenticeerd, ontstaat het risico dat iedereen de functies kan gebruiken of misbruiken. Daarom is het noodzakelijk om authenticatie- en autorisatiefuncties te implementeren in Azure Functions door OAuth2 of beveiligingstokens toe te passen.


Conclusie

In deze post hebben we gezien hoe je je eigen Azure Functions kunt implementeren en ook enkele best practices kunt volgen bij het beheer ervan. Onthoud altijd dat hoewel Azure Functions serverless zijn, er gebieden zijn waar we voorzichtig moeten zijn bij de implementatie ervan.

Wil je meer informatie? Vul dan onderstaand formulier in!

Cookies
Deze site gebruikt geanonimiseerde cookies. Klik op "Akkoord" als je akkoord gaat met het gebruik van cookies, of klik op "Aanpassen" om je voorkeuren te bepalen.
Deze site gebruikt geanonimiseerde cookies.
Akkoord Aanpassen Weigeren