Serverless applicaties debuggen
Ontdek technieken om Lambda-functies effectief te debuggen, waaronder lokaal testen, remote debugging en het interpreteren van CloudWatch-logs om problemen op te lossen
Serverless applicaties debuggen is een gratis Serverloze ontwikkeling met AWS Lambda-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 ontwikkeling met AWS Lambda. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Serverloze ontwikkeling met AWS Lambda bevat in totaal 4 lessen.
Introductie tot het debuggen van Lambda
Het debuggen van serverless applicaties, vooral AWS Lambda-functies, brengt unieke uitdagingen met zich mee. In tegenstelling tot traditionele applicaties zijn Lambda-functies stateless en tijdelijk.
In deze les verkennen we praktische technieken om problemen in je Lambda-functies effectief te herkennen en op te lossen, van lokaal testen tot het interpreteren van logs.
Waarom debuggen in serverless systemen uniek is
Bij traditioneel debuggen loop je vaak regel voor regel door code met behulp van een IDE. Met Lambda is dit niet altijd eenvoudig, omdat:
- Tijdelijk karakter: Functies worden alleen uitgevoerd wanneer ze worden aangeroepen en verdwijnen daarna.
- Statelessheid: Er is geen blijvend geheugen tussen aanroepen.
- Gedistribueerde systemen: Problemen kunnen ontstaan door interacties tussen veel services.
We zijn sterk afhankelijk van logs, metrics en tracing om te begrijpen wat er gebeurt.
Lokaal testen met SAM CLI
Een van de effectiefste manieren om te debuggen is je Lambda-functies lokaal testen voordat je ze naar AWS implementeert.
Met de AWS Serverless Application Model (SAM) CLI kun je je Lambda-functies op je lokale machine aanroepen, waarbij de runtimeomgeving van AWS Lambda wordt gesimuleerd.
- Snellere feedbacklus.
- Gebruik je vertrouwde lokale hulpprogramma's voor debugging.
Demo van lokaal aanroepen met SAM CLI
Hier is een eenvoudige Python Lambda-functie. Voor lokaal testen kun je een gebeurtenis en context simuleren. Probeer deze uit te voeren!
import json
def lambda_handler(event, context):
message = event.get('message', 'Hello from Lambda!')
print(f"Received event: {json.dumps(event)}")
print(f"Processing message: {message}")
return {
'statusCode': 200,
'body': json.dumps({'response': message})
}
# This block allows local execution
if __name__ == '__main__':
# Simulate an event
test_event = {'message': 'Local debug test'}
# Simulate a context object
test_context = type('obj', (object,), {'invoked_function_arn': 'local'})()
response = lambda_handler(test_event, test_context)
print("\n--- Lambda Response ---")
print(json.dumps(response, indent=2))
CloudWatch Logs voor debugging
Nadat je Lambda is geïmplementeerd, wordt Amazon CloudWatch Logs je belangrijkste hulpmiddel om het gedrag ervan te begrijpen en problemen te debuggen.
Elke keer dat je Lambda-functie wordt aangeroepen, worden logs naar een speciale loggroep gestuurd. Elke aanroep krijgt een unieke Request ID, waarmee je de uitvoering kunt volgen.
- Log Groups: Bevatten logs voor een specifieke functie.
- Log Streams: Specifieke instanties van de logs van je functie.
Problemen in logs vinden
Wanneer er een fout optreedt, kijk je eerst in CloudWatch Logs. Je kunt:
- Logs filteren: Zoeken naar trefwoorden zoals "ERROR", "Exception" of specifieke berichten.
- Log Insights: Een krachtige querytaal gebruiken om logs te analyseren, fouten te groeperen en trends te herkennen.
- Request ID: De Request ID van de aanroep gebruiken om alle logs voor een specifieke uitvoering te vinden.
Controleer altijd de volledige stacktrace voor gedetailleerde informatie over de fout.
Debuggen met loginstructies
De eenvoudigste maar krachtigste debugtechniek voor Lambda is het gebruik van print()-instructies (Python) of console.log()-instructies (Node.js).
Door strategisch loginstructies toe te voegen, kun je variabelewaarden, uitvoeringspaden en de toestand van je functie op verschillende punten in je code volgen. Bekijk een voorbeeld:
import json
def calculate_discount(price, discount_percentage):
print(f"DEBUG: Initial price: {price}")
if not isinstance(price, (int, float)) or price < 0:
raise ValueError("Price must be non-negative.")
if not isinstance(discount_percentage, (int, float)) or not (0 <= discount_percentage <= 100):
raise ValueError("Discount must be between 0 and 100.")
discount_amount = price * (discount_percentage / 100)
final_price = price - discount_amount
print(f"DEBUG: Final price: {final_price}")
return final_price
def lambda_handler(event, context):
try:
data = json.loads(event['body'])
price = data['price']
discount = data['discount']
final_price = calculate_discount(price, discount)
return {
'statusCode': 200,
'body': json.dumps({'originalPrice': price, 'finalPrice': final_price})
}
except Exception as e:
print(f"ERROR: An error occurred: {e}")
return {
'statusCode': 400,
'body': json.dumps({'error': str(e)})
}
if __name__ == '__main__':
# Test case 1: Valid input
test_event_1 = {'body': json.dumps({'price': 100, 'discount': 10})}
response_1 = lambda_handler(test_event_1, None)
print("\n--- Test Case 1 Response ---")
print(json.dumps(response_1, indent=2))
# Test case 2: Invalid discount
test_event_2 = {'body': json.dumps({'price': 50, 'discount': 110})}
response_2 = lambda_handler(test_event_2, None)
print("\n--- Test Case 2 Response ---")
print(json.dumps(response_2, indent=2))
Aanroepfouten begrijpen
Lambda-functies kunnen om verschillende redenen mislukken. Het is belangrijk om onderscheid te maken tussen verschillende fouttypen:
- Function Errors: Je code heeft een niet-afgehandelde uitzondering gegenereerd. Deze verschijnen in CloudWatch Logs met een stacktrace.
- Invocation Errors: Problemen voordat je code überhaupt wordt uitgevoerd, zoals machtigingsfouten of limieten voor de payloadgrootte. Deze verschijnen mogelijk niet rechtstreeks in de logs van je functie.
- Timeout Errors: Je functie heeft de geconfigureerde uitvoeringstijd overschreden.
CloudWatch-metrics en X-Ray (in een andere les!) helpen je deze te herkennen.
De stroom van aanvragen traceren
In complexe serverless applicaties kan één aanvraag meerdere Lambda-functies, API Gateway, SQS, DynamoDB en meer omvatten.
Het begrijpen van de stroom van een aanvraag door deze services heen is essentieel voor het debuggen. Gebruik de Request ID, die vaak wordt doorgegeven als x-amzn-RequestId of iets vergelijkbaars, om logs van verschillende onderdelen aan elkaar te koppelen.
AWS X-Ray (behandeld in een latere les) biedt hiervoor visuele tracing.
Best practices voor debugging
Pas de volgende werkwijzen toe om problemen bij het debuggen tot een minimum te beperken:
- Uitgebreide logging: Log invoer, uitvoer en de belangrijkste toestanden van variabelen.
- Gestructureerde logging: Gebruik JSON-logs om eenvoudiger te kunnen parseren en zoeken.
- Idempotentie: Ontwerp functies zo dat ze hetzelfde resultaat opleveren, ook als ze meerdere keren worden aangeroepen.
- Kleine functies: Eenvoudiger te isoleren en te testen.
- Geautomatiseerd testen: Eenheids- en integratietests signaleren problemen vroeg.
Debuguitdaging
Je hebt een Lambda-functie die gebruikersregistraties verwerkt. Gebruikers melden dat hun registratie soms mislukt, maar je ziet geen "ERROR"-berichten in CloudWatch Logs voor je Lambda-functie.
Wat is hiervoor de meest waarschijnlijke reden en waar moet je dit als eerste onderzoeken?
Samenvatting: serverless systemen debuggen
We hebben essentiële technieken voor het debuggen van je serverloze toepassingen behandeld:
- Lokaal testen met SAM CLI voor snelle iteraties.
- CloudWatch Logs gebruiken om het gedrag van functies te analyseren en fouten te vinden.
- Logberichten gebruiken om de uitvoeringsstroom te volgen.
- De verschillende soorten Lambda-fouten begrijpen.
- Best practices voor het bouwen van serverloze functies die eenvoudig te debuggen zijn.
Als je deze technieken beheerst, kun je veel beter robuuste serverloze toepassingen bouwen.
Leer Serverloze ontwikkeling met AWS Lambda 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 “Serverless applicaties debuggen” gratis?
Ja — de volledige tekst van “Serverless applicaties debuggen” 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 ontwikkeling met AWS Lambda wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Serverloze ontwikkeling met AWS Lambda bevat in totaal 4 lessen.
Wat leer ik in “Serverless applicaties debuggen”?
Ontdek technieken om Lambda-functies effectief te debuggen, waaronder lokaal testen, remote debugging en het interpreteren van CloudWatch-logs om problemen op te lossen Je oefent met Serverloze ontwikkeling met AWS Lambda 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 ontwikkeling met AWS Lambda te beginnen?
Ervaring vooraf is niet nodig. Serverloze ontwikkeling met AWS Lambda 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 “Serverless applicaties debuggen”?
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 ontwikkeling met AWS Lambda?
Ja. Elke les over Serverloze ontwikkeling met AWS Lambda 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
- CloudWatch-logs en -metrieken
- Foutafhandeling en retries
- Serverless applicaties debuggen
- Aangepaste metrieken en CloudWatch Alarms