Your web browser is out of date. Update your browser for more security, speed and the best experience on this site.

AWS maar dan lokaal: zo bespaar je tijd met LocalStack

Niets zo hatelijk tijdens het werken als om de haverklap niets kunnen doen omdat je technologie niet meewerkt. Toch is dat wat developers meemaken wanneer ze code deployen naar de cloud. Zeker wanneer je via trial-and-error valideert of iets werkt, dan voelen de minuten aan als verloren tijd. Arne Hendrickx toonde op Haxx Summer Edition dat het ook anders kan.

Arne, sinds 2018 als Java Developer bij Axxes aan de slag, gaf er een talk over LocalStack. Die tool kan je gerust omschrijven als een volledige AWS cloud stack die lokaal op je computer draait. Ideaal om zaken mee te testen zonder dat je ze daarvoor naar de cloud hoeft te sturen - ze is dan ook opgericht door pendelende ontwikkelaars die op de trein wilden werken zonder internet.

Deel dit artikel
Java

Bijna hetzelfde als de echte AWS


LocalStack is een open source project geschreven in Python. Ze is voorzien van een vervanger voor de meeste AWS-services, waaronder Lambda, SNS en DynamoDB. ‘Het is een single docker container met daarachter mock-implementaties van AWS-services. Localstack is enkel bedoeld voor lokaal development of voor in je CI-pipeline, niet om als echte vervanger van AWS in productie te gebruiken’, vertelde Arne.

Van de tool bestaat een gratis en een professionele versie. Voor 15 euro per maand per gebruiker krijg je extra AWS-services en features, zo is er een GUI waarmee je makkelijk kan zien wat er momenteel aan het draaien is. Toch kan je ook met de gratis versie al heel wat doen, zegt Arne.

‘Wij werken aan een monolithische applicatie die we willen verbeteren. Om piekbelasting te vermijden hebben we eerst bepaalde functionaliteiten eruit gehaald en in Lambda gestoken, maar zo zijn we tegen technische limieten gebotst. Het is niet eenvoudig om die Lambda lokaal op te starten en het hele systeem te testen. In eerste instantie bedachten we omslachtige manieren om het alsnog in de cloud te proberen testen, maar LocalStack is exact de tool die we nodig hebben, om snel wijzigingen te valideren.’

Door de services van AWS lokaal te kunnen gebruiken, hoeven Arne en zijn collega’s niet langer naar de cloud te deployen om bijvoorbeeld een integratietest uit te voeren. Zo kunnen ze veel sneller zien wat wel en niet werkt, en wordt er efficiënter gewerkt.

Localstack docker comose as image

LocalStack in de praktijk

Tot zover de theorie, maar hoe werkt het in de praktijk? Er zijn vier manieren om LocalStack te gebruiken, maar de ene is al wat handiger dan de ander. ‘Je zou bijvoorbeeld hun eigen CLI tool kunnen gebruiken. Dan spint LocalStack in de achtergrond een Docker container op, maar dat heeft niet echt een meerwaarde. Een tweede manier is om zelf het Docker run commando uit te voeren, met ‘localstack’ als image naam. Nog beter is om het Docker compose-bestand in je repository te steken. Zo vinden alle teamgenoten het bestand terug in Git. Dit is hoe wij LocalStack gebruiken. Tot slot kan je ook met een helm chart een local stack in een Kubernetes cluster draaien.’

Wanneer je voor de derde optie kiest, ziet het Docker compose-bestand er als volgt uit. Je geeft je container een naam, bij je image verwijs je naar LocalStack. Bij de network mode vermeld je bridge, bij de ports plaats je de respectievelijke poorten. Vervolgens kan je ervoor kiezen om zelf een aantal nodige services op te lijsten en te configureren. In het voorbeeld van Arne staat de Lambda Executor bijvoorbeeld op ‘Local’, wat betekent dat de tool de Lambda’s in dezelfde container zal opspinnen. Een andere optie is extra containers opspinnen voor elke Lambda. Alle verschillende opties zijn te vinden in de documentatie van LocalStack. Tot slot vermeld je ook waar de data weggeschreven moet worden en waar de broncode staat.

Eenmaal dit geregeld is, draait LocalStack in een Docker-container en is het kwestie van daarmee te connecteren zodat je je infrastructuur kan opzetten. Dat kan via verschillende tools, waaronder Terraform, AWS CLI of Cloudformation.

De gebruikelijke tools zijn gemaakt om met de echte AWS te “praten”, je zal als ontwikkelaar dan ook een manier moeten vinden om die te wijzen naar je localhost. Voor de AWS CLI doe je dat bijvoorbeeld door een extra parameter aws-endpoint-url mee te geven met je commando.

Als de infrastructuur is opgezet, kan je met je code aan de slag. De bovenste code snippet is geschreven in Java en dient om er een SNS Client mee aan te maken. Hierin verwijs je in de EndpointConfiguration naar localhost in plaats van naar de echte AWS. In de tweede code snippet wordt op dezelfde manier een DynamoDB Client aangemaakt, maar dan in Python.

Visual Insights v4 01

Tijdens zijn presentatie demonstreerde Arne hoe hij met LocalStack een eenvoudige flight tracker van een vliegtuig kon maken. De basis daarvoor is een DynamoDB met alle locatie events van het vliegtuig. Daar hangen twee AWS Lambda’s aan: een eerste om locaties te maken en een tweede om de laatste locatie op te halen. Daarvoor staat een API Gateway die te bereiken is via een POST om een event aan te maken en een GET om het laatste event te zoeken. Voor die laatste is een eenvoudige frontend voorzien, de data over het fictieve vliegtuig wordt ingevoerd via Postman, een tool om API calls mee uit te voeren.

Via deze flow krijgt je vliegtuig in DynamoDB een ID en zie je per timestamp de bijbehorende geo coördinaat van de locatie waar het vliegtuig op dat moment vloog. Wil je de API Gateway van LocalStack testen, dan verandert er weinig. Het enige verschil met de echte AWS is dat je _user_request_ in je url moet meegeven. Benieuwd naar de code van de demonstratie? Die vind je op GitLab.

De toekomst van LocalStack

LocalStack is dus een zeer krachtige tool, maar het is geen exacte kopie van AWS. Sommige zaken, zoals message attributes, werken nog niet. Dat is logisch: nieuwe features zullen altijd eerst op AWS zelf verschijnen voor ze naar LocalStack komen. De tool is voorlopig ook AWS-only, maar de ambitie om naar meerdere cloud providers te gaan is er wel.

Arne: ‘Sowieso is het een interessante tool om lokaal je functionaliteiten snel te testen. Technology Radar zegt alvast dat LocalStack omarmt wordt door vele development teams om hun AWS services te testen. Er zijn een aantal minpunten, maar door de groeiende interesse van ontwikkelaars zal LocalStack de komende jaren alleen maar relevanter worden.’

Meme v2 01

Blijf je graag op de hoogte van Insights?

Arne Hendrickx

Arne Hendrickx

Java Consultant

Benieuwd naar de Axxes Insight over Security?

Lees hier meer over inzichten betreffende HashiCorp Vault.

lees meer
Axxes