Capire il modello di esecuzione di Lambda

Applicazioni serverless con AWS Lambda

Claudio Canales

Senior DevOps Engineer

Esecuzione automatica

AWS basato su eventi

  • Lambda esegue codice quando avviene un evento.
  • Esempio: upload su S3 -> ridimensiona immagine.
  • Trigger diversi, stesso pattern.
Applicazioni serverless con AWS Lambda

Inattiva finché non è attivata

Idle -> evento -> esegui -> stop

  • Idle: non gira nulla.
  • Evento: l'handler gira, poi si ferma.

Analogia del sensore di movimento per Lambda

  • Come una luce a sensore: inattiva finché non è attivata.
  • Il trigger passa da "off" a "on".
Applicazioni serverless con AWS Lambda

Cos'è AWS Lambda?

AWS Lambda in breve

  • Servizio di calcolo event-driven.
  • Scala automaticamente con la domanda.
  • Paghi solo per il runtime usato.
Applicazioni serverless con AWS Lambda

Come Lambda esegue il tuo codice

Flusso di esecuzione Lambda

  • Un'origine evento attiva Lambda.
  • Lambda passa un payload evento al tuo handler.
  • L'handler restituisce un risultato.
Applicazioni serverless con AWS Lambda

Scaling in base alla domanda

Lo scaling crea più ambienti

  • Più eventi: più invocazioni in parallelo.
  • Lambda avvia più ambienti.
  • Cold start possibili per ogni nuovo ambiente.
Applicazioni serverless con AWS Lambda

La funzione handler

def lambda_handler(event, context):
    # Your code here
    return {
        'statusCode': 200,
        'body': 'Hello from Lambda!'
    }
  • event: payload di input (JSON).
  • context: metadati di runtime.
  • return: output (o successo/errore).

L'handler riceve event e context

Applicazioni serverless con AWS Lambda

L'oggetto event

Payload evento di object storage

Evento S3: bucket + object key.

# event["Records"][0]["s3"]
{
  "bucket": {"name": "my-bucket"},
  "object": {"key": "data.csv"}
}
  • Stesso compito: estrai ciò che serve.

Payload evento di richiesta HTTP

Evento API: metodo, path, body.

# API request event
{
  "httpMethod": "POST",
  "path": "/users",
  "body": "{\"name\": \"John\"}"
}
  • Trigger diversi, JSON diverso.
Applicazioni serverless con AWS Lambda

L'oggetto 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 Tempo rimasto prima del timeout.
  • aws_request_id ID richiesta per tracciare i log.
Applicazioni serverless con AWS Lambda

Esecuzione stateless

Riutilizzo warm start vs reset

  • Ogni invocazione è indipendente.
  • Il riuso è possibile, non garantito.
  • Archivia lo stato fuori da Lambda.
counter = 0

def lambda_handler(event, context):
    global counter
    counter += 1  # può azzerarsi
    return counter
Applicazioni serverless con AWS Lambda

Cold start

Timeline del cold start

  • Nuovo ambiente di esecuzione.
  • Carica codice e dipendenze.
  • Esegue init, poi handler.
Applicazioni serverless con AWS Lambda

Warm start

Timeline del warm start

  • Riusa l'ambiente esistente.
  • Salta gran parte dell'init.
  • L'handler parte prima.
Applicazioni serverless con AWS Lambda

Init, invoke, freeze

Ciclo di vita dell'ambiente di esecuzione

  • L'init gira una volta per ambiente.
  • L'handler gira a ogni invocazione.
  • Tra le esecuzioni, l'ambiente può congelarsi.
Applicazioni serverless con AWS Lambda

Ottimizzare i cold start

# init (una volta per ambiente)
import boto3
s3 = boto3.client('s3')
# handler (a ogni invocazione)
def lambda_handler(event, context):
    return {"statusCode": 200}

Init una volta vs handler per invocazione

  • Metti import e client SDK fuori dall'handler.
Applicazioni serverless con AWS Lambda

Let's practice!

Applicazioni serverless con AWS Lambda

Preparing Video For Download...