Jak funguje spouštění Lambda

Serverless Applications with AWS Lambda

Claudio Canales

Senior DevOps Engineer

Automatické spouštění

Event-driven AWS

  • Lambda spustí kód, když nastane událost.
  • Příklad: nahrání do S3 → změna velikosti obrázku.
  • Různé triggery, stejný vzor.
Serverless Applications with AWS Lambda

Čeká na trigger

Idle -> událost -> běh -> stop

  • Idle: nic neběží.
  • Událost: handler se spustí, pak zastaví.

Analogie pohybového světla a Lambda

  • Jako pohybový senzor: čeká, dokud se nespustí.
  • Trigger přepne stav z „vypnuto" na „zapnuto".
Serverless Applications with AWS Lambda

Co je AWS Lambda?

AWS Lambda v kostce

  • Výpočetní služba řízená událostmi.
  • Automaticky škáluje podle zátěže.
  • Platíš jen za skutečný čas běhu.
Serverless Applications with AWS Lambda

Jak Lambda spouští tvůj kód

Průběh spouštění Lambda

  • Zdroj události spustí Lambda.
  • Lambda předá payload události tvému handleru.
  • Handler vrátí výsledek.
Serverless Applications with AWS Lambda

Škálování podle zátěže

Škálování vytváří další prostředí

  • Více událostí: více paralelních spuštění.
  • Lambda vytvoří další prostředí.
  • Cold starty mohou nastat pro každé nové prostředí.
Serverless Applications with AWS Lambda

Funkce handler

def lambda_handler(event, context):
    # Your code here
    return {
        'statusCode': 200,
        'body': 'Hello from Lambda!'
    }
  • event: vstupní payload (JSON).
  • context: metadata prostředí.
  • return: výstup (nebo úspěch/selhání).

Handler přijímá event a context

Serverless Applications with AWS Lambda

Objekt event

Payload události object storage

Událost S3: bucket + klíč objektu.

# event["Records"][0]["s3"]
{
  "bucket": {"name": "my-bucket"},
  "object": {"key": "data.csv"}
}
  • Úkol je stejný: vytáhni, co potřebuješ.

Payload události HTTP požadavku

Událost API: metoda, cesta, tělo.

# API request event
{
  "httpMethod": "POST",
  "path": "/users",
  "body": "{\"name\": \"John\"}"
}
  • Různé triggery, různý JSON.
Serverless Applications with AWS Lambda

Objekt context

def lambda_handler(event, context):
    time_left = (
        context.get_remaining_time_in_millis()
    )
    request_id = context.aws_request_id
  • get_remaining_time_in_millis Zbývající čas do timeoutu.
  • aws_request_id ID požadavku pro sledování v logu.
Serverless Applications with AWS Lambda

Bezstavové spouštění

Warm start – opětovné použití vs. reset

  • Každé spuštění je nezávislé.
  • Opětovné použití prostředí je možné, ne zaručené.
  • Stav ukládej mimo Lambda.
counter = 0

def lambda_handler(event, context):
    global counter
    counter += 1  # may reset
    return counter
Serverless Applications with AWS Lambda

Cold starty

Časová osa cold startu

  • Nové spouštěcí prostředí.
  • Načtení kódu a závislostí.
  • Inicializace, pak spuštění handleru.
Serverless Applications with AWS Lambda

Warm starty

Časová osa warm startu

  • Znovu použije existující prostředí.
  • Přeskočí většinu inicializace.
  • Handler se spustí rychleji.
Serverless Applications with AWS Lambda

Init, invoke, freeze

Životní cyklus spouštěcího prostředí

  • Init proběhne jednou za prostředí.
  • Handler se spustí při každém volání.
  • Mezi voláními může být prostředí zmraženo.
Serverless Applications with AWS Lambda

Optimalizace cold startů

# init (once per env)
import boto3
s3 = boto3.client('s3')
# handler (every invocation)
def lambda_handler(event, context):
    return {"statusCode": 200}

Init jednou vs. handler při každém volání

  • Importy a SDK klienty umísťuj mimo handler.
Serverless Applications with AWS Lambda

Pojďme cvičit!

Serverless Applications with AWS Lambda

Preparing Video For Download...