Integrare Lambda con i servizi AWS

Applicazioni serverless con AWS Lambda

Claudio Canales

Senior DevOps Engineer

Il ciclo di integrazione

  • Evento in ingresso.
  • Logica dell'handler.
  • Chiamata SDK.

Evento -> handler -> ciclo SDK

Applicazioni serverless con AWS Lambda

Trigger vs chiamate SDK

Trigger

  • Decide quando Lambda gira.

Chiamata SDK (dentro l'handler)

  • Legge/scrive servizi come DynamoDB e S3.

Trigger vs chiamata SDK

Applicazioni serverless con AWS Lambda

Un esempio concreto

  • Un file arriva in S3.
  • Parte Lambda.
  • Salva un piccolo record in DynamoDB.

Upload S3 -> Lambda -> DynamoDB

Applicazioni serverless con AWS Lambda

Payload evento: trova ciò che ti serve

{
  "Records": [{
    "s3": {
      "bucket": {"name": "…"},
      "object": {"key": "…"}
    }
  }]
}

Annotazioni sul payload dell'evento S3

Applicazioni serverless con AWS Lambda

Dove si inserisce l'AWS SDK

  • Il tuo codice chiama l'SDK (boto3).
  • L'SDK chiama le API AWS.
  • IAM è il guardiano.

Handler -> SDK -> API AWS

Applicazioni serverless con AWS Lambda

Ruolo di esecuzione = credenziali

  • Credenziali temporanee dal ruolo di esecuzione.
  • Niente access key nel codice.
  • Se il ruolo non può chiamare un'API, la chiamata SDK fallisce.

Il ruolo di esecuzione fornisce le credenziali

Applicazioni serverless con AWS Lambda

Minimo privilegio: limita azioni e risorse

  • Riduce il raggio d'azione dei danni.
  • Concedi solo le azioni e risorse necessarie.
  • Evita i wildcard salvo reale necessità.

Minimo privilegio: azioni e risorse

Applicazioni serverless con AWS Lambda

DynamoDB: scegli l'operazione giusta

  • PutItem scrive.
  • GetItem legge per chiave.
  • Query trova elementi correlati.
  • Preferisci operazioni mirate a scansioni ampie.

Operazioni DynamoDB

Applicazioni serverless con AWS Lambda

S3: lavora con bucket + key

  • Gli oggetti vivono in bucket + key.
  • GetObject recupera il contenuto.
  • PutObject scrive un file derivato.

Bucket e key S3

Applicazioni serverless con AWS Lambda

Metti la config nelle variabili d'ambiente

  • Hardcodare i nomi risorse è fragile.
  • Usa variabili d'ambiente.
  • Distribuisci lo stesso codice in dev e prod.

Configurazione con variabili d'ambiente

Applicazioni serverless con AWS Lambda

Codice SDK: piccolo e testabile

import boto3
ddb = boto3.client("dynamodb")
def handler(event, context):
    ddb.put_item(
        TableName="files",
        Item={"pk": {"S": "1"}},
    )
  • Valida input, chiama l'SDK, restituisci.
  • Testa unitariamente la logica pura.

Handler piccolo con chiamata SDK

Applicazioni serverless con AWS Lambda

Gestisci gli errori SDK con cura

  • All'inizio gli errori di permesso sono comuni.
  • Se una chiamata fallisce, chiarisci il perché.
  • Buoni log rendono il debug più sicuro.

Percorsi di successo e fallimento

Applicazioni serverless con AWS Lambda

Quando IAM è errato, il codice sembra ok

AccessDeniedException
required action denied
  • Correggi prima IAM, poi la logica dell'handler.

Accesso negato

Applicazioni serverless con AWS Lambda

Idempotenza: retry e duplicati sicuri

  • Potresti vedere lo stesso evento due volte.
  • Le chiavi di idempotenza evitano doppi processi.
  • Le scritture condizionali rendono i replay sicuri.

Pattern di idempotenza

Applicazioni serverless con AWS Lambda

Mettere tutto insieme (end-to-end)

  • L'evento S3 porta bucket e key.
  • L'handler li analizza.
  • PutItem scrive metadati su DynamoDB.
  • CloudWatch Logs mostrano cosa è successo.

Riepilogo integrazione end-to-end

Applicazioni serverless con AWS Lambda

Punti chiave

  • Separa trigger da chiamate SDK.
  • Mantieni permessi stretti col ruolo di esecuzione.
  • Rendi la config portabile con le env vars.

Punti chiave d'integrazione

Applicazioni serverless con AWS Lambda

Passons à la pratique !

Applicazioni serverless con AWS Lambda

Preparing Video For Download...