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.