Lambda met SQS/SNS-triggers
Configureer Lambda-functies om te worden geactiveerd door SQS-queues en SNS-topics, zodat krachtige eventgestuurde workflows mogelijk worden.
Lambda met SQS/SNS-triggers is een gratis Serverloze backend met AWS Lambda en API Gateway-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Serverloze backend met AWS Lambda en API Gateway. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Serverloze backend met AWS Lambda en API Gateway bevat in totaal 4 lessen.
Gebeurtenisgestuurde Lambda-triggers
Lambda-functies vormen het hart van serverloze toepassingen, maar hoe weten ze wanneer ze moeten worden uitgevoerd? Ze reageren op gebeurtenissen!
Een gebeurtenis is alles wat in je AWS-omgeving gebeurt, zoals het uploaden van een bestand naar S3, een nieuw item in DynamoDB of, in deze les, een bericht dat aankomt in SQS of SNS.
Door SQS en SNS te gebruiken om Lambda te activeren, kun je krachtige gebeurtenisgestuurde architecturen bouwen. Dit betekent dat services via gebeurtenissen communiceren, waardoor systemen flexibeler en schaalbaarder worden.
SQS-triggers voor Lambda
Amazon SQS (Simple Queue Service) is een beheerde berichtenwachtrijservice. Wanneer je een SQS-wachtrij als Lambda-trigger configureert, bevraagt Lambda de wachtrij op berichten.
Zo werkt het:
- Lambda controleert de SQS-wachtrij voortdurend.
- Wanneer er berichten beschikbaar zijn, haalt Lambda er een batch van op.
- Vervolgens roept Lambda je functie aan voor elke batch of voor afzonderlijke berichten, afhankelijk van de configuratie.
- Na een succesvolle verwerking verwijdert Lambda de berichten uit de wachtrij.
Een SQS-trigger instellen
Om een SQS-wachtrij met een Lambda-functie te verbinden, doe je dat meestal via de AWS Management Console, AWS CLI of Infrastructure as Code (zoals AWS SAM of CloudFormation).
Belangrijke configuraties zijn:
- Batchgrootte: hoeveel berichten Lambda tegelijk ophaalt (bijvoorbeeld 1 tot 10).
- Batchvenster: hoelang Lambda wacht om een batch te verzamelen (maximaal 5 minuten).
- Bevragingsfrequentie: Lambda beheert dit automatisch.
Dankzij deze configuratie kan je functie berichten asynchroon verwerken, waardoor de producent van berichten wordt ontkoppeld van de consument.
SQS-berichten verwerken
Je Lambda-functie ontvangt SQS-berichten in een object event. Dit object bevat een array Records, waarin elk item een SQS-bericht is.
Bekijk een eenvoudig Python-voorbeeld dat berichten uit een SQS-wachtrij verwerkt. Stel je voor dat deze berichten gebruikers-ID's bevatten die moeten worden verwerkt.
import json
def lambda_handler(event, context):
print("Received SQS event:")
for record in event['Records']:
message_body = record['body']
print(f"Processing message: {message_body}")
# Example: parse JSON body if expected
try:
data = json.loads(message_body)
user_id = data.get('userId')
print(f"Extracted userId: {user_id}")
# Add your business logic here
except json.JSONDecodeError:
print(f"Message body is not valid JSON: {message_body}")
return {
'statusCode': 200,
'body': json.dumps('Messages processed successfully!')
}
# --- For local testing (simulated event) ---
if __name__ == '__main__':
# Simulate an SQS event
simulated_sqs_event = {
"Records": [
{
"messageId": "19dd0b57-b21e-4ac1-bd88-01bbb068cb78",
"receiptHandle": "AQEBwJnKyrgtLvC5...",
"body": '{"userId": "user123", "action": "signup"}',
"attributes": {
"ApproximateReceiveCount": "1",
"SentTimestamp": "1523232000000",
"SenderId": "AIDAIY234234234234234",
"ApproximateFirstReceiveTimestamp": "1523232000001"
},
"messageAttributes": {},
"md5OfBody": "098f6bcd4621d373cade4e832627b4f6",
"eventSource": "aws:sqs",
"eventSourceARN": "arn:aws:sqs:us-east-1:123456789012:my-queue",
"awsRegion": "us-east-1"
},
{
"messageId": "19dd0b57-b21e-4ac1-bd88-01bbb068cb79",
"receiptHandle": "AQEBwJnKyrgtLvC5...",
"body": '{"userId": "user456", "action": "login"}',
"attributes": {
"ApproximateReceiveCount": "1",
"SentTimestamp": "1523232000000",
"SenderId": "AIDAIY234234234234234",
"ApproximateFirstReceiveTimestamp": "1523232000001"
},
"messageAttributes": {},
"md5OfBody": "098f6bcd4621d373cade4e832627b4f6",
"eventSource": "aws:sqs",
"eventSourceARN": "arn:aws:sqs:us-east-1:123456789012:my-queue",
"awsRegion": "us-east-1"
}
]
}
lambda_handler(simulated_sqs_event, None)Details van SQS-gebeurtenissen
Laten we de belangrijkste onderdelen bekijken van een SQS-gebeurtenis die aan je Lambda-functie wordt doorgegeven:
event['Records']: een lijst met SQS-berichten. Je functie doorloopt deze lijst.record['body']: de daadwerkelijke inhoud van het bericht, meestal een JSON-tekenreeks die je moet parseren.record['messageId']: een unieke ID voor het bericht. Handig voor logging en idempotentie.record['attributes']: bevat metagegevens zoalsSentTimestamp.record['eventSource']: voor SQS-triggers altijd "aws:sqs".
Ga er altijd van uit dat body een tekenreeks is en parse deze als je JSON verwacht.
SNS-triggers voor Lambda
Amazon SNS (Simple Notification Service) is een volledig beheerde pub/sub-berichtenservice. In tegenstelling tot SQS gebruikt SNS een push-model om meldingen af te leveren.
Wanneer een SNS-onderwerp een bericht ontvangt, pusht het dat bericht onmiddellijk naar al zijn geabonneerde eindpunten, waaronder Lambda-functies.
Dit is ideaal voor:
- Situaties waarin één bericht meerdere acties activeert.
- Het verspreiden van waarschuwingen of meldingen.
- Het ontkoppelen van uitgevers van meerdere abonnees.
Een SNS-trigger instellen
Een SNS-topic koppelen aan een Lambda-functie is eenvoudig. Je abonneert je Lambda-functie op het SNS-topic.
Stappen:
- Maak een SNS-topic.
- Maak je Lambda-functie.
- Voeg een SNS-trigger toe aan je Lambda-functie en selecteer het topic.
- Controleer of de uitvoeringsrol van je Lambda-functie toestemming heeft om door SNS te worden aangeroepen.
Na de configuratie roept elk bericht dat naar het SNS-topic wordt gepubliceerd automatisch je Lambda-functie aan.
SNS-meldingen verwerken
Wanneer je Lambda-functie door SNS wordt geactiveerd, ontvangt deze een event-object met informatie over de melding. Het belangrijkste onderdeel is het veld Message binnen het object Sns.
Hier volgt een Python-voorbeeld dat een SNS-melding logt.
import json
def lambda_handler(event, context):
print("Received SNS event:")
for record in event['Records']:
sns_message = record['Sns']
message_id = sns_message['MessageId']
topic_arn = sns_message['TopicArn']
subject = sns_message.get('Subject', 'No Subject')
message_body = sns_message['Message']
timestamp = sns_message['Timestamp']
print(f"Message ID: {message_id}")
print(f"Topic ARN: {topic_arn}")
print(f"Subject: {subject}")
print(f"Message: {message_body}")
print(f"Timestamp: {timestamp}")
# Add your business logic here, e.g., send an email, update a database
return {
'statusCode': 200,
'body': json.dumps('SNS notification processed!')
}
# --- For local testing (simulated event) ---
if __name__ == '__main__':
# Simulate an SNS event
simulated_sns_event = {
"Records": [
{
"EventSource": "aws:sns",
"EventVersion": "1.0",
"EventSubscriptionArn": "arn:aws:sns:us-east-1:123456789012:my-topic:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"Sns": {
"Type": "Notification",
"MessageId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"TopicArn": "arn:aws:sns:us-east-1:123456789012:my-topic",
"Subject": "New Order Confirmation",
"Message": "{\"orderId\": \"ORD-789\", \"customer\": \"Jane Doe\"}",
"Timestamp": "2023-10-27T10:00:00.000Z",
"SignatureVersion": "1",
"Signature": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"SigningCertUrl": "https://sns.us-east-1.amazonaws.com/SimpleNotificationService-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pem",
"UnsubscribeUrl": "https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:123456789012:my-topic:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"MessageAttributes": {
"EventType": {"Type": "String", "Value": "OrderCreated"}
}
}
}
]
}
lambda_handler(simulated_sns_event, None)Details van SNS-gebeurtenissen
Net als bij SQS bevat de SNS-gebeurtenis ook een array Records, maar de structuur daarbinnen is anders:
event['Records']: Een lijst die doorgaans één SNS-melding per aanroep bevat.record['Sns']: Dit object bevat de belangrijkste details van de melding.record['Sns']['MessageId']: Unieke ID van het SNS-bericht.record['Sns']['TopicArn']: De ARN van het SNS-topic dat het bericht heeft gepubliceerd.record['Sns']['Subject']: Het onderwerp van de melding (optioneel).record['Sns']['Message']: De daadwerkelijke inhoud van de melding, vaak een JSON-tekenreeks.
Vergeet niet om Message te parseren als je gestructureerde gegevens verwacht.
Aanbevolen werkwijzen voor triggers
Houd bij het gebruik van SQS en SNS om Lambda te activeren rekening met deze aanbevolen werkwijzen:
- Idempotentie: Ontwerp je Lambda-functie zo dat deze dubbele berichten zonder ongewenste bijwerkingen kan verwerken, omdat berichten soms meerdere keren kunnen worden afgeleverd.
- Foutafhandeling: Configureer een Dead-Letter Queue (DLQ) voor je door SQS geactiveerde Lambda-functie. Mislukte berichten worden daarheen gestuurd zodat je ze later kunt onderzoeken.
- Batchverwerking: Verwerk berichten voor SQS efficiënt in batches. Als één bericht in een batch mislukt, wordt mogelijk de hele batch opnieuw geprobeerd.
- Machtigingen: Controleer of de uitvoeringsrol van Lambda toestemming heeft voor toegang tot SQS/SNS en andere services waarmee de functie communiceert.
Quiz over Lambda activeren
Test je kennis over SQS- en SNS-triggers voor Lambda!
Samenvatting en volgende stappen
Goed gedaan! Je hebt geleerd hoe je de kracht van gebeurtenisgestuurde systemen benut door Lambda met SQS en SNS te integreren.
- SQS-triggers: Maken asynchrone, ontkoppelde berichtverwerking mogelijk doordat Lambda wachtrijen bevraagt.
- SNS-triggers: Maken realtime meldingen naar meerdere ontvangers mogelijk door berichten naar Lambda te pushen.
- Je hebt ook de verschillende structuren van gebeurtenissen en belangrijke aanbevolen werkwijzen gezien voor het bouwen van veerkrachtige, gebeurtenisgestuurde serverloze applicaties.
Deze integraties beheersen is essentieel voor het bouwen van schaalbare en robuuste serverloze backends!
Leer Serverloze backend met AWS Lambda en API Gateway met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 12
- Lessen
- 48
Veelgestelde vragen
Is de les “Lambda met SQS/SNS-triggers” gratis?
Ja — de volledige tekst van “Lambda met SQS/SNS-triggers” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Serverloze backend met AWS Lambda en API Gateway wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Serverloze backend met AWS Lambda en API Gateway bevat in totaal 4 lessen.
Wat leer ik in “Lambda met SQS/SNS-triggers”?
Configureer Lambda-functies om te worden geactiveerd door SQS-queues en SNS-topics, zodat krachtige eventgestuurde workflows mogelijk worden. Je oefent met Serverloze backend met AWS Lambda en API Gateway door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Serverloze backend met AWS Lambda en API Gateway te beginnen?
Ervaring vooraf is niet nodig. Serverloze backend met AWS Lambda en API Gateway op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.
Hoe lang duurt de les “Lambda met SQS/SNS-triggers”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Serverloze backend met AWS Lambda en API Gateway?
Ja. Elke les over Serverloze backend met AWS Lambda en API Gateway bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- SQS voor het ontkoppelen van services
- SNS voor Pub/Sub-berichten
- Lambda met SQS/SNS-triggers
- Dead-letter queues en foutafhandeling