Come funziona Lambda - AWS Lambda

Come funziona Lambda

Le funzioni Lambda sono gli elementi costitutivi di base utilizzati per creare applicazioni Lambda. Per scrivere funzioni, è essenziale comprendere i concetti e i componenti fondamentali che costituiscono il modello di programmazione Lambda. Questa sezione ti guiderà attraverso gli elementi fondamentali che devi conoscere per iniziare a creare applicazioni serverless con Lambda.

  • Funzioni Lambda e gestori di funzioni: una funzione Lambda è un piccolo blocco di codice che viene eseguito in risposta agli eventi. Le funzioni sono gli elementi costitutivi di base utilizzati per creare applicazioni. I gestori di funzioni sono il punto di ingresso per gli oggetti evento elaborati dal codice funzione Lambda.

  • Ambiente di esecuzione Lambda e runtime: gli ambienti di esecuzione Lambda gestiscono le risorse necessarie per eseguire la funzione. I tempi di esecuzione sono gli ambienti specifici al linguaggio in cui vengono eseguite le funzioni.

  • Eventi e trigger: in che modo altri Servizi AWS invocano le funzioni in risposta a eventi specifici.

  • Autorizzazioni e ruoli Lambda: come controlli chi può accedere alle tue funzioni e con quali altri Servizi AWS possono interagire le tue funzioni.

Suggerimento

Se vuoi iniziare a comprendere lo sviluppo serverless più in generale, consulta Informazioni sulla differenza tra sviluppo tradizionale e serverless nella Guida per gi sviluppatori serverless AWS.

Funzioni Lambda e gestori di funzioni

In Lambda, le funzioni sono gli elementi costitutivi fondamentali utilizzati per creare applicazioni. Una funzione Lambda è una parte di codice che viene eseguita in risposta a eventi, ad esempio un utente che fa clic su un pulsante in un sito Web o un file che viene caricato in un bucket Amazon Simple Storage Service (Amazon S3). Puoi pensare a una funzione come a una sorta di programma autonomo con le seguenti proprietà. Un gestore di funzioni Lambda è il metodo nel codice della funzione che elabora gli eventi. Quando una funzione viene eseguita in risposta a un evento, Lambda esegue il gestore delle funzioni. I dati sull'evento che ha causato l'esecuzione della funzione vengono passati direttamente al gestore. Sebbene il codice di una funzione Lambda possa contenere più di un metodo o una funzione, le funzioni Lambda possono avere un solo gestore.

Per creare una funzione Lambda, crea un pacchetto di implementazione contenente il codice funzione e le rispettive dipendenze. Lambda supporta due tipi di pacchetti di implementazione: archivi di file .zip e immagini di container.

  • Una funzione ha un lavoro o uno scopo specifico

  • Vengono eseguite solo quando necessario in risposta a eventi specifici

  • Smettono automaticamente di funzionare al termine

Ambiente di esecuzione Lambda e runtime

Le funzioni Lambda vengono eseguite all'interno di un ambiente di esecuzione sicuro e isolato che Lambda gestisce per te. Un ambiente di esecuzione gestisce i processi e le risorse necessari per eseguire la funzione. Quando una funzione viene invocata per la prima volta, Lambda crea un nuovo ambiente di esecuzione in cui eseguire la funzione. Al termine dell'esecuzione della funzione, Lambda non interrompe immediatamente l'ambiente di esecuzione; se la funzione viene invocata nuovamente, Lambda può riutilizzare l'ambiente di esecuzione esistente.

L'ambiente di esecuzione Lambda contiene inoltre un runtime, un ambiente specifico al linguaggio che inoltra le informazioni sugli eventi e le risposte tra Lambda e la funzione. Lambda offre una serie di runtime gestiti per i linguaggi di programmazione più diffusi, oppure puoi crearne di tuoi.

Per i runtime festiti, Lambda applica automaticamente aggiornamenti e patch alle funzioni usando il runtime.

Eventi e trigger

Puoi anche invocare una funzione Lambda direttamente utilizzando la console Lambda, AWS CLI o uno dei Software Development Kit (SDK AWS). In un'applicazione di produzione è più comune che una funzione venga invocata da un altro Servizio AWS in risposta a un particolare evento. Ad esempio, potresti voler eseguire una funzione ogni volta che un elemento viene aggiunto a una tabella Amazon DynamoDB.

Per fare in modo che la tua funzione risponda agli eventi, configura un trigger. Un trigger collega la funzione a un’origine eventi; la funzione può avere più trigger. Quando si verifica un evento, Lambda riceve i dati dell'evento come documento JSON e li converte in un oggetto che il codice può elaborare. Puoi definire il seguente formato JSON per il tuo evento; il runtime Lambda converte questo JSON in un oggetto prima di passarlo al gestore della funzione.

Esempio evento Lambda personalizzato
{ "Location": "SEA", "WeatherData":{ "TemperaturesF":{ "MinTempF": 22, "MaxTempF": 78 }, "PressuresHPa":{ "MinPressureHPa": 1015, "MaxPressureHPa": 1027 } } }

Con servizi di streaming e coda come Amazon Kinesis o Amazon SQS, Lambda utilizza uno strumento di mappatura dell'origine degli eventi anziché un trigger standard. Gli strumenti di mappatura dell’origine degli eventi analizzano l’origine alla ricerca di dati nuovi, raggruppano i record in batch e invocano quindi la funzione con gli eventi in batch. Per ulteriori informazioni, consulta In che modo gli strumenti di mappatura dell'origine degli eventi differiscono dai trigger diretti.

Per capire come funziona un trigger, inizia completando il tutorial Uso di un trigger Amazon S3 oppure, per una panoramica generale sull'uso dei trigger e le istruzioni sulla creazione di un trigger utilizzando la console Lambda, consulta Integrazione con altri servizi.

Autorizzazioni e ruoli Lambda

Per Lambda, è necessario configurare due tipi principali di autorizzazioni:

  • Autorizzazioni necessarie alla tua funzione per accedere ad altri Servizi AWS

  • Autorizzazioni necessarie ad altri utenti e Servizi AWS per accedere alle tue funzioni Lambda

Le sezioni seguenti descrivono entrambi questi tipi di autorizzazione e illustrano le best practice per applicare le autorizzazioni di privilegio minimo.

Autorizzazioni per le funzioni per accedere ad altre risorse AWS

Le funzioni Lambda spesso necessitano di accesso ad altre risorse AWS sulle quali eseguire azioni. Ad esempio, una funzione può leggere elementi da una tabella DynamoDB, archiviare un oggetto in un bucket S3 o scrivere in una coda Amazon SQS. Per concedere alle funzioni le autorizzazioni necessarie per eseguire queste azioni, puoi utilizzare un ruolo di esecuzione.

Un ruolo di esecuzione Lambda è un tipo speciale di ruolo AWS Identity and Access Management (IAM), un'identità che crei nel tuo account a cui sono associate autorizzazioni specifiche definite in una policy.

Ogni funzione Lambda deve avere un ruolo di esecuzione e un singolo ruolo può essere utilizzato da più di una funzione. Quando viene invocata una funzione, Lambda assume il ruolo di esecuzione della funzione e riceve l'autorizzazione a intraprendere le azioni definite nella policy del ruolo.

Quando crei una funzione nella console Lambda, Lambda crea automaticamente un ruolo di esecuzione per la funzione. La policy del ruolo concede alla funzione le autorizzazioni di base per scrivere gli output di log in Amazon CloudWatch Logs. Per autorizzare la funzione a eseguire azioni su altre risorse AWS, devi modificare il ruolo per aggiungere autorizzazioni aggiuntive. Il modo più semplice per aggiungere autorizzazioni consiste nell'utilizzare una policy gestita da AWS. Le policy gestite vengono create e amministrate da AWS e forniscono autorizzazioni per molti casi d'uso comuni. Ad esempio, se la tua funzione esegue operazioni CRUD su una tabella DynamoDB, puoi aggiungere la policy AmazonDynamodbFullAccess al tuo ruolo.

Autorizzazioni per altri utenti e risorse per accedere alla tua funzione

Per concedere altre autorizzazioni Servizio AWS per accedere alla funzione Lambda, utilizza una policy basata sulle risorse. In IAM, le policy basate sulle risorse sono collegate a una risorsa (in questo caso, la funzione Lambda) e definiscono chi può accedere alla risorsa e quali azioni può eseguire.

Affinché un altro Servizio AWS possa invocare la tua funzione tramite un trigger, la policy basata sulle risorse della funzione deve concedere al servizio l'autorizzazione a utilizzare l'azione lambda:InvokeFunction. Se crei il trigger utilizzando la console, Lambda aggiunge automaticamente questa autorizzazione per te.

Per concedere ad altri utenti AWS l'autorizzazione ad accedere alla tua funzione, puoi definirla nella policy basata sulle risorse della funzione esattamente come per un'altra risorsa Servizio AWS. Puoi anche utilizzare una policy basata sull'identità associata all'utente.

Best practice per le autorizzazioni Lambda

Quando imposti le autorizzazioni usando le policy IAM, la best practice di sicurezza consiste nel concedere le autorizzazioni richieste per eseguire un'attività. Ciò è noto come principio di privilegio minimo. Per iniziare a concedere le autorizzazioni per la tua funzione, puoi scegliere di utilizzare una politica gestita da AWS. Le policy gestite possono essere il modo più rapido e semplice per concedere le autorizzazioni per eseguire un'attività, ma possono includere anche altre autorizzazioni non necessarie. Man mano che passi dallo sviluppo iniziale al test e alla produzione, ti consigliamo di ridurre le autorizzazioni solo a quelle necessarie definendo policy personalizzate gestite dal cliente.

Lo stesso principio si applica quando si concedono autorizzazioni per accedere alla tua funzione utilizzando una ploicy basata sulle risorse. Ad esempio, se desideri autorizzare Amazon S3 a invocare la tua funzione, la best practice consiste nel limitare l'accesso a singoli bucket, o ai bucket in Account AWS specifici, anziché concedere autorizzazioni generali al servizio S3.