Actualiteit

Datacleaning met AWS Stepfunctions & AWS Lambda

Het verwerken van ruwe data naar een bruikbare asset, kan een complexe operatie zijn. De manier waarop data gevalideerd en geschoond moet worden, is bovendien sterk afhankelijk van veranderlijke business requirements. Het is daarom ontzettend belangrijk dat dit proces transparant en modificieerbaar wordt opgezet.

Bij het opzetten van dit proces kunnen AWS Stepfunctions en AWS Lambda een prima uitkomst bieden. Door gebruik te maken van de natuurlijke samenwerking tussen deze twee services, is het mogelijk om een transparante en onderhoudbare workflow inrichten. Deze workflow is bovendien ook nog eens serverless.

Datacleaning_qquest_aws_stepfunctions_aws_lambda

In dit artikel worden de twee services geintroduceerd vanuit een data proccessing perspectief. Daarnaast worden praktische tips en tricks voor beide services toegelicht.

AWS Stepfunctions

Met AWS Stepfunctions is het mogelijk om verschillende AWS-resources aan elkaar knopen als stappen in een workflow. Hier kun je gebruik maken van if / else logica en iteratie om je business logic te implementeren. Daarnaast kun je gebruik maken van automatic retries en on fail policies om te komen tot een robuuste oplossing zonder verassingen.

Ook maakt AWS stepfunctions het delen van data tussen resources eenvoudig door standaard een JSON (data) object door te geven tussen de stappen. Dit object kan bij aanroep van de stepfunction geinitialiseerd worden met externe data en kan vervolgens naar wens gemuteerd worden in de individuele stappen. Hierdoor kun je input data stapsgewijs verrijken tot je het gewenste resultaat hebt bereikt aan het eind van de workflow.

AWS Stepfunctions biedt verder uitstekende inzichtelijkheid via de automatisch gegenereerde visuele weergave van de workflow.

aws-stepfunctions

Zo is niet alleen de business logic helder weergegeven, maar kun je ook problemen in de uitvoering goed traceren.

Het geheel is bovendien serverless. Dit betekent dat de stepfunction niet meer is dan een definitie, welke bij aanroep andere resources de juiste triggers geeft om hun taken uit te voeren. Je betaalt uiteindelijk alleen bij het daadwerkelijke uitvoeren van de stepfunction, en dus niet voor het bestaan van de definitie.

Stepfunctions tips:

  • Hoewel je eenvoudig data kunt delen tussen stappen, is deze mechaniek niet gebouwd om te werken met hele grote dataobjecten. Mocht je daar wel noodzaak toe hebben, dan kun je beter werken met een een s3 bucket (dé AWS file storage service) waarin je deze grote objecten wegschrijft/uitleest.
  • Je kunt vele resources aan je stepfunction koppelen zoals AWS Lamda, AWS Fargate, AWS Glue, maar ook: stepfunctions! Gebruik dit om je workflows overzichtelijk en onderhoudbaar te houden naarmate de complexiteit toeneemt.
  • Er zijn verschillende manieren om je stepfunction te triggeren: handmatig, via de AWS API of via een cloudwatch event rule! Hierbij kun je gebruik maken van logging, maar bijvoorbeeld ook een simpele cronjob (i.e. trigger op basis van tijdstip).

AWS Lambda

AWS Lambda is een service waar je serverless functies kunt definiëren. Deze functies staan klaar om aangeroepen te worden, zonder dat je je zorgen hoeft te maken over (of hoeft te betalen voor) een server. Je betaalt alleen voor de daadwerkelijk gebruikte resources, per 0.1 seconde.

AWS Lambda

Lamdas zijn dus eigenlijk niets meer dan een functie, welke een input en een output kan hebben. AWS Lambda ondersteunt een brede selectie aan talen: Javascript, Java, Python, C#, Powershell en Ruby. In de keuze voor welke taal je de oplossing wilt schrijven, wordt je dus niet snel gelimiteerd door AWS Lamda.

Als je complexe oplossingen wilt schrijven in Lamdas -zonder belangrijke programmeer principes zoals singular responsibility te schenden-, dan kom je er al snel op uit dat je logica moet splitsen over verschillende lambda functies. Gelukkig heb je met AWS stepfunctions het perfecte framework om de verschillende functies logisch aan elkaar te klikken.

Amazon is vrij ruimhartig met de resource limieten voor AWS Lambdas. Zo kan de Lambda maximaal 15minuten uitgevoerd worden, met maximaal 4GB RAM, een codebase van 250MB en heeft het 500MB aan tijdelijk geheugen. In principe, als je daar niet genoeg aan hebt: overweeg dan een andere resource (bijvoorbeeld AWS Fargate).

Lambda tips:

  • Python is een echte aanrader als je hoofdzakelijk met data validatie / mutatie / verrijking te maken hebt. Python heeft namelijk het voordeel van een uitstekende dataminded community (en dus libraries), handige data operations zoals slicing en is een erg leesbare taal.
  • Houd je aan basic programmeer principes en geef je Lambda functie daadwerkelijk één functie. Dat wil zeggen, geef de Lamda niet te veel verschillende dingen te doen. Dit zorgt ervoor dat je code overzichtelijk en onderhoudbaar blijft. Je kunt verschillende Lamdas later in een stepfunction aan elkaar knopen.
  • Het kan voorkomen dat je voor je Lamda functie grote libraries nodig hebt. Deze tellen ook mee voor je codebase en kunnen samen al snel uitkomen boven de 250MB. Mocht je hier tegenaan lopen, dan kan het een oplossing zijn om je de libraries ingepakt te laten en uit te pakken tijdens de run. De libraries komen dan in de temp directory te staan, welke tot 500MB ruimte heeft. Dit kan een goede oplossing zijn wanneer je de extra handeling van het uitpakken van je gezipte libraries kunt accepteren in de Lambda, en zolang je met je deze oplossing beneden de 250MB codebase blijft.
  • Nog een oplossing zou zijn om je libraries in een S3 bucket te zetten en deze tijdens de run in te laden. Echter, op dit punt moet je je wellicht afvragen of je misschien niet beter een andere service kunt gebruiken dan AWS Lambda. Immers, in het ontzettend rijke service landschap van AWS is de noodzaak voor complexe workarounds vaak geen echte noodzaak en eerder een teken van suboptimaal design.

Conclusie

AWS Stepfunctions in samenspel met AWS Lambda kan een uitstekend framework voor dataprocessing bieden. Dit framework heeft sterke oplossingen voor transparantie, top level business logic, code ondersteuning en resource management. De geschiktheid zal echter per use case verschillen, dus het is belangrijk om ook de limieten van de besproken services in acht te nemen. We leven immers in tijden van overvloed aan prachtige oplossingen, waarvan AWS Lambda en AWS Stepfunctions er slechts twee zijn.

Geschreven door:
Victor Baker
Developer bij Qquest

Meer weten over Data & Analytics?

Lees alles over waar wij goed in zijn met Data & Analytics.

Lees meer

Meer weten over Data & Analytics?

Lees alles over waar wij goed in zijn met Data & Analytics.

Lees meer

Relevante ontwikkelingen