Înțelegerea modelului de execuție Lambda

Aplicații serverless cu AWS Lambda

Claudio Canales

Senior DevOps Engineer

Execuție automată

AWS bazat pe evenimente

  • Lambda rulează cod când apare un eveniment.
  • Exemplu: upload S3 -> redimensionare imagine.
  • Triggere diferite, același tipar.
Aplicații serverless cu AWS Lambda

Inactiv până la declanșare

Inactiv -> eveniment -> rulare -> oprire

  • Inactiv: nimic nu rulează.
  • Eveniment: handlerul rulează, apoi se oprește.

Analogie senzor de mișcare pentru Lambda

  • Ca un senzor de mișcare: inactiv până la declanșare.
  • Triggerul comută din "oprit" în "pornit".
Aplicații serverless cu AWS Lambda

Ce este AWS Lambda?

AWS Lambda pe scurt

  • Serviciu de calcul bazat pe evenimente.
  • Se scalează automat cu cererea.
  • Plătești doar pentru timpul de execuție folosit.
Aplicații serverless cu AWS Lambda

Cum execută Lambda codul tău

Fluxul de execuție Lambda

  • O sursă de evenimente declanșează Lambda.
  • Lambda transmite un payload de eveniment handlerului tău.
  • Handlerul returnează un rezultat.
Aplicații serverless cu AWS Lambda

Scalare cu cererea

Scalarea creează mai multe medii

  • Mai multe evenimente: mai multe invocări paralele.
  • Lambda pornește medii suplimentare.
  • Cold start-urile pot apărea pentru fiecare mediu nou.
Aplicații serverless cu AWS Lambda

Funcția handler

def lambda_handler(event, context):
    # Your code here
    return {
        'statusCode': 200,
        'body': 'Hello from Lambda!'
    }
  • event: payload de intrare (JSON).
  • context: metadate de execuție.
  • return: rezultat (sau succes/eșec).

Handlerul primește event și context

Aplicații serverless cu AWS Lambda

Obiectul event

Payload eveniment object storage

Eveniment S3: bucket + cheie obiect.

# event["Records"][0]["s3"]
{
  "bucket": {"name": "my-bucket"},
  "object": {"key": "data.csv"}
}
  • Același scop: extrage ce ai nevoie.

Payload eveniment cerere HTTP

Eveniment API: metodă, cale, corp.

# API request event
{
  "httpMethod": "POST",
  "path": "/users",
  "body": "{\"name\": \"John\"}"
}
  • Triggere diferite, JSON diferit.
Aplicații serverless cu AWS Lambda

Obiectul 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 Timp rămas până la timeout.
  • aws_request_id ID cerere pentru trasarea logurilor.
Aplicații serverless cu AWS Lambda

Execuție fără stare

Warm start: reutilizare vs. resetare

  • Fiecare invocare este independentă.
  • Reutilizarea e posibilă, nu garantată.
  • Stochează starea în afara Lambda.
counter = 0

def lambda_handler(event, context):
    global counter
    counter += 1  # may reset
    return counter
Aplicații serverless cu AWS Lambda

Cold start-uri

Cronologie cold start

  • Mediu de execuție nou.
  • Încărcare cod și dependențe.
  • Rulare inițializare, apoi handler.
Aplicații serverless cu AWS Lambda

Warm start-uri

Cronologie warm start

  • Reutilizare mediu existent.
  • Se sare peste cea mai mare parte a inițializării.
  • Handlerul pornește mai repede.
Aplicații serverless cu AWS Lambda

Init, invocare, înghețare

Ciclul de viață al mediului de execuție

  • Init rulează o singură dată per mediu.
  • Handlerul rulează la fiecare invocare.
  • Între rulări, mediul poate fi înghețat.
Aplicații serverless cu AWS Lambda

Optimizarea pentru cold start-uri

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

Init o dată vs. handler la fiecare invocare

  • Plasează importurile și clienții SDK în afara handlerului.
Aplicații serverless cu AWS Lambda

Hai să exersăm!

Aplicații serverless cu AWS Lambda

Preparing Video For Download...