Corso
AWS Lambda è un potente servizio di calcolo serverless che ti permette di eseguire codice senza gestire l'infrastruttura, così puoi concentrarti solo sulla scrittura del codice senza preoccuparti del provisioning o della manutenzione dei server.
In questo tutorial esploreremo AWS Lambda, dalla creazione della tua prima funzione all'integrazione con altri servizi AWS. Che tu stia elaborando flussi di dati o costruendo API, questa guida ti aiuterà a iniziare con i deployment serverless usando AWS Lambda.
Cos'è AWS Lambda?
AWS Lambda è una piattaforma di calcolo serverless fornita da Amazon Web Services (AWS) che consente agli sviluppatori di eseguire codice senza effettuare il provisioning o gestire server. AWS Lambda gestisce questo aspetto allocando dinamicamente le risorse per eseguire le tue funzioni solo quando necessario, addebitandoti i costi in base all'utilizzo piuttosto che alla capacità del server pre-allocata.
Questo approccio allo sviluppo di applicazioni elimina la necessità di configurare un'infrastruttura tradizionale, permettendoti di concentrarti esclusivamente sulla scrittura e il deployment del codice.
AWS Lambda è event-driven, cioè viene attivato da eventi specifici provenienti da altri servizi AWS, il che lo rende ideale per creare soluzioni reattive, scalabili ed economiche.
I metodi di deployment tradizionali richiedono la configurazione e la gestione dei server, che comporta scaling, aggiornamenti e patch. Queste attività possono essere dispendiose in termini di tempo, costose e meno efficienti per carichi di lavoro sporadici. Al contrario, il deployment serverless elimina questi overhead, offrendo scaling automatico e alta disponibilità nativa.
Funzionalità di AWS Lambda
- Architettura event-driven: le funzioni AWS Lambda vengono invocate in risposta a eventi come modifiche ai dati, richieste HTTP o aggiornamenti delle risorse AWS.
- Supporto per più runtime: Lambda supporta diversi runtime, tra cui Python, Node.js, Java, Go, Ruby e .NET. Gli sviluppatori possono anche portare il proprio runtime usando l'AWS Lambda Runtime API, rendendolo una piattaforma versatile per casi d'uso diversi.
- Scalabilità automatica: AWS Lambda scala automaticamente la tua applicazione in base alla domanda. Che si tratti di elaborare un singolo evento o gestirne migliaia contemporaneamente, Lambda adatta dinamicamente le risorse di calcolo.
- Prezzi pay-as-you-go: i costi sono determinati dal numero di richieste e dal tempo di esecuzione delle funzioni. Questo elimina la necessità di investimenti iniziali e garantisce che tu paghi solo ciò che usi.
- Sicurezza integrata: Lambda lavora con AWS Identity and Access Management (IAM), garantendo un controllo degli accessi granulare e interazioni sicure tra le tue funzioni e altri servizi AWS.
Casi d'uso comuni di Lambda
- Elaborazione di data stream: AWS Lambda si integra con Amazon Kinesis per elaborare e analizzare dati in streaming in tempo reale. Ad esempio, puoi monitorare dispositivi IoT o elaborare file di log dinamicamente.
- Creazione di API RESTful: le funzioni Lambda possono essere abbinate ad AWS API Gateway per creare API scalabili per applicazioni web e mobile. Questa configurazione è comunemente utilizzata per gestire l'autenticazione degli utenti, interrogare database o generare contenuti dinamici.
- Automazione dei workflow: automatizza workflow complessi attivando funzioni Lambda in base agli eventi di servizi come S3, DynamoDB o CloudWatch. Ad esempio, puoi ridimensionare immagini caricate su S3 o archiviare automaticamente vecchi record di database.
- Gestione eventi nelle pipeline di dati: puoi usare Lambda per gestire eventi dati in tempo reale, come l'elaborazione di nuovi upload in un bucket S3, la trasformazione dei dati prima dell'archiviazione o l'arricchimento dei flussi con chiamate API esterne.
- Elaborazione backend serverless: Lambda è comunemente usato per scaricare attività backend come validazione dei dati, processi di ETL (Extract, Transform, Load) o l'invio di notifiche tramite Amazon SNS o SES.
Come funziona AWS Lambda?
AWS Lambda opera su un modello event-driven, ovvero esegue codice in risposta a trigger o eventi specifici. La chiave del funzionamento di Lambda è la sua integrazione con altri servizi AWS e la capacità di eseguire funzioni on demand. Vediamo nel dettaglio, passo dopo passo, come funziona AWS Lambda:

Esempio di diagramma architetturale che usa Lambda e altri servizi core AWS. Fonte immagine: AWS.
1. Attivazione delle funzioni AWS Lambda
Le funzioni AWS Lambda vengono avviate da eventi provenienti da vari servizi AWS o sistemi esterni. Ecco alcuni esempi comuni di sorgenti evento:
- API Gateway: quando un utente invia una richiesta HTTP (ad esempio, una richiesta GET o POST) al tuo endpoint API Gateway, Lambda può eseguire una funzione per elaborare la richiesta, ad esempio un endpoint API RESTful per creare un utente in un database.
- Eventi S3: le funzioni Lambda possono rispondere ad azioni come il caricamento, l'eliminazione o la modifica di un oggetto in un bucket S3. Ad esempio, possono ridimensionare immagini o convertire formati di file dopo il caricamento di un'immagine su un bucket S3.
- Stream di DynamoDB: qualsiasi modifica alle tabelle DynamoDB, come inserimenti, aggiornamenti o eliminazioni, può attivare una funzione Lambda. Per esempio, l'attivazione di una pipeline di analytics quando vengono aggiunte nuove righe a una tabella DynamoDB.
- Applicazioni personalizzate: puoi invocare direttamente le funzioni Lambda usando SDK, CLI o richieste HTTP, consentendoti di integrarti con sistemi esterni.
2. Ambiente di esecuzione
Quando un evento attiva una funzione Lambda, AWS crea automaticamente un ambiente di esecuzione per eseguire il codice. Questo ambiente include:
- Il tuo codice funzione: il codice che hai scritto per il tuo compito specifico.
- Risorse allocate: CPU e memoria (configurabili) vengono assegnate dinamicamente in base alle esigenze della funzione.
- Dipendenze: eventuali librerie o pacchetti esterni specificati durante il deployment sono inclusi.
3. Concurrency e scaling
AWS Lambda supporta lo scaling automatico eseguendo più istanze della tua funzione in parallelo. Gestisce lo scaling in modo trasparente senza alcuna configurazione. Ecco come funziona la concurrency:
- Se la tua funzione deve elaborare 100 eventi contemporaneamente, Lambda creerà tanti ambienti di esecuzione quanti necessari (fino al limite di concurrency).
4. Integrazione con altri servizi AWS
AWS Lambda si integra profondamente con i servizi AWS per creare soluzioni robuste end-to-end:
- Interazioni con database: Lambda può leggere/scrivere dati su DynamoDB o RDS durante l'esecuzione.
- Servizi di messaggistica: Lambda può attivare notifiche tramite SNS o inviare messaggi a code SQS per l'elaborazione a valle.
- Monitoraggio e logging: CloudWatch acquisisce tutti i log, le metriche e i dettagli degli errori per le funzioni Lambda, consentendoti di monitorare e risolvere problemi di performance.
Ora iniziamo a configurare la tua prima funzione Lambda!
Configurazione di AWS Lambda
Prerequisiti
- Account AWS: assicurati di avere un account AWS attivo. Registrati qui.
- Configurazione utente IAM: crea un utente IAM con permessi per AWS Lambda. Segui la guida IAM.
Impostazione dell'ambiente di sviluppo
- Installa AWS CLI: Scarica e installa AWS CLI. Configurala usando le tue credenziali IAM.
- Configura Python o Node.js: installa Python o Node.js in base al runtime che preferisci. AWS Lambda supporta più runtime. In questo tutorial useremo il runtime Python.
Passo 1: Accedi alla console AWS Lambda
- Accedi alla AWS Management Console.
- Vai al servizio Lambda.

Cruscotto di navigazione nella console AWS.
Fai clic su Lambda nel menu di navigazione per vedere il dashboard:

Dashboard AWS Lambda nella console AWS.
Passo 2: Crea una nuova funzione
- Clicca Create Function.
- Scegli "Author from Scratch".
- Assegna un nome alla tua funzione.
- Seleziona un runtime (ad es., Python 3.11).
- Clicca sul pulsante Create Function.

Crea una nuova funzione AWS Lambda.
Serviranno pochi secondi. Una volta creata la funzione, vedrai un messaggio di conferma in alto.
Passo 3: Scrivi il codice della funzione

IDE di AWS Lambda nel browser per semplici modifiche al codice.
Passo 4: Testa la tua funzione Lambda
A questo punto, questa funzione restituisce semplicemente la stringa "Hello from Lambda!".
Non c'è logica, nessuna dipendenza, niente.
Abbiamo uno script Python chiamato lambda_function.py che contiene la funzione lambda_handler() che restituisce una stringa.
Ora possiamo testarla semplicemente cliccando sul pulsante Test.

Testa la tua funzione AWS Lambda nel browser.
Puoi rimuovere l'"Event JSON" perché la nostra funzione non accetta input. Dai un nome all'evento e clicca sul pulsante Invoke.

Test della funzione AWS Lambda riuscito.
La funzione è stata eseguita correttamente ed è stato restituito il messaggio.
Yay! Abbiamo appena effettuato il deployment di una funzione serverless usando AWS Lambda. Al momento non fa molto, ma è attiva e funzionante. Ogni volta che questa funzione viene invocata, restituisce una semplice stringa.
Attivare Lambda con eventi
Come accennato, l'architettura di AWS Lambda ti permette di attivare funzioni in risposta a eventi specifici da vari servizi AWS, rendendolo uno strumento versatile per automatizzare workflow e integrare sistemi.
Eventi come il caricamento di file in un bucket S3, aggiornamenti in una tabella DynamoDB o chiamate API tramite API Gateway possono invocare funzioni Lambda, abilitando l'elaborazione in tempo reale e un'esecuzione scalabile.
1. Configurare un trigger S3
- Vai alla console S3.
- Seleziona il bucket S3.
- In Proprietà, aggiungi una notifica evento per attivare la tua funzione Lambda alla creazione di un oggetto.
Crea una notifica evento nel bucket AWS S3.
Seleziona la funzione Lambda da attivare in S3.
Esempi di utilizzo:
-
- Ridimensiona automaticamente le immagini caricate su S3.
- Converti i video in più risoluzioni o formati per lo streaming.
- Verifica formati, dimensioni o metadati dei file al momento del caricamento.
- Usa l'AI per estrarre testo dai documenti caricati (ad es., tramite Amazon Textract).
2. Integrazione con API Gateway
- Vai al servizio API Gateway.

Dashboard del servizio API Gateway nella console AWS.
- Crea una nuova REST API.

Crea una nuova REST API tramite API Gateway.
- Configura un metodo (ad es., POST) per attivare la tua funzione Lambda.
Esempi di utilizzo:
-
- Costruisci un'API serverless per risposte in tempo reale.
- Attiva una funzione Lambda per creare e archiviare i dati utente in un database.
- Gestisci richieste POST per elaborare e validare ordini dei clienti in tempo reale
- Attiva una funzione Lambda per interrogare e restituire dati da un database o un'API.
Deployment e monitoraggio di AWS Lambda
Il deployment delle funzioni AWS Lambda è semplice e può essere effettuato con metodi diversi a seconda delle esigenze, come la AWS Management Console per deployment manuali o la AWS CLI per deployment automatizzati.
1. Deployment manuale tramite AWS Console
La AWS Management Console offre un'interfaccia web intuitiva per effettuare il deployment delle funzioni Lambda. Questo metodo è ideale per progetti piccoli o modifiche rapide. Ecco come effettuare il deployment di una funzione Lambda tramite console:
- Crea o modifica una funzione:
- Accedi alla AWS Management Console.
- Vai su AWS Lambda.
- Clicca su Create Function per impostare una nuova funzione o selezionane una esistente da aggiornare.
- Carica il tuo codice:
- Scegli Upload from e seleziona il file .zip o l'immagine container.
- Puoi modificare il codice della funzione direttamente nell'editor integrato per sviluppi su piccola scala.
- Configura la funzione:
- Definisci variabili d'ambiente, memoria allocata e limiti di timeout in base al tuo caso d'uso.
- Aggiungi i permessi necessari usando ruoli AWS IAM per consentire alla funzione di interagire con altri servizi AWS.
- Effettua il deployment delle modifiche:
- Clicca Deploy per salvare e attivare le modifiche.
- Usa la funzione Test per invocare manualmente la funzione e verificare che funzioni come previsto.
2. Deployment automatizzato tramite AWS CLI
La AWS CLI è un modo efficiente per distribuire e aggiornare funzioni Lambda in caso di automazione o aggiornamenti frequenti. Garantisce coerenza e riduce gli errori manuali, soprattutto in progetti più grandi o pipeline CI/CD.
Passo 1 - Prepara il pacchetto di deployment
Impacchetta il tuo codice e le dipendenze in un file .zip. Per esempio:
zip -r my-deployment-package.zip .
Passo 2 - Distribuisci la funzione usando la CLI
Usa il comando update-function-code per caricare il nuovo codice su AWS Lambda:
aws lambda update-function-code \
--function-name MyFunction \
--zip-file fileb://my-deployment-package.zip
Passo 3 - Verifica il deployment
Dopo il deployment, verifica lo stato della funzione usando:
aws lambda get-function --function-name MyFunction
Questo comando recupera la configurazione della funzione e conferma l'avvenuto deployment.
Monitorare Lambda con CloudWatch
Il monitoraggio è fondamentale per garantire che le tue funzioni Lambda funzionino in modo efficiente, gestiscano gli errori con grazia e rispettino le aspettative di performance. AWS Lambda si integra con Amazon CloudWatch per fornire funzionalità di monitoraggio e logging.
Amazon CloudWatch raccoglie e visualizza automaticamente le metriche chiave per le tue funzioni Lambda. Queste metriche ti aiutano ad analizzare le performance della funzione e a risolvere i problemi.
Metriche da monitorare:
- Invocations: traccia il numero di volte in cui la tua funzione viene invocata. Ti aiuta a comprendere i pattern di traffico e le tendenze di utilizzo.
- Errors: mostra il numero di errori durante l'esecuzione della funzione. Usalo per identificare i tassi di fallimento e fare debug.
- Duration: misura il tempo impiegato per eseguire la funzione. È cruciale per ottimizzare le performance e gestire i costi.
- Throttles: mostra il numero di invocazioni limitate a causa del raggiungimento dei limiti di concurrency.
Accesso alle metriche:
- Vai alla CloudWatch Metrics Console.
- Seleziona Lambda dall'elenco dei namespace.
- Scegli la funzione che vuoi monitorare per visualizzare le metriche dettagliate.
Best practice per AWS Lambda
Ora che hai distribuito la tua prima funzione Lambda, è utile conoscere alcune best practice per progetti futuri più complessi. In questa sezione ti propongo alcune buone pratiche da tenere a mente.
1. Ottimizza i cold start delle funzioni
I cold start si verificano quando una funzione Lambda viene invocata dopo un periodo di inattività, causando una leggera latenza mentre AWS prepara l'ambiente di esecuzione. Sebbene AWS riduca al minimo questo overhead, ci sono accorgimenti per ridurre il tempo di cold start:
Usa pacchetti di deployment più piccoli
- Mantieni leggero il pacchetto di deployment includendo solo le dipendenze necessarie.
- Usa strumenti come AWS Lambda Layers per condividere librerie comuni (ad es., AWS SDK) tra funzioni senza includerle nei singoli pacchetti.
- Comprimi e minimizza il codice dove possibile, soprattutto per funzioni basate su JavaScript o Python.
Evita inizializzazioni pesanti nella funzione
Sposta le inizializzazioni che richiedono molte risorse (ad es., connessioni al database, client API o librerie di terze parti) fuori dall'handler della funzione. In questo modo il codice viene eseguito solo una volta per ambiente e riutilizzato tra le invocazioni.
Sfrutta la provisioned concurrency
Per funzioni critiche e sensibili alla latenza, usa la Provisioned Concurrency per mantenere l'ambiente di esecuzione pronto a servire le richieste. Anche se comporta costi aggiuntivi, garantisce bassa latenza per i carichi di lavoro prioritari.
2. Mantieni le funzioni stateless
La statelessness è un principio fondamentale dell'architettura serverless, che garantisce uno scaling fluido dell'applicazione:
Evita di fare affidamento su dati in memoria
Le funzioni Lambda sono effimere, cioè il loro ambiente di esecuzione è temporaneo e potrebbe non persistere tra le invocazioni. Invece di affidarti a variabili in memoria, archivia lo stato in sistemi esterni come DynamoDB, S3 o Redis.
Abilita l'idempotenza
Progetta le funzioni per gestire con grazia eventi duplicati. Usa identificatori univoci per le richieste e controlla log o database per assicurarti che lo stesso evento non venga elaborato più volte.
3. Usa variabili d'ambiente
Le variabili d'ambiente sono un modo sicuro e comodo per configurare le tue funzioni Lambda:
Archivia informazioni sensibili
- Archivia chiavi API, stringhe di connessione al database e altri segreti come variabili d'ambiente. AWS Lambda cifra queste variabili a riposo e le decifra durante l'esecuzione.
- Per maggiore sicurezza, usa AWS Secrets Manager o Systems Manager Parameter Store per gestire i segreti in modo dinamico.
Semplifica la gestione della configurazione
Usa le variabili d'ambiente per gestire configurazioni come i livelli di log, le impostazioni della regione o gli URL dei servizi di terze parti. Questo elimina la necessità di valori hardcoded, rendendo la tua funzione più portabile tra ambienti (ad es., dev, staging, prod).
Conclusione
Questo tutorial ha fornito una guida per iniziare con AWS Lambda, dalla comprensione delle sue funzionalità e casi d'uso al deployment e monitoraggio efficace delle funzioni. Seguendo le best practice, come ottimizzare i cold start, mantenere le funzioni stateless e utilizzare variabili d'ambiente, puoi creare applicazioni serverless robuste e manutenibili.
AWS Lambda è un modo per costruire architetture moderne, event-driven, che si integrano con l'ecosistema AWS. Se vuoi saperne di più, ti consiglio di dare un'occhiata ai corsi AWS di DataCamp.


