AWS: best practices en ‘onder de motorkap’
In het vorige blog hebben we vooral gekeken naar de nieuwste AWS-ontwikkelingen die gepresenteerd werden op re:Invent 2022. Waarbij veel nieuwe technologie zelfs nét voor, of tijdens AWS re:Invent beschikbaar kwam. Natuurlijk is het smullen voor AWS-techneuten, maar het delen van nieuwtjes is niet het enige doel van re:Invent. AWS wil gebruikers ook graag helpen om de AWS-services beter te begrijpen, te doorgronden en zo beter te kunnen gebruiken. Tijdens re:Invent kon je je kennis dan ook verdiepen via de typerende best practice-livesessies, zoals de Chalk Talk Sessions, Boot Camps en Breakout Sessions.
6 februari 2023 | Blog | Door: Frederique Retsema
Deel
Een korte uitleg
Chalk Talk Sessions
Techneuten die naar Las Vegas waren afgereisd voor re:Invent, konden tijdens livesessies in kleine groepjes elkaars uitdagingen delen. Onder leiding van een AWS-engineer werd gezamenlijk nagedacht over de beste oplossing.
Boot Camp Sessions
Een andere manier om kennis op te doen met best practices van AWS, was het volgen van betaalde Boot Camp Sessions. Helaas kon je tijdens re:Invent geen gratis examen meer doen, maar hebben deelnemers aan re:Invent wel 50% korting gekregen op hun volgende examen.
Breakout Sessions
Tijdens de Breakout Sessions konden AWS-engineers schitteren met het delen van hun kennis over diverse onderwerpen. Zoals het zo optimaal mogelijk inzetten van AWS-technologie, en hoe AWS onder de motorkap werkt. Meer inzicht in hoe AWS over performance en security denkt, geeft je als techneut het vertrouwen dat je weet dat een AWS-oplossing ook voor jou gaat werken.
De Break Out Sessions kijk je hier terug.
Gebruiken van Scalable Reliable Datagram netwerktechnologie
In de meeste organisaties wordt gebruikgemaakt van het TCP/IP-protocol voor het netwerkverkeer. Binnen datacenters is daar een snellere manier voor. Servers in een datacenter zijn verbonden met meerdere switches, die op hun beurt weer praten met meerdere andere switches. Wanneer je het TCP/IP-protocol gebruikt, dan zullen de verschillende netwerkpakketjes met data zo lang mogelijk via dezelfde switches van de ene naar de andere server verstuurd worden.
Het voordeel is dat de ontvangende server de pakketjes niet meer in de goede volgorde hoeft te zetten, omdat deze onveranderd is gebleven. Het nadeel is dat wanneer een switch wat trager wordt, alle netwerkpakketjes binnen deze verbinding ook trager worden.
Bij Scalable Reliable Datagram (SRD) komen de pakketjes niet op dezelfde volgorde binnen als dat ze zijn verstuurd. De ontvangende server moet deze pakketjes alsnog in de juiste volgorde zetten. Wordt een switch trager, dan zal SRD veel eerder (microseconden in plaats van milliseconden) vragen om een pakketje opnieuw te sturen.
Met deze kennis over performance in je achterhoofd is het goed te begrijpen waarom SRD de toekomst heeft binnen de AWS-datacenters. AWS zal dit dan ook vanaf 2023 standaard inzetten voor EBS-disks die gebaseerd zijn op io2, een veelgebruikt disk-type binnen veel organisaties.
Bij standaard netwerkkaarten van virtual machines staat SRD niet standaard aan. Deze kun je zelf aanzetten door te kiezen voor ENA Express bij de configuratie. Deze optie zal binnenkort ook beschikbaar zijn bij de in-memory database Elasticache.
Serverless werken met AWS Step Functions
Wanneer je besluit om zo veel mogelijk serverless te werken, dan heeft dit ook gevolgen voor de manier waarop je je applicaties ontwerpt. Meerdere sessies van re:Invent gingen in op de voordelen van asynchroon werken, met als voordeel dat het beter schaalbaar is, en daardoor sneller resultaat biedt.
Veel bedrijven maken gebruik van event-driven architectures. Hierbij wordt een applicatie opgesplitst in kleinere onderdelen die elkaar onderling aansturen via events, wat ook wel ‘Choreography’ wordt genoemd. Als je hierbij niet uitkijkt, kan er een overvloed aan verschillende events ontstaan. Waarbij het lastig zoeken is naar het juiste event om een nieuwe functionaliteit aan te sturen. Om deze reden adviseert AWS dan ook om gebruik te maken van de combinatie Event Bridge / AWS Step Functions. Step Functions heeft daarbij de rol van ‘Orchestrator’: op basis van een state machine wordt steeds weer bepaald wat de volgende stap in de process flow zal zijn.
Lego en AWS Step Functions
In 2020 liet Lego op re:Invent hiervan een mooi voorbeeld zien, waarbij het winkelmandje in de Lego-webshop een event stuurt naar de facturatiemodule, geschreven als Step-functie. Na een succesvolle betaling stuurt de facturatiemodule een event naar de distributiemodule, als Step-functie, die de Lego-doosjes bij elkaar zoekt en verpakt. De distributiemodule stuurt weer een event naar de verzendmodule, die Step Functions gebruikt om het Lego-pakketje uiteindelijk te versturen naar de klant. Aangezien Step Functions een visuele grafische workflow biedt, kun je per bestelling zien welke onderdelen van de state machine al zijn uitgevoerd, en waar de state machine op wacht om verder te gaan.
Via dit soort praktijkvoorbeelden wordt het veel inzichtelijker hoe een AWS-functionaliteit optimaal gebruikt kan worden, en hoe je deze ook in je eigen omgeving goed kunt inzetten.
AWS Lambda Powertools
AWS Lambda Powertools zijn niet echt nieuw meer, maar het blijft een mooi pakket om te gebruiken binnen AWS Lambda Functions. Een best practice is om de inputparameters van een Lambda-functie eerst te controleren voor je ze gebruikt. Dat kan via Powertools heel basaal (door te kijken of de input geldige JSON bevat), als heel uitgebreid (door te kijken of de JSON-input de juiste attributen bevat en of deze attributen ook geldige waarden bevatten). Bijvoorbeeld: controleren of een Amazon-account-ID uit twaalf cijfers bevat.
AWS Lambda Powertools kan ook ingezet worden om idempotency te ondersteunen: ervoor zorgen dat één record ook precies één keer verwerkt wordt. Bij serverless werken kan het voorkomen dat een record dat (bijvoorbeeld) verstuurd wordt via een SQS-queue, vaker dan één keer bij de ontvanger binnenkomt. Dit kan onder andere gebeuren op het moment dat de hoeveelheid berichten die aan een SQS-queue aangeboden worden, groter wordt, waarbij AWS meerdere onderliggende virtual machines inzet om de load te verwerken. Bij het splitsen van deze load kan het voorkomen dat één bericht aan meerdere virtual machines wordt aangeboden. AWS Lambda Powertools onthoudt welke berichten al eerder zijn verwerkt en wat het resultaat van de bewerking was. Deze caching gebeurt over meerdere instances van Lambda Functions heen. Een aanroeper krijgt hierdoor altijd hetzelfde antwoord terug, en een bericht wordt ook precies één keer verwerkt naar achterliggende AWS-services.
AWS Lambda Powertools kan nog veel meer. Het pakket biedt bijvoorbeeld ook ondersteuning voor batch werken en feature toggles. AWS Lambda Powertools is beschikbaar voor Python, Java, Typescript en .NET.
Conclusie
AWS re:Invent biedt techneuten en geïnteresseerden een wereld aan informatie. Het is hét moment voor AWS om nieuwe features en nieuwe technologie te delen, maar ook best practices en inzichten over wat er onder de motorkap gebeurt, met mensen die al langer met AWS werken.
Via AWS SRD kan netwerkverkeer sneller verwerkt worden, het is daarom aan te raden om ENA Express aan te zetten waar dit mogelijk is. Bij serverless werken is het verstandig om events (AWS EventBridge) te combineren met state machines (AWS Step Functions), om op die manier goed inzichtelijk te houden wat er met welk event bedoeld wordt. AWS Lambda Powertools is een goede ondersteuning voor AWS Lambda Functions. Deze library kan bijvoorbeeld gebruikt worden voor het controleren van inputparameters van Lambda Functions, en ook voor afhandelen van idempotency.