Het uitvoeringsmodel van Lambda begrijpen

Serverless-toepassingen met AWS Lambda

Claudio Canales

Senior DevOps Engineer

Automatische uitvoering

Event-driven AWS

  • Lambda draait code bij een event.
  • Voorbeeld: S3-upload -> afbeelding resizen.
  • Verschillende triggers, hetzelfde patroon.
Serverless-toepassingen met AWS Lambda

Idle tot getriggerd

Idle -> event -> run -> stop

  • Idle: er draait niets.
  • Event: handler draait en stopt.

Bewegingssensor-analogie voor Lambda

  • Als een lamp met bewegingssensor: idle tot trigger.
  • Trigger zet "uit" naar "aan".
Serverless-toepassingen met AWS Lambda

Wat is AWS Lambda?

AWS Lambda in een oogopslag

  • Event-driven compute-service.
  • Schaalt automatisch met de vraag.
  • Je betaalt alleen voor runtime.
Serverless-toepassingen met AWS Lambda

Hoe Lambda je code uitvoert

Uitvoerflow van Lambda

  • Een event triggert Lambda.
  • Lambda geeft de event-payload door aan je handler.
  • Je handler retourneert een resultaat.
Serverless-toepassingen met AWS Lambda

Schalen met de vraag

Schalen creëert meer omgevingen

  • Meer events: meer parallelle aanroepen.
  • Lambda start extra omgevingen.
  • Cold starts kunnen per nieuwe omgeving optreden.
Serverless-toepassingen met AWS Lambda

De handler-functie

def lambda_handler(event, context):
    # Your code here
    return {
        'statusCode': 200,
        'body': 'Hello from Lambda!'
    }
  • event: input-payload (JSON).
  • context: runtime-metadata.
  • return: output (of succes/fout).

Handler ontvangt event en context

Serverless-toepassingen met AWS Lambda

Het event-object

Event-payload van objectopslag

S3-event: bucket + object key.

# event["Records"][0]["s3"]
{
  "bucket": {"name": "my-bucket"},
  "object": {"key": "data.csv"}
}
  • Zelfde taak: haal eruit wat je nodig hebt.

Event-payload van HTTP-verzoek

API-event: method, pad, body.

# API request event
{
  "httpMethod": "POST",
  "path": "/users",
  "body": "{\"name\": \"John\"}"
}
  • Andere triggers, ander JSON.
Serverless-toepassingen met AWS Lambda

Het context-object

def lambda_handler(event, context):
    time_left = (
        context.get_remaining_time_in_millis()
    )
    request_id = context.aws_request_id
  • get_remaining_time_in_millis Resterende tijd tot timeout.
  • aws_request_id Request-ID voor logtracing.
Serverless-toepassingen met AWS Lambda

Stateless uitvoering

Warm hergebruik vs reset

  • Elke aanroep is onafhankelijk.
  • Hergebruik is mogelijk, niet gegarandeerd.
  • Sla state buiten Lambda op.
counter = 0

def lambda_handler(event, context):
    global counter
    counter += 1  # kan resetten
    return counter
Serverless-toepassingen met AWS Lambda

Cold starts

Cold start-tijdlijn

  • Nieuwe uitvoeringsomgeving.
  • Code en dependencies laden.
  • Init draaien, dan handler.
Serverless-toepassingen met AWS Lambda

Warm starts

Warm start-tijdlijn

  • Bestaande omgeving hergebruiken.
  • Meeste init overslaan.
  • Handler start sneller.
Serverless-toepassingen met AWS Lambda

Init, invoke, freeze

Levenscyclus uitvoeringsomgeving

  • Init draait één keer per omgeving.
  • Handler draait per aanroep.
  • Tussen runs kan de omgeving bevriezen.
Serverless-toepassingen met AWS Lambda

Optimaliseren voor cold starts

# init (eenmaal per omgeving)
import boto3
s3 = boto3.client('s3')
# handler (elke aanroep)
def lambda_handler(event, context):
    return {"statusCode": 200}

Init één keer vs handler per aanroep

  • Plaats imports en SDK-clients buiten de handler.
Serverless-toepassingen met AWS Lambda

Laten we oefenen!

Serverless-toepassingen met AWS Lambda

Preparing Video For Download...