AWS Lambda è un potente servizio di calcolo senza server che ti consente di eseguire codice senza gestire l’infrastruttura, così puoi concentrarti esclusivamente sulla scrittura del codice senza preoccuparti di fornire o mantenere server.
In questo tutorial, esploreremo AWS Lambda, dalla configurazione 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 le distribuzioni senza server utilizzando AWS Lambda.
Cosa è AWS Lambda?
AWS Lambda è una piattaforma di calcolo senza server fornita da Amazon Web Services (AWS) che consente agli sviluppatori di eseguire codice senza fornire o gestire server.AWS Lambda facilita questo allocando dinamicamente risorse per eseguire le tue funzioni solo quando necessario, addebitandoti in base all’uso piuttosto che alla capacità del server pre-allocata.
Questo approccio allo sviluppo di applicazioni elimina la necessità di una configurazione di infrastruttura tradizionale, permettendoti di concentrarti esclusivamente sulla scrittura e distribuzione del codice.
AWS Lambda è basato su eventi, il che significa che viene attivato da eventi specifici provenienti da altri servizi AWS, rendendolo ideale per costruire soluzioni reattive, scalabili ed economiche.
I metodi di distribuzione tradizionali richiedono la configurazione e la gestione dei server, che comporta scaling, aggiornamenti e patching. Questi compiti possono richiedere tempo, essere costosi e meno efficienti per carichi di lavoro sporadici. Al contrario, la distribuzione senza server elimina questi oneri, offrendo scalabilità automatica e alta disponibilità fin da subito.
Caratteristiche di AWS Lambda
- Architettura basata su eventi: 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 vari runtime, tra cui Python, Node.js, Java, Go, Ruby e .NET. Gli sviluppatori possono anche utilizzare il proprio runtime tramite l’API di runtime di AWS Lambda, rendendolo una piattaforma versatile per diversi casi d’uso.
- 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 regola dinamicamente le risorse di calcolo.
- Prezzi pay-as-you-go: I costi sono determinati dal numero di richieste e dal tempo di esecuzione delle tue funzioni. Questo elimina la necessità di investimenti iniziali e garantisce che paghi solo per ciò che utilizzi.
- Sicurezza integrata: Lambda lavora con AWS Identity and Access Management (IAM), garantendo un controllo degli accessi dettagliato e interazioni sicure tra le tue funzioni e altri servizi AWS.
Utilizzi comuni di Lambda
- Elaborazione dei flussi di dati: AWS Lambda si integra con Amazon Kinesis per elaborare e analizzare i dati in streaming in tempo reale. Ad esempio, è possibile monitorare dispositivi IoT o elaborare file di log dinamicamente.
- Costruzione di API RESTful: Le funzioni Lambda possono essere abbinate ad AWS API Gateway per creare API scalabili per applicazioni web e mobili. Questa configurazione è comunemente utilizzata per gestire l’autenticazione degli utenti, interrogare database o generare contenuti dinamici.
- Automatizzazione dei flussi di lavoro: Automatizzare flussi di lavoro complessi attivando funzioni Lambda in base agli eventi provenienti da servizi come S3, DynamoDB, o CloudWatch. Ad esempio, puoi ridimensionare immagini caricate su S3 o archiviare automaticamente vecchi record di database.
- Gestione degli eventi nei data pipeline: Puoi utilizzare Lambda per gestire eventi di dati in tempo reale, come il processo di nuovi caricamenti su un bucket S3, la trasformazione dei dati prima della memorizzazione, o l’arricchimento dei flussi di dati con chiamate a API esterne.
- Elaborazione del backend senza server: Lambda è comunemente utilizzato per scaricare compiti di backend come la validazione dei dati (ETL – Estrai, Trasforma, Carica), o l’invio di notifiche tramite Amazon SNS o SES.
Come funziona AWS Lambda?
AWS Lambda opera su un modello basato su eventi, il che significa che esegue codice in risposta a trigger o eventi specifici. La chiave della funzionalità di Lambda è la sua integrazione con altri servizi AWS e la capacità di eseguire funzioni su richiesta. Approfondiamo il funzionamento di AWS Lambda passo dopo passo:
Un esempio di diagramma architetturale che utilizza Lambda e altri servizi core di AWS. Fonte dell’immagine: AWS.
1. Attivazione delle funzioni AWS Lambda
Le funzioni AWS Lambda vengono avviate da eventi di vari servizi AWS o sistemi esterni. Esempi comuni di fonti di eventi includono:
- API Gateway: Quando un utente invia una richiesta HTTP (ad esempio, una richiesta GET o POST) al tuo endpoint di API Gateway, Lambda può eseguire una funzione per elaborare la richiesta, ad esempio, un endpoint API REST per creare un utente in un database.
- Eventi S3: Le funzioni Lambda possono rispondere ad azioni come caricare, eliminare o modificare un oggetto in un bucket S3. Ad esempio, possono ridimensionare le immagini o convertire formati di file dopo che un’immagine è stata caricata in un bucket S3.
- Flussi DynamoDB: Qualsiasi modifica alle tabelle DynamoDB, come inserimenti, aggiornamenti o eliminazioni, può attivare una funzione Lambda. Ad esempio, attivare un flusso di analisi quando nuove righe vengono aggiunte a una tabella DynamoDB.
- Applicazioni personalizzate: È possibile invocare le funzioni Lambda direttamente utilizzando SDK, CLI o richieste HTTP, consentendo di integrarsi 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 codice della tua 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: Qualsiasi libreria o pacchetto esterno specificato durante il deployment è incluso.
3. Concorrenza e scalabilità
AWS Lambda supporta la scalabilità automatica eseguendo più istanze della tua funzione in parallelo. Gestisce la scalabilità in modo trasparente senza alcuna configurazione. Ecco come funziona la concorrenza:
- Se la tua funzione deve elaborare 100 eventi contemporaneamente, Lambda creerà tanti ambienti di esecuzione quanti necessari (fino al limite di concorrenza).
4. Integrazione con altri servizi AWS
AWS Lambda si integra profondamente con i servizi AWS per costruire soluzioni robuste, end-to-end:
- Interazioni con il 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 alle code SQS per l’elaborazione downstream.
- Monitoraggio e logging: CloudWatch cattura tutti i log, le metriche e i dettagli degli errori delle funzioni Lambda, consentendoti di monitorare e risolvere i problemi di prestazioni.
Ora, iniziamo con la configurazione della tua prima funzione Lambda!
Configurazione di AWS Lambda
Prerequisiti
- Account AWS: Assicurati di avere un account AWS attivo. Iscriviti 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. Configuralo usando le tue credenziali IAM.
- Imposta Python o Node.js: Installa Python o Node.js in base al tuo runtime preferito. AWS Lambda supporta più runtime.Utilizzeremo il runtime Python in questo tutorial.
Passo 1: Accedi alla console di AWS Lambda
- Accedi al Console di gestione AWS.
- Naviga verso il servizio Lambda.
Cruscotto di navigazione nella console AWS.
Clicca su Lambda nel menu di navigazione per vedere il cruscotto:
Cruscotto AWS Lambda nella console AWS.
Passo 2: Crea una nuova funzione
- Fare clic Crea Funzione.
- Scegli “Autore da zero”.
- Fornisci un nome per la tua funzione.
- Seleziona un runtime (ad esempio, Python 3.11).
- Fare clic sul Pulsante Crea Funzione.
Crea una nuova funzione AWS Lambda.
Richiederà alcuni secondi. Una volta che la funzione è stata creata, vedrai un messaggio di successo in alto.
Passaggio 3: Scrivi il codice della tua funzione
AWS Lambda browser IDE per la modifica semplice del codice.
Passaggio 4: Testa la tua funzione Lambda
A questo punto, questa funzione restituisce semplicemente la stringa “Hello from Lambda!”.
Non c’è logica, né dipendenze, nulla.
Abbiamo uno script Python chiamato lambda_function.py
che contiene la funzione chiamata lambda_handler()
che restituisce una stringa.
Possiamo ora testarlo semplicemente cliccando il pulsante Test.
Testa la tua funzione AWS Lambda nel browser.
Puoi rimuovere il “Event JSON” poiché la nostra funzione non richiede input. Dai un nome all’evento e clicca sul pulsante Invoke.
Test riuscito della funzione AWS Lambda.
La funzione è stata eseguita con successo e il messaggio è stato restituito.
Yayy! Abbiamo appena distribuito una funzione serverless utilizzando AWS Lambda. Non fa molto al momento, ma è attiva e funzionante. Ogni volta che questa funzione viene invocata, restituisce una semplice stringa.
Attivare Lambda con Eventi
Come accennato, l’architettura AWS Lambda consente di attivare funzioni in risposta a eventi specifici provenienti da vari servizi AWS, rendendolo uno strumento versatile per automatizzare i flussi di lavoro 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 l’esecuzione scalabile.
1. Configurare un trigger S3
- Vai alla console S3.
- Seleziona il bucket S3.
- Sotto Proprietà, aggiungi una notifica di evento per attivare la tua funzione Lambda quando viene creato un oggetto.
Crea notifica di evento nel bucket AWS S3.
Seleziona la funzione Lambda da attivare in S3.
Esempi di casi d’uso:
-
- Ridimensionare automaticamente le immagini caricate su S3.
- Convertire video in più risoluzioni o formati per lo streaming.
- Controllare formati file, dimensioni o metadati durante il caricamento.
- Utilizzare l’IA per estrarre testo da documenti caricati (ad esempio, tramite Amazon Textract).
2. Integrazione con API Gateway
- Passare al servizio API Gateway.
Dashboard del servizio API Gateway nella Console AWS.
- Creare una nuova API REST.
Creare una nuova API REST tramite API Gateway.
- Configurare un metodo (ad esempio, POST) per attivare la tua funzione Lambda.
Esempi di casi d’uso:
-
- Creare un’API serverless per risposte in tempo reale.
- Attivare una funzione Lambda per creare e memorizzare i dati dell’utente in un database.
- Gestire richieste POST per elaborare e convalidare ordini dei clienti in tempo reale
- Attivare una funzione Lambda per interrogare e restituire dati da un database o API.
Implementazione e Monitoraggio delle Lambda AWS
L’implementazione delle funzioni Lambda AWS è semplice e può essere fatta utilizzando diversi metodi a seconda delle esigenze, come ad esempio la Console di Gestione AWS per implementazioni manuali o la AWS CLI per implementazioni automatizzate.
1. Implementazione manuale utilizzando la Console AWS
La Console di Gestione AWS fornisce un’interfaccia web intuitiva per implementare le funzioni Lambda. Questo metodo è ideale per progetti di piccole dimensioni o modifiche rapide. Ecco come implementare una funzione Lambda utilizzando la console:
- Crea o modifica una funzione:
- Accedi alla Console di Gestione AWS.
- Naviga su AWS Lambda.
- Fai clic su Crea Funzione per configurare una nuova funzione o seleziona una funzione esistente da aggiornare.
- Carica il tuo codice:
- Scegli Carica da e seleziona file .zip o immagine del contenitore.
- Puoi modificare direttamente il codice della tua funzione nell’editor di codice integrato per lo sviluppo su piccola scala.
- Configura la funzione:
- Definisci le variabili d’ambiente, l’allocazione di memoria e i limiti di timeout in base al tuo caso d’uso.
- Aggiungi le autorizzazioni necessarie utilizzando i ruoli IAM AWS per consentire alla funzione di interagire con altri servizi AWS.
- Implementa le modifiche:
- Fai clic su Implementa per salvare e attivare le tue modifiche.
- Utilizza la funzione di Test per invocare manualmente la funzione e convalidare che funzioni come previsto.
2. Distribuzione automatizzata utilizzando l’AWS CLI
L’AWS CLI è un modo efficiente per distribuire e aggiornare le funzioni Lambda per automazione o aggiornamenti frequenti. Garantisce coerenza e riduce gli errori manuali, specialmente in progetti più grandi o pipeline CI/CD.
Passo 1 – Prepara il pacchetto di distribuzione
Imballa il tuo codice e le dipendenze in un file .zip. Ad esempio:
zip -r my-deployment-package.zip .
Passo 2 – Distribuisci la funzione utilizzando la CLI
Utilizza 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
–function-name MyFunction \
–zip-file fileb://my-deployment-package.zip
aws lambda get-function --function-name MyFunction
Passo 3 – Controlla la distribuzione
Dopo la distribuzione, verifica lo stato della funzione utilizzando:
Questo comando recupera la configurazione della funzione e conferma il deployment.
Monitoraggio di Lambda con CloudWatch
Il monitoraggio è fondamentale per garantire che le tue funzioni Lambda funzionino in modo efficiente, gestiscano gli errori in modo adeguato e soddisfino le aspettative di prestazione. AWS Lambda si integrates con Amazon CloudWatch per fornire capacità di monitoraggio e registrazione.
- Amazon CloudWatch raccoglie automaticamente e visualizza metriche chiave per le tue funzioni Lambda. Queste metriche ti aiutano ad analizzare le prestazioni della tua funzione e a risolvere i problemi.
- Metriche da monitorare:
- Invocazioni: Tieni traccia del numero di volte in cui la tua funzione viene invocata. Ti aiuta a comprendere i modelli di traffico e le tendenze di utilizzo.
- Errori: Mostra il numero di errori durante l’esecuzione della funzione. Utilizzalo per identificare i tassi di fallimento e risolvere i problemi.
Durata: Misura il tempo impiegato per eseguire la funzione. Questo è cruciale per ottimizzare le prestazioni e gestire i costi.
- Valvole: Mostra il numero di invocazioni che sono state limitate a causa del raggiungimento dei limiti di concorrenza.
- Accesso alle metriche:
- Naviga verso il CloudWatch Metrics Console.
Seleziona Lambda dalla lista dei namespace.
Scegli la funzione che desideri monitorare per visualizzare metriche dettagliate.
Best Practice di AWS Lambda
Ora che hai distribuito la tua prima funzione Lambda, conoscere alcune best practice per progetti futuri, più complessi, è utile. In questa sezione, fornisco alcune best practice da tenere a mente.
1. Ottimizza l’avvio a freddo delle funzioni
- I cold start si verificano quando una funzione Lambda viene invocata dopo un periodo di inattività, portando a una leggera latenza mentre AWS prepara l’ambiente di esecuzione. Anche se AWS riduce al minimo questo sovraccarico, ci sono passaggi che puoi seguire per ridurre il tempo di cold start:
- Usa pacchetti di distribuzione più piccoli
- Mantieni il tuo pacchetto di distribuzione leggero includendo solo le dipendenze necessarie.
Usa strumenti come AWS Lambda Layers per condividere librerie comuni (ad esempio, AWS SDK) tra le funzioni senza includerle nei pacchetti individuali.
Comprimi e minifica il codice dove possibile, specialmente per le funzioni basate su JavaScript o Python.
Evita un’inizializzazione pesante nella tua funzione
Sposta l’inizializzazione intensiva delle risorse (ad esempio, connessioni al database, client API o librerie di terze parti) al di fuori del gestore della funzione. Ciò garantisce che il codice venga eseguito solo una volta per ambiente e riutilizzato attraverso le invocazioni.
Sfrutta la concorrenza prevedibile
Per le funzioni critiche sensibili alla latenza, utilizza la Concorrenza Pianificata per mantenere l’ambiente di esecuzione pronto a gestire le richieste. Sebbene comporti costi aggiuntivi, garantisce una bassa latenza per carichi di lavoro ad alta priorità.
2. Mantieni le funzioni senza stato
La mancanza di stato è un principio fondamentale dell’architettura serverless, garantendo che la tua applicazione si adatti in modo fluido:
Evitare di fare affidamento sui dati in memoria
Le funzioni Lambda sono effimere, il che significa che il loro ambiente di esecuzione è temporaneo e potrebbe non persistere tra le invocazioni. Piuttosto che fare affidamento su variabili in memoria, memorizza le informazioni di stato in sistemi esterni come DynamoDB, S3 o Redis.
Abilitare l’idempotenza
Progetta le tue funzioni in modo da gestire gli eventi duplicati in modo elegante. Utilizza identificatori univoci per le richieste e controlla i log o i database per garantire che lo stesso evento non venga elaborato più volte.
3. Utilizzare le variabili d’ambiente
- Le variabili d’ambiente sono un modo sicuro e conveniente per configurare le tue funzioni Lambda:
- Memorizzare informazioni sensibili
Memorizza chiavi API, stringhe di connessione al database e altri segreti come variabili d’ambiente. AWS Lambda crittografa queste variabili a riposo e le decritta durante l’esecuzione.
Per una maggiore sicurezza, utilizza AWS Secrets Manager o Systems Manager Parameter Store per gestire dinamicamente i segreti.
Semplifica la gestione della configurazione
Usa le variabili d’ambiente per gestire configurazioni come livelli di log, impostazioni di regione o URL di servizi di terze parti. Questo elimina la necessità di valori codificati, rendendo la tua funzione più portabile tra gli ambienti (ad esempio, sviluppo, staging, produzione).
Conclusioni