Perché AWS?
Prima di passare alle domande e risposte, è importante capire perché il cloud AWS è la piattaforma di riferimento: anche questo potrebbe essere oggetto di domanda al colloquio.
Partiamo dal grafico seguente:

Fonte (Statista)
Il grafico mostra il primato di AWS nel mercato globale dei servizi di infrastruttura cloud nel Q2 2023. Con una quota del 32%, AWS è il leader assoluto, ben davanti al suo concorrente più vicino, Microsoft Azure, con il 22%. Altri player importanti come Google Cloud (11%) e Alibaba Cloud (4%) contribuiscono al mercato, ma con quote nettamente inferiori rispetto ad AWS e Azure.
I ricavi totali generati dai servizi di infrastruttura cloud nel Q2 2023, pari a 65 miliardi di dollari, sottolineano ulteriormente la crescente importanza e rilevanza economica di questo mercato. La posizione di vertice di AWS in questo settore in forte crescita ne rafforza l’importanza strategica per le aziende che cercano soluzioni cloud affidabili e scalabili.
Se vuoi approfondire il confronto tra i diversi provider cloud, consulta questo cheat sheet sul Confronto tra i servizi di AWS, Azure e GCP.
Sebbene gli aspetti finanziari siano importanti, l’appeal di AWS va oltre la quota di mercato e comprende un’ampia gamma di servizi, affidabilità, scalabilità, copertura globale, sicurezza robusta, innovazione continua e una community di supporto. Questi fattori rendono la competenza su AWS una skill molto richiesta nel settore tech, aprendo numerose opportunità di carriera a chi padroneggia questa piattaforma cloud leader.
Vediamo alcune domande da colloquio!
Domande base su AWS Lambda
Cominciamo dalle basi. Che tu sia alle prime armi con AWS Lambda o stia solo ripassando, questi fondamentali ti prepareranno ad approfondirne le funzionalità.
1. Che cos’è AWS Lambda?
AWS Lambda è un servizio di calcolo serverless che ti permette di eseguire codice senza effettuare il provisioning o la gestione di server. Lambda esegue il codice solo quando serve e si scala automaticamente, da poche richieste al giorno a migliaia al secondo.
2. Quali sono i componenti principali di una funzione Lambda?
I componenti principali di una funzione Lambda sono:
- Handler: È il punto di ingresso della funzione, un metodo nel codice che elabora l’evento di invocazione. Puoi vederlo come la funzione "main" del codice Lambda.
- Event: È l’input in formato JSON che attiva l’esecuzione della funzione. Contiene le informazioni su ciò che ha avviato la chiamata della funzione.
- Context: È un oggetto che contiene informazioni di runtime sull’ambiente di esecuzione della funzione. Include dettagli come nome della funzione, versione, limiti di memoria, ID della richiesta e tempo di esecuzione residuo.
- Variabili d’ambiente: Coppie chiave-valore che puoi impostare per configurare il comportamento della funzione Lambda senza modificare il codice. Spesso si usano per memorizzare chiavi API, credenziali del database o altre impostazioni.
3. Quali linguaggi supporta Lambda?
Lambda supporta nativamente Node.js, Python, Ruby, Java, Go, C# e PowerShell. Significa che possiamo scrivere direttamente le nostre funzioni Lambda in questi linguaggi senza configurazioni aggiuntive.
Inoltre, Lambda consente di usare runtime personalizzati, offrendo la flessibilità di impacchettare codice e dipendenze in un’immagine container. Questo abilita il supporto a praticamente qualsiasi linguaggio di programmazione, permettendoci di scegliere lo strumento più adatto alle nostre esigenze.
4. Come si crea una funzione Lambda?
Ci sono diversi modi per creare funzioni Lambda:
|
Metodo |
Descrizione |
Ideale per |
|
Console Lambda |
Scrivi il codice direttamente nell’editor del browser. |
Funzioni semplici, test rapidi |
|
Pacchetto di distribuzione |
Impacchetta codice e dipendenze in un archivio ZIP e caricalo. |
Progetti più grandi, funzioni complesse |
|
Immagine container |
Impacchetta la funzione come immagine container Docker. |
Runtime personalizzati, configurazioni specifiche |
|
Infrastructure-as-Code |
Definisci funzioni e risorse in codice dichiarativo usando AWS SAM, CloudFormation o CDK. |
Gestione di app serverless complesse, automazione |
5. In quali modi si può invocare una funzione Lambda?
Possiamo invocare le funzioni Lambda in vari modi:
- Invocazione sincrona: Il client attende che la funzione termini ed esca con una risposta.
- Invocazione asincrona: Il client non attende la risposta: Lambda esegue la funzione in background.
- Event source mapping: Lambda interroga automaticamente servizi come DynamoDB o Kinesis e invoca le funzioni in base agli eventi.
- Altri metodi: Includono API Gateway, gli SDK AWS o invocazioni pianificate tramite Amazon EventBridge.
Domande intermedie su AWS Lambda
1. Come distribuiamo le dipendenze insieme al codice Lambda?
Ci sono alcune opzioni per impacchettare le dipendenze con il codice Lambda:
- Inclusione diretta: Per i linguaggi interpretati, possiamo inserire i file delle dipendenze insieme al codice della funzione nel pacchetto di distribuzione .zip.
- Lambda layer: Per linguaggi compilati o dipendenze di grandi dimensioni, possiamo usare i layer Lambda per impacchettare e condividere separatamente dipendenze comuni tra funzioni.
- Immagini container: Possiamo anche impacchettare le dipendenze in immagini container insieme al codice della funzione Lambda e a un runtime personalizzato.
2. Come possiamo ottimizzare le prestazioni delle funzioni Lambda?
Abbiamo diverse opzioni per ottimizzare le funzioni Lambda:
- Allocazione della memoria: Scegliere la dimensione di memoria corretta è fondamentale per bilanciare costi e prestazioni. Strumenti come AWS Lambda Power Tuning aiutano a trovare la configurazione ottimale.
- Dimensione del pacchetto: Pacchetti più piccoli riducono i cold start (il tempo necessario a inizializzare una funzione Lambda alla prima invocazione). Minimizza la dimensione rimuovendo dipendenze inutili e comprimendo il codice.
- Lambda SnapStart: Questa funzionalità pre-inizializza gli ambienti di esecuzione, riducendo sensibilmente i tempi di cold start per runtime specifici.
- Provisioned concurrency: Configura la concurrency pre-provisionata per mantenere calde le istanze della funzione, garantendo tempi di risposta costanti per carichi critici.
- Timeout e limiti di concorrenza: Imposta timeout appropriati e concorrenza riservata per evitare funzioni fuori controllo e mantenere un ambiente Lambda stabile.
3. Quali strumenti puoi usare per monitorare e fare debug delle funzioni Lambda?
Lambda invia automaticamente metriche ad Amazon CloudWatch, tra cui numero di richieste, latenza, tassi di errore e altro.
Possiamo usare i CloudWatch Logs per accedere ai log generati dal codice della funzione e dal runtime Lambda.
Per tracciare e risolvere problemi di prestazioni in applicazioni Lambda distribuite, possiamo usare AWS X-Ray.
4. A cosa servono le estensioni Lambda?
Le estensioni Lambda permettono di migliorare le funzioni integrandole con strumenti di monitoraggio, osservabilità, sicurezza e governance.
Le estensioni possono essere eseguite come processi separati nell’ambiente di esecuzione per catturare informazioni diagnostiche o inviare dati a destinazioni personalizzate.
Esempi includono l’estensione Datadog per metriche e tracce e l’estensione AWS AppConfig per aggiornamenti di configurazione dinamici.
5. Che cos’è un event source mapping?
Un event source mapping è una risorsa Lambda che legge elementi da una sorgente di eventi e invoca una funzione.
Possiamo usare gli event source mapping per elaborare elementi da stream Amazon DynamoDB, stream Amazon Kinesis, code Amazon MQ, Apache Kafka gestito in proprio, code Amazon SQS e altro.
Lambda fornisce un meccanismo di polling per leggere batch di record dalle sorgenti di eventi e invocare una funzione.
Domande avanzate su AWS Lambda
1. Come controlli l’accesso alle funzioni Lambda?
AWS Lambda usa IAM (Identity and Access Management) per controllare l’accesso su due livelli:
- Policy basate sulle risorse specificano quali account, servizi e risorse AWS possono invocare la funzione.
- Ruolo di esecuzione della funzione: determina a quali servizi e risorse AWS può accedere il codice della funzione. Seguendo il principio del privilegio minimo, queste policy dovrebbero essere il più restrittive possibile pur consentendo alla funzione di svolgere i suoi compiti.
2. Come puoi ridurre al minimo i cold start in Lambda?
I cold start avvengono quando Lambda deve inizializzare un nuovo ambiente di esecuzione per elaborare una richiesta di invocazione. Per ridurli e migliorare la reattività della funzione, possiamo adottare varie strategie:
- Usare SnapStart: Questa funzionalità (disponibile per alcuni runtime) consente di mantenere ambienti inizializzati, riducendo sensibilmente i tempi di avvio per le invocazioni successive.
- Abilitare la concurrency pre-provisionata: Mantenendo un pool di ambienti inizializzati pronti, possiamo eliminare i cold start per carichi prevedibili.
- Ottimizzare la dimensione del pacchetto: Ridurre le dimensioni del pacchetto funzione rimuovendo dipendenze superflue e ottimizzando il codice accelera il processo di inizializzazione.
- Scelta del linguaggio: Scegliere linguaggi come Go o Rust, noti per tempi di avvio più rapidi rispetto ai linguaggi su JVM, può aiutare a mitigare i ritardi da cold start.
- Riutilizzo del contesto di esecuzione: Tenere separato il codice della funzione dalla logica di setup iniziale consente di riutilizzare il contesto di esecuzione tra invocazioni, riducendo ulteriormente l’overhead.
3. Quali sono alcune best practice comuni per la sicurezza delle API con Lambda?
Quando esponi funzioni Lambda tramite API Gateway, alcune best practice di sicurezza includono:
- Usare IAM o gli authorizer Lambda per autenticare e autorizzare le richieste.
- Abilitare le user pool di Amazon Cognito per la gestione degli utenti.
- Definire policy sulle risorse per consentire o negare l’accesso in base a proprietà della richiesta, come gli IP di origine.
- Configurare mTLS per una comunicazione sicura client-server.
- Usare AWS WAF per proteggersi dai comuni exploit web rivolti alle API.
4. Quali sono le differenze tra immagini container di Lambda e pacchetti di distribuzione .zip?
Le immagini container per Lambda consentono di impacchettare codice e dipendenze in un formato container compatibile con OCI. Confrontiamo le immagini container con i pacchetti di distribuzione .zip:
|
Caratteristica |
Immagini container |
Pacchetti di distribuzione .zip |
|
Flessibilità del runtime |
Porta il tuo runtime (qualsiasi linguaggio o versione) |
Limitato ai runtime predefiniti di Lambda |
|
Dimensione della distribuzione |
Fino a 10 GB |
Fino a 250 MB (non compresso) |
|
Distribuzione & Cold start |
Distribuzioni più lente e potenzialmente latenza di cold start più alta |
Distribuzioni più rapide e in genere latenza di cold start più bassa |
|
Strumenti & Workflow |
Integrazione fluida con i nostri strumenti e workflow per container |
Può richiedere strumenti aggiuntivi per la gestione delle dipendenze e la distribuzione |
|
Ideale per |
Applicazioni con dipendenze grandi o requisiti di runtime personalizzati |
Applicazioni più piccole e compatibili con i runtime predefiniti di Lambda |
5. Le funzioni Lambda possono chiamare altre funzioni Lambda?
Sì, le funzioni Lambda possono invocare direttamente altre funzioni usando l’AWS SDK. Casi d’uso comuni includono orchestrazione di funzioni, aggregazione di risultati da più funzioni e fan-out dell’elaborazione di eventi.
Quando una funzione Lambda ne invoca un’altra, la policy basata sulle risorse della funzione invocata deve concedere esplicitamente l’accesso per consentire l’invocazione dalla funzione chiamante.
Domande pratiche su AWS Lambda
1. Come implementi una semplice REST API usando Lambda e API Gateway?
Possiamo implementare una semplice REST API usando Lambda e API Gateway seguendo questi passaggi:
- Crea una funzione Lambda: sviluppa una funzione Lambda che riceva l’input da API Gateway come oggetto event e restituisca un oggetto di risposta con dati e codici di stato.
- Crea un API Gateway: nell’API Gateway, creiamo una nuova REST API con una risorsa e un metodo corrispondenti al percorso dell’API e al metodo HTTP.
- Configura l’integrazione: configuriamo il tipo di integrazione del metodo come Lambda proxy e specifichiamo la funzione da invocare
- Distribuisci l’API: distribuisci l’API per generare un endpoint URL pubblico.
- Testa a fondo: Possiamo usare strumenti come cURL o Postman per verificare che l’API funzioni correttamente, con la funzione Lambda che gestisce le richieste e restituisce le risposte appropriate.
2. Come configuri una funzione Lambda per elaborare eventi da un bucket S3?
Possiamo configurare una funzione Lambda per elaborare eventi da un bucket S3 seguendo questi passaggi:
- Creiamo una funzione Lambda con le autorizzazioni appropriate per accedere al bucket S3.
- Nella console S3, configuriamo una notifica di evento sul bucket di origine.
- Scegliamo i tipi di evento che attiveranno la notifica, come creazione o eliminazione di oggetti.
- Specifichiamo la funzione Lambda come destinazione della notifica.
- Testiamo eseguendo azioni sul bucket S3 che corrispondono ai tipi di evento configurati.
- Verifichiamo che la funzione Lambda venga invocata con un evento contenente i dettagli dell’azione S3.
3. Come configuri una funzione Lambda per scrivere dati in una tabella DynamoDB?
Possiamo configurare una funzione Lambda per scrivere dati in una tabella DynamoDB seguendo questi sei passaggi:
- Creiamo una tabella DynamoDB con una chiave primaria appropriata e gli eventuali indici secondari richiesti.
- Creiamo un ruolo IAM per la funzione Lambda con i permessi per accedere a DynamoDB.
- Creiamo una funzione Lambda e alleghiamo il ruolo IAM.
- Usiamo l’SDK di DynamoDB per creare un’istanza di client con il nome della tabella.
- Usiamo il metodo
put_itemper scrivere elementi nella tabella, specificando gli attributi chiave e gli altri campi. - Testiamo la funzione con eventi di esempio e usiamo query DynamoDB per verificare che i dati siano scritti correttamente.
4. Come implementi una funzione Lambda pianificata?
Possiamo implementare una funzione Lambda pianificata seguendo questi passaggi:
- Crea una funzione Lambda per eseguire l’attività desiderata a intervalli regolari.
- Apri la console Amazon EventBridge e crea una nuova regola.
- Definisci un’espressione di pianificazione per la regola usando la sintassi rate o cron.
- Seleziona la funzione Lambda come target della regola.
- Salva la regola e testa attendendo il prossimo evento pianificato.
- Verifica l’esecuzione della funzione nelle metriche e nei log di CloudWatch.
5. Come sposti gradualmente il traffico verso una nuova versione di una funzione Lambda?
Per spostare gradualmente il traffico verso una nuova versione di una funzione Lambda, procediamo così:
- Pubblica una nuova versione della funzione Lambda con il codice aggiornato.
- Crea un alias che punti alla versione stabile precedente.
- Aggiorna l’alias per suddividere il traffico tra la versione vecchia e quella nuova usando pesi (ad esempio, 90/10).
- Regola gradualmente i pesi per inviare più traffico alla nuova versione monitorando le metriche.
- Quando sei soddisfatto, aggiorna l’alias per inviare il 100% del traffico alla nuova versione.
- Ripeti il processo per il prossimo aggiornamento della funzione, trattando la versione precedente come la nuova versione stabile.
Conclusione
Queste comuni domande su AWS Lambda verificano la comprensione dei concetti chiave di Lambda, delle best practice e dei modelli d’uso pratici.
È importante ricordare che l’esperienza pratica nella creazione e gestione di applicazioni Lambda è inestimabile per consolidare questi concetti.
Per approfondire, dai un’occhiata a questi due corsi:
Un data scientist poliedrico che ama condividere le proprie conoscenze e restituire valore agli altri, Zoumana è un content creator su YouTube e un top writer tech su Medium. Trova soddisfazione nel parlare in pubblico, programmare e insegnare. Zoumana ha due lauree magistrali: la prima in informatica con specializzazione in Machine Learning conseguita a Parigi, Francia, e la seconda in Data Science alla Texas Tech University negli Stati Uniti. Ha iniziato la sua carriera come Software Developer presso Groupe OPEN in Francia, per poi passare a IBM come Machine Learning Consultant, dove ha sviluppato soluzioni di IA end-to-end per compagnie assicurative. Successivamente, è entrato in Axionable, la prima startup di Sustainable AI con sede a Parigi e Montréal. Lì ha lavorato come Data Scientist e ha implementato prodotti di IA, principalmente casi d’uso di NLP, per clienti in Francia, Montréal, Singapore e Svizzera. Inoltre, ha dedicato il 5% del suo tempo ad attività di Ricerca e Sviluppo. Attualmente lavora come Senior Data Scientist presso IFC - World Bank Group.



Uno dei servizi AWS più importanti da conoscere è AWS Lambda, un servizio di calcolo serverless che esegue codice in risposta a eventi e gestisce automaticamente le risorse sottostanti.
Con la crescente adozione di Lambda, è normale imbattersi in domande su AWS Lambda nei colloqui tecnici.
Questa guida semplifica la preparazione ai colloqui su AWS Lambda fornendo un elenco curato di domande e risposte. Partiamo dalle basi e arriviamo a scenari avanzati e pratici.
Se vuoi saperne di più su AWS, dai un’occhiata a questo corso su Tecnologie e servizi del cloud AWS.