Cursus
Elk complex systeem is het resultaat van de orkestratie van meerdere subsystemen. Het bouwen en onderhouden van zo’n systeem blijft een veelvoorkomende uitdaging, zeker bij cloud-infrastructuren.
Gelukkig zijn er allerlei tools ontwikkeld om de orkestratie van workflows te stroomlijnen, ongeacht de complexiteit. Onder deze tools springt AWS Step Functions eruit door zijn nut en talrijke voordelen.
Dit artikel richt zich op het gebruik van Step Functions om workflows binnen de AWS Cloud te orkestreren. We beginnen met wat step functions zijn, hun voordelen en belangrijkste kenmerken.
Vervolgens leiden we je door de stappen om met Step Functions aan de slag te gaan, van het inrichten van je AWS-omgeving tot het verkennen van de interface. Op basis daarvan doorlopen we stap voor stap het proces van het maken en deployen van een realistische workflow.
Wat zijn AWS Step Functions?
AWS Step Functions is een serverless orkestratieservice die is ontworpen voor het maken van visuele workflows, waarmee je AWS Lambda-functies en andere AWS-resources naadloos kunt coördineren.
De integratiemogelijkheden zijn uitgebreid en ondersteunen verbindingen met Amazon EC2, Amazon ECS, on-premises servers, Amazon API Gateway en Amazon SQS-queues, om er een paar te noemen. Zo kunnen workflows compleet zijn en interacteren met een breed ecosysteem van AWS-services.
Dankzij de veelzijdigheid van AWS Step Functions is het geschikt voor een brede reeks toepassingen. Of het nu gaat om orderafhandeling, dataverwerking, het aandrijven van webapplicaties of de orkestratie van een complexe reeks taken: Step Functions biedt een robuuste oplossing voor workflow-automatisering en -beheer.
Belangrijkste features en voordelen
Voordat we in de technische details van AWS Step Functions duiken, bekijken we eerst de belangrijkste features en voordelen.
Belangrijkste features
Step Functions biedt allerlei features om het maken en beheren van workflows te vereenvoudigen. De belangrijkste lichten we hieronder uit:
- HTTPS-endpointintegratie: Hiermee kunnen workflows elke webservice aanroepen die HTTPS ondersteunt, om zo diverse web-API’s in je processen te integreren.
- Coördinatie van gedistribueerde componenten: Maak het mogelijk om componenten van gedistribueerde systemen te coördineren — cruciaal voor complexe, multiserviceapplicaties.
- Ingebouwde toestandsbeheer: Door de voortgang van elke workflow-executie nauwkeurig te monitoren, bewaart deze mogelijkheid de toestand van je applicaties tijdens de uitvoering en beheert de dataoverdracht tussen de workflowstappen.
- Handmatige goedkeuring: Mensen in de lus zijn cruciaal voor elke automatisering. Deze feature biedt een mechanisme om menselijke interventie op te nemen in een geautomatiseerde workflow voor handmatige goedkeuringen waar nodig.
Voordelen
De key features van AWS Step Functions bieden ontwikkelaars en organisaties meerdere voordelen om hun operationele en ontwikkelworkflows te verbeteren.
|
Voor ontwikkelaars |
Voor organisaties |
|
|
Praktijkvoorbeelden en casestudy’s
Op basis van bovenstaande features en voordelen is het duidelijk dat Step Functions een cruciale rol kan spelen in uiteenlopende domeinen, waardoor bedrijven hun workflows kunnen ontwerpen, automatiseren en efficiënt schalen.
In deze sectie verkennen we voorbeelden van hoe verschillende sectoren AWS Step Functions gebruiken om competitiever, innovatiever en efficiënter te zijn.
Coördinatie van microservices
Organisaties met architecturen die uit microservices bestaan, zetten AWS Step Functions vaak in om de interacties tussen deze services te beheren.
Een retailbedrijf kan bijvoorbeeld Step Functions gebruiken om stappen te orkestreren die gebruikersauthenticatie, voorraadbeheer, betalingsverwerking en orderverzending afhandelen, voor een samenhangende winkelervaring.
Security en IT-operations
AWS Step Functions kan worden gebruikt om repetitieve taken te automatiseren, zoals securitychecks, systeemupdates en compliancecontroles.
In IT-beveiliging kun je bijvoorbeeld Step Functions gebruiken om incidentresponsworkflows te ontwerpen, waardoor menselijke fouten en responstijden verminderen door elke fase — van eerste alert tot oplossing — systematisch te beheren.
Dataworkflows en ETL-processen
Voor datagedreven bedrijven kan AWS Step Functions dataverwerking en ETL-taken orkestreren. Denk aan workflows voor data-extractie uit meerdere bronnen, transformatie naar een consistent formaat en laden in analytische platforms of data lakes.
Een analyticsbedrijf kan bijvoorbeeld Step Functions inzetten om zijn datapijplijn te automatiseren, zodat data efficiënt wordt verwerkt voor strategische besluitvorming.
Machine learning-operations
Step Functions is ook nuttig voor het operationele deel van machine learning, waaronder datapreparatie, modeltraining, evaluatie en deployment.
Een healthtechbedrijf kan Step Functions gebruiken om de pijplijn te beheren voor periodieke hertraining van diagnostische algoritmen, zodat de modelprestaties op peil blijven naarmate er nieuwe data binnenkomt.
Media-verwerkingspijplijnen
In media en entertainment kan AWS Step Functions complexe mediaverwerkingsworkflows orkestreren, waaronder video-encoding, beeldverwerking en contentanalyse.
Een mediabedrijf kan Step Functions toepassen zodat nieuw geüploade content automatisch formaatconversie, thumbnail-extractie en metagegevensverrijking triggert, voordat deze wordt gepubliceerd.
Aan de slag met AWS Step Functions
Latere secties in dit artikel behandelen de combinatie van Step Functions met andere AWS-services. Het is daarom nodig om eerst de basis van Step Functions te begrijpen voordat we met geavanceerde concepten aan de slag gaan.
Het doel van deze sectie is om je te helpen starten met AWS Step Functions, van het begrijpen van de bouwstenen tot het navigeren door de AWS Step Functions-interface.
Bouwstenen van Step Functions
Elk systeem of module is een combinatie van meerdere subcomponenten, en dat geldt ook voor Step Functions. Step Functions is gebaseerd op de volgende blokken: (1) toestandsmachines en (2) taken.
Laten we deze concepten begrijpen aan de hand van een voorbeeld.
- State machines (toestandsmachines): Een workflow die de volgorde van gebeurtenissen, conditionele logica en de algehele uitvoeringsstroom van taken bepaalt. Kort gezegd: een state machine kun je definiëren als een workflow.
- Tasks (taken): Een actie die een specifieke handeling uitvoert. Neemt input en genereert output. Voorbeelden zijn: een database bevragen, een API-call doen of een Lambda-functie aanroepen.
Stel een use case voor waarin een kinderopvangregistratieproces met AWS Step Functions wordt uitgevoerd. Voordat we in de details duiken, eerst de globale stappen:
- Registratiegegevens verzamelen: de eerste stap is het verzamelen van registratiegegevens van ouders. Dit kan via een webformulier, maar in onze use case gebruiken we JSON. Bij verzending wordt een Lambda-functie getriggerd, die de registratiegegevens doorgeeft aan de volgende stap in de workflow.
- Registratiegegevens verifiëren: De volgende stap is een Lambda-functie die de registratiegegevens controleert. Er wordt gekeken of alle verplichte velden zijn ingevuld en of de leeftijd van het kind binnen het toegestane bereik voor de opvang valt. Bij een succesvolle verificatie gaat de workflow door; zo niet, dan gaat er een foutmelding naar de ouders.
- Beschikbaarheid controleren: zodra de gegevens zijn geverifieerd, controleert een andere Lambda-functie de beschikbaarheid van plekken in de opvang. Als er plek is, gaat de workflow verder. Zo niet, dan ontvangen de ouders een bericht dat de opvang vol is.
- Registratie bevestigen: de laatste stap is een Lambda-functie die de registratie bevestigt en een bevestigingsbericht naar de ouders stuurt, inclusief details over startdatum en kosten.
Deze workflow heeft een state machine met vier hoofd taken, allemaal helder genoeg:
checkInformationcheckAgeRangecheckSpotsAvailabilityconfirmRegistration
Workflow voor kinderopvangregistratie met AWS Step Functions
Je eerste AWS Step Function bouwen
De bovenstaande secties boden meer theorie; nu duiken we de techniek in, van de vereisten voor Step Functions tot het implementeren en deployen van een end-to-end workflow.
Vereisten voor het implementeren van Step Functions
Voordat we in de use case duiken, eerst de vereisten voor een succesvolle implementatie:
- AWS-account: nodig om toegang te krijgen tot AWS-services; je kunt er een aanmaken via de AWS-website.
- Basiskennis van AWS-services: Bekendheid met AWS Lambda en Amazon Simple Notification Service (SNS) is nodig voor deze use case.
- Kennis van JSON: Basisbegrip van JSON is vereist om het input- en outputdataformaat te begrijpen.
- AWS IAM: Inzicht in AWS Identity and Access Management (IAM) is nodig om de juiste permissies voor de gebruikte Lambda-functies in te stellen.
- Programmeervaardigheden: Basisvaardigheden in Python om de Lambda-functies te schrijven.
Navigeren door de AWS Step Functions-interface
Laten we de Step Functions-interface verkennen. Ga na het inloggen in je AWS-account als volgt te werk:
- Typ het trefwoord “Step Functions” in de zoekbalk bovenaan.
- Kies het bijbehorende icoon uit de resultaten.
- Klik op het “Get Started”-icoon om je eerste step function te maken.
- Omdat we onze eigen state machine willen maken, selecteer je het tabblad “Create your own”.

Vier hoofdstappen om de Step Functions-interface te openen
Na de vierde stap kunnen we de state machine ontwerpen via het tabblad “Design”, dat drie hoofdonderdelen bevat: “Actions”, “Flow” en “Patterns”.

De drie hoofdcomponenten van het tabblad "Design"
- Actions: Dit zijn afzonderlijke operaties binnen een workflow en corresponderen met specifieke AWS-services, zoals het aanroepen van een Lambda-functie, een bericht publiceren naar SNS, een taak draaien op ECS of een job starten in AWS Glue.
- Flow: Dit vertegenwoordigt de besturingselementen die het uitvoeringspad van de state machine bepalen. Elementen zoals "Choice" voor vertakkingslogica, "Parallel" voor gelijktijdige paden, "Map" voor iteratie over een collectie, "Pass" als no-op of om statedata te verrijken, "Wait" voor vertragingen, "Success" om een workflow succesvol af te sluiten, en "Fail" om te eindigen vanwege een fout, maken allemaal deel uit van de flowcontrol.
- Patterns: Dit zijn vooraf gedefinieerde templates of best practices voor veelvoorkomende workflowscenario’s, waardoor het makkelijker wordt om complexe state machines te bouwen. Patterns kunnen taken omvatten voor het verwerken van S3-objecten, JSON-bestanden, CSV-bestanden of generieke patronen zoals een job-poller voor de orkestratie van asynchrone jobs.
De workflow maken
De initiële workflow was bedoeld als algemeen overzicht van de hoofdonderdelen van de state machine. In deze sectie bekijken we de implementatie.
Hiervoor hebben we vier Lambda-functies nodig, elk overeenkomend met een specifieke taak.
De volgende zeven stappen lichten alle noodzakelijke stappen toe om een Lambda-functie te maken. Dit proces is hetzelfde voor alle vier; alleen de inhoud van de functies verschilt.
De volledige code bij het artikel staat op de GitHub-pagina. Hoewel de code eenvoudig te begrijpen is, raden we aan om het hele artikel te volgen voor de beste ervaring.
Zeven hoofdstappen om een Lambda-functie te maken
Na afronding van de zeven stappen verschijnt het volgende venster met belangrijke informatie, zoals:
- De naam van de functie
- De link naar de Amazon Resource Name (ARN), en
- Het geïntegreerde gebied om de logica van de functie te implementeren.
Details van de Lambda-functie checkInformation
Herhaal nu hetzelfde proces voor de overige drie taken (functies) checkAgeRange, checkSpotsAvailability en confirmRegistration.
Een voorbeeld van de input-JSON staat hieronder. Het is belangrijk om dit te begrijpen, omdat het van invloed is op hoe de functies worden geïmplementeerd.
- De JSON bevat informatie over het kind dat wordt ingeschreven, waaronder voornaam, achternaam en geboortedatum.
- Ook zijn er gegevens over de ouders, de dagen van de week waarop het kind naar de opvang gaat en eventuele aanvullende informatie.
{
"registration_info": {
"child": {
"firstName": "Mohamed",
"lastName": "Diallo",
"dateOfBirth": "2016-07-01"
},
"parents": {
"mother": {
"firstName": "Aicha",
"lastName": "Cisse",
"email": "aicha.cisse@example.com",
"phone": "123-456-7890"
},
"father": {
"firstName": "Ibrahim",
"lastName": "Diallo",
"email": "ibrahim.diallo@example.com",
"phone": "098-765-4321"
}
},
"daysOfWeek": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday"
],
"specialInstructions": "Mohamed has a peanut allergy."
}
}
Elke Lambda-functie wordt hieronder beschreven:
|
Functie |
Beschrijving |
|
|
|
|
|
|
|
|
|
|
|
|
De onderliggende implementatie van elke functie staat hieronder:
checkInformation-functie
import json
def checkInformation(event, context):
registration_info = event['registration_info']
required_fields = ['child', 'parents', 'daysOfWeek']
for field in required_fields:
if field not in registration_info:
return {
'statusCode': 400,
'body': f'Missing required field: {field}'
}
return {
'statusCode': 200,
'body': json.dumps(registration_info)
}
checkAgeRange-functie
import json
import datetime
def checkAgeRange(event, context):
registration_info = json.loads(event['body'])
dob = registration_info['child']['dateOfBirth']
today = datetime.date.today()
dob_date = datetime.datetime.strptime(dob, '%Y-%m-%d').date()
age = today.year - dob_date.year - ((today.month, today.day) < (dob_date.month, dob_date.day))
if age < 2 or age > 5:
return {
'statusCode': 400,
'body': json.dumps('Child is not within the acceptable age range for this daycare.')
}
registration_info['child']['age'] = age
return {
'statusCode': 200,
'body': json.dumps(registration_info)
}
checkSpotsAvailability-functie
import json
def checkSpotsAvailability(event, context):
registration_info = json.loads(event['body'])
spots_available = 20 # This should be dynamically determined, not hardcoded
if spots_available <= 0:
return {
'statusCode': 400,
'body': json.dumps('No spots available in the daycare.')
}
return {
'statusCode': 200,
'body': json.dumps(registration_info)
}
confirmRegistration-functie
import json
import datetime
def confirmRegistration(event, context):
registration_info = json.loads(event['body'])
age = registration_info['child']['age'] # This was added in the checkAgeRange function
if age >= 2 and age < 3:
fees = 800
elif age >= 3 and age < 4:
fees = 750
elif age >= 4 and age < 5:
fees = 700
else: # age >= 5
fees = 650
start_date = datetime.date.today() + datetime.timedelta(weeks=2)
confirmation_details = {
'fees': fees,
'start_date': start_date.isoformat()
}
response = {**registration_info, **confirmation_details}
return {
'statusCode': 200,
'body': json.dumps(response)
}
Met dit alles op zijn plek kunnen we onze state machine voor kinderopvang bouwen met de grafische interface van Step Functions.
De uiteindelijke state machine staat hieronder. Laten we de belangrijkste stappen begrijpen die tot deze workflow hebben geleid:

State machine-workflow voor de kinderopvang-use case
Voordat we beginnen, is het belangrijk op te merken dat het veld statusCode uit de output van een Lambda-functie wordt gebruikt om de volgende status in de state machine te bepalen.
- Als de waarde 200 is, betekent dit dat de check is geslaagd en gaan we door naar de volgende stap.
- Als de
statusCode400 is, is de check mislukt en retourneren we het relevante bericht, afhankelijk van de functie die de onderliggende taak uitvoerde.
Check Information
- De state machine start met deze stap.
- Er wordt een Lambda-functie aangeroepen om te controleren of alle vereiste informatie in het registratieformulier aanwezig is.
- Als de informatie compleet is, gaat het proces door naar de volgende stap. Zo niet, dan eindigt het met een fail-state die meldt dat de informatie onvolledig is.
Check Age Range
- Deze stap wordt alleen bereikt als de informatiecheck is geslaagd.
- Er wordt een andere Lambda-functie aangeroepen om te controleren of de leeftijd van het kind binnen het toegestane bereik voor de opvang valt.
- Als de leeftijd binnen het bereik valt, gaat het proces door. Zo niet, dan eindigt het met een fail-state die meldt dat de leeftijd ongeldig is.
Check Spots Availability
- Deze stap wordt alleen bereikt als de leeftijdscheck succesvol was.
- Er wordt een Lambda-functie aangeroepen om te controleren of er plekken beschikbaar zijn in de opvang.
- Als er plekken zijn, gaat het proces door. Zo niet, dan eindigt het met een fail-state die meldt dat er geen plekken beschikbaar zijn.
Confirm Registration
- Dit is de laatste stap en wordt alleen bereikt als er plekken beschikbaar zijn.
- Er wordt een Lambda-functie aangeroepen om de registratie te bevestigen en de kosten te berekenen op basis van de leeftijd van het kind.
- Het proces eindigt na deze stap met een success-state die de registratie bevestigt.
Wil je meer leren over Lambda-functies? Streaming Data with AWS Kinesis and Lambda leert je werken met streamingdata met serverless technologieën op AWS.
IAM-rollen maken
De volgende stap is het definiëren van de IAM-rollen zodat de step functions onze Lambda-functies kunnen aanroepen. Dat doe je zo:

Eerste negen stappen om een IAM-rol te maken

De tiende en elfde stap om een IAM-rol te maken
Deze IAM-rol kan als volgt aan de state machine worden toegekend, beginnend vanaf het tabblad “Config”.

Drie hoofdstappen om de IAM-rol toe te kennen
Na het opslaan zouden we het volgende bericht moeten krijgen om te zien of alles goed is gegaan.

Succesbericht voor het aanmaken van de state machine
Als we tevreden zijn met de state machine, is de volgende stap deze aan te maken met de knop “Create” rechtsboven.
Illustratie van de uitvoering van de state machine
Je workflow deployen en testen
Onze workflow is gedeployed en nu is het tijd om de state machine te testen. We testen twee scenario’s:
- Een foutsituatie met een geldig leeftijdsbereik, waarbij het kind dat we proberen in te schrijven ouder dan 5 jaar is. Dit komt overeen met de initiële JSON.
- Een succescase waarbij het kind 3 jaar oud is.

Resultaat van een succescase

Resultaat van een foutsituatie
Je Step Functions optimaliseren
Het optimaliseren van elk proces begint met het toepassen van best practices die tot prestatieverbetering en kostenefficiëntie kunnen leiden. De volgende best practices helpen je om het meeste uit elke AWS Step Function te halen.
- Best practices voor performance: Strategieën zoals het minimaliseren van het aantal state-transities, het instellen van passende time-outs en het optimaliseren van je AWS Lambda-functies.
- Best practices voor kostenefficiëntie: Strategieën zoals het kiezen van het juiste type state machine (Standard of Express), het managen van AWS Lambda-kosten en het begrijpen en beheren van Step Functions-prijzen.
Conclusie
Dit artikel bood een uitgebreide gids voor het begrijpen en gebruiken van AWS Step Functions. We begonnen met een introductie tot AWS Step Functions en hun belangrijkste features en voordelen.
Daarna leidden we je door het opzetten van je AWS-omgeving en het navigeren door de AWS Step Functions-interface.
Vervolgens liepen we het proces door van het bouwen van je eerste AWS Step Function, van het maken van een basisworkflow tot het deployen en testen ervan. We verkenden ook geavanceerde features en use cases van AWS Step Functions en bespraken hoe je ze optimaliseert voor maximale efficiëntie en kosteneffectiviteit.
Afronding
Onze artikelen AWS-, Azure- en GCP-servic evergelijking voor data science & AI en Introductie tot AWS Boto in Python zijn uitstekende volgende stappen om verder te leren.
Het eerste artikel vergelijkt de belangrijkste services die je nodig hebt voor data- en AI-werk, van data engineering tot data-analyse en data science, tot het bouwen van data-applicaties. Deze cheat sheet helpt je het landschap van clouddiensten voor data science en AI over de drie grote platforms te begrijpen.
Het tweede artikel geeft een toegankelijke introductie tot AWS Boto in Python en laat zien hoe je cloudtechnologie inzet om je dataworkflow te optimaliseren. Dit is een geweldige resource voor iedereen die AWS-operaties met Python wil automatiseren.
AWS heeft veel services, en de sleutel tot het beheersen van AWS Step Functions is het begrijpen van de eisen van je applicatie en het gebruiken van de juiste combinatie van AWS-services en features om daaraan te voldoen.
Een veelzijdige data scientist die graag zijn kennis deelt en iets terugdoet voor anderen. Zoumana is YouTube-contentmaker en een toonaangevende techschrijver op Medium. Hij haalt plezier uit spreken, coderen en lesgeven. Zoumana heeft twee masterdiploma’s: het eerste in informatica met een focus op machine learning uit Parijs, Frankrijk, en het tweede in data science van Texas Tech University in de VS. Zijn loopbaan begon als softwareontwikkelaar bij Groupe OPEN in Frankrijk. Daarna stapte hij over naar IBM als machine learning-consultant, waar hij end-to-end AI-oplossingen ontwikkelde voor verzekeringsmaatschappijen. Zoumana sloot zich aan bij Axionable, de eerste Sustainable AI-startup met vestigingen in Parijs en Montreal. Daar werkte hij als data scientist en bouwde hij AI-producten—voornamelijk NLP-usecases—voor klanten in Frankrijk, Montreal, Singapore en Zwitserland. Daarnaast wijdde hij 5% van zijn tijd aan research & development. Momenteel werkt hij als senior data scientist bij IFC – the World Bank Group.





