Analisi dettagliata di AWS Lambda

La traduzione dell'articolo è stata preparata appositamente per gli studenti del corso «Servizi Cloud». È interessante svilupparsi in questo ambito? Guarda il masterclass di Egor Zuev (TeamLead presso InBit) «Servizio AWS EC2» e unisciti al prossimo gruppo del corso: inizio il 26 settembre.

Analisi dettagliata di AWS Lambda

Sempre più persone si stanno spostando su AWS Lambda per la scalabilità, le prestazioni, il risparmio e la possibilità di gestire milioni e persino trilioni di richieste al mese. Non è necessario gestire l'infrastruttura su cui opera il servizio. La scalabilità automatica consente di gestire migliaia di richieste simultanee al secondo. Penso che AWS Lambda possa essere considerato a ragione uno dei servizi più richiesti di AWS.

AWS Lambda

AWS Lambda è un servizio di calcolo serverless orientato agli eventi che consente di eseguire codice senza dover gestire server dedicati e amministrare l'infrastruttura, integrando altri servizi AWS in base alla logica dell'utente. Lambda risponde automaticamente a vari eventi (definiti come trigger), ad esempio alle richieste HTTP tramite Amazon API Gateway, alle modifiche nei bucket Amazon S3 o nelle tabelle di Amazon DynamoDB; in alternativa, il codice può essere eseguito tramite chiamate API utilizzando AWS SDK e le transizioni di stato in AWS Step Functions.

Lambda esegue codice su un'infrastruttura di calcolo altamente disponibile e si occupa completamente della gestione della piattaforma sottostante, inclusa la manutenzione dei server e del sistema operativo, l'allocazione delle risorse, il scaling automatico, il monitoraggio del codice e il logging. È sufficiente caricare il codice e configurare come e quando deve essere eseguito. Il servizio si occuperà del suo avvio e garantirà un'elevata disponibilità per la tua applicazione.

Quando passare a Lambda?

AWS Lambda è una piattaforma di calcolo versatile, adatta a una vasta gamma di scenari, purché il linguaggio e l'ambiente di esecuzione del tuo codice siano supportati dal servizio. Se desideri concentrarti sul codice e sulla logica aziendale, lasciando a un fornitore esterno la gestione dei server, l'allocazione delle risorse e la scalabilità a un prezzo ragionevole, vale sicuramente la pena considerare AWS Lambda.

Lambda è perfetta per la creazione di interfacce software e, se utilizzata insieme ad API Gateway, può ridurre significativamente i costi e accelerare il time-to-market. Ci sono vari modi per utilizzare le funzioni Lambda e diverse opzioni per organizzare un'architettura serverless — ogni utente troverà qualcosa di adatto in base agli obiettivi prefissati.

Lambda consente di svolgere un'ampia gamma di compiti. Grazie al supporto di CloudWatch, è possibile creare job programmati e automatizzare determinati processi. Non ci sono limitazioni riguardo alla natura e all'intensità dell'uso del servizio (viene considerato l'uso della memoria e il tempo), e non ci sono impedimenti per lavorare progressivamente su un microservizio completo basato su Lambda.

Qui puoi creare azioni orientate ai servizi che non vengono eseguite costantemente. Un esempio tipico è la scala delle immagini. Anche nei sistemi distribuiti, le funzioni Lambda rimangono rilevanti.

Quindi, se non vuoi occuparti dell'allocazione e della gestione delle risorse di calcolo — prova AWS Lambda; se non hai bisogno di calcoli pesanti e ad alta intensità di risorse — prova anche AWS Lambda; se il tuo codice viene eseguito periodicamente — esatto, dovresti provare AWS Lambda.

Sicurezza

Fino ad ora, non ci sono lamentele sulla sicurezza. D'altra parte, poiché molti processi interni e caratteristiche di implementazione di questo modello sono nascosti all'utente nell'ambiente di esecuzione gestito di AWS Lambda, alcune regole di sicurezza del cloud comunemente accettate perdono rilevanza.

Come la maggior parte dei servizi AWS, Lambda opera secondo il principio di responsabilità condivisa tra AWS e il cliente per quanto riguarda la sicurezza e la conformità normativa. Questo principio riduce il carico operativo per il cliente, poiché AWS si occupa della manutenzione, dell'amministrazione e del controllo dei componenti del servizio — dal sistema operativo dell'host e dal livello di virtualizzazione alla sicurezza fisica delle infrastrutture.

In particolare per AWS Lambda, AWS gestisce l'infrastruttura sottostante, i servizi di base correlati, il sistema operativo e la piattaforma delle applicazioni. Mentre il cliente è responsabile della sicurezza del proprio codice, della conservazione dei dati sensibili, del controllo degli accessi e delle autorizzazioni per il servizio e per le risorse di Lambda (Identity and Access Management, IAM), comprese le funzioni utilizzate.

Nello schema sottostante è rappresentato il modello di responsabilità condivisa applicabile ad AWS Lambda. L'area di responsabilità di AWS è evidenziata in arancione, mentre quella del cliente è in blu. Come si può vedere, AWS assume una maggiore responsabilità per le applicazioni distribuite sul servizio.

Analisi dettagliata di AWS Lambda

Modello di responsabilità condivisa applicabile ad AWS Lambda

Ambiente di esecuzione Lambda

Il principale vantaggio di Lambda è che, eseguendo una funzione per conto vostro, il servizio gestisce autonomamente le risorse necessarie. Potete così evitare di perdere tempo e risorse nella gestione dei sistemi e concentrarvi sulla logica aziendale e sulla scrittura del codice.

Il servizio Lambda è suddiviso in due piani. Il primo è il piano di controllo. Secondo Wikipedia, il piano di controllo è la parte della rete responsabile del trasporto del traffico di segnale e della routinizzazione. È il componente principale che prende decisioni globali sull’allocazione, manutenzione e distribuzione dei carichi di lavoro. Inoltre, il piano di controllo funge da topologia di rete del fornitore, responsabile della gestione e instradamento del traffico.

Il secondo piano è il piano dei dati. Ha, come il piano di controllo, le sue proprie funzioni. Il piano di controllo fornisce un'API per gestire le funzioni (CreateFunction, UpdateFunctionCode) e controlla l'interazione di Lambda con altri servizi AWS. Il piano dei dati gestisce le chiamate API (Invoke API) che avviano le funzioni Lambda. Dopo la chiamata della funzione, il piano di controllo allocca o seleziona un ambiente di runtime esistente e preconfigurato per quella funzione, e poi esegue il codice al suo interno.

AWS Lambda supporta diversi linguaggi di programmazione, tra cui Java 8, Python 3.7, Go, NodeJS 8, .NET Core 2 e altri, attraverso gli ambienti di runtime corrispondenti. AWS li aggiorna regolarmente, distribuisce patch di sicurezza ed esegue altre operazioni di manutenzione su questi ambienti. Lambda consente di utilizzare anche altri linguaggi, a condizione che tu implementi il runtime appropriato. Sarà quindi tua responsabilità gestirlo, inclusa la sicurezza.

Come funziona tutto ciò e come il servizio eseguirà le tue funzioni?

Ogni funzione opera in uno o più ambienti dedicati, che esistono solo durante il ciclo di vita di quella funzione e poi vengono distrutti. In ogni ambiente viene eseguita solo una chiamata alla volta, ma viene riutilizzato se ci sono più chiamate seriali della stessa funzione. Tutti gli ambienti di esecuzione operano su macchine virtuali con virtualizzazione hardware — noti come microVM. Ogni microVM è assegnata a un account AWS specifico e può essere riutilizzata più volte da ambienti per eseguire diverse funzioni all'interno di quell'account. Le microVM sono confezionate in blocchi strutturali della piattaforma hardware Lambda Worker, di proprietà e gestiti da AWS. Lo stesso ambiente di esecuzione non può essere utilizzato da funzioni diverse, così come le microVM sono uniche per diversi account AWS.

Analisi dettagliata di AWS Lambda

Modello di isolamento in AWS Lambda

L'isolamento degli ambienti di esecuzione è realizzato attraverso diversi meccanismi. A un livello superiore, ogni ambiente presenta copie separate dei seguenti componenti:

  • Codice funzione
  • Qualsiasi layer Lambda selezionato per la funzione
  • Ambiente di esecuzione della funzione
  • Spazio utente minimo basato su Amazon Linux

Per l'isolamento dei diversi ambienti di esecuzione vengono utilizzati i seguenti meccanismi:

  • cgroups — limitazione dell'accesso alle risorse CPU, memoria, larghezza di banda dei dischi e rete per ciascun ambiente di esecuzione;
  • namespaces — raggruppamento di ID processi, ID utenti, interfacce di rete e altre risorse gestite dal kernel Linux. Ogni ambiente di esecuzione funziona nel proprio namespace;
  • seccomp-bpf — limitazione delle chiamate di sistema che possono essere utilizzate nell'ambiente di esecuzione;
  • iptables e routing tables — isolamento degli ambienti di esecuzione tra loro;
  • chroot — fornitura di accesso limitato al file system sottostante.

Combinati con tecnologie di isolamento proprietarie di AWS, i meccanismi sopra elencati garantiscono una segmentazione sicura degli ambienti di esecuzione. Gli ambienti isolati in questo modo non possono accedere ai dati di altri ambienti né modificarli.

Sebbene più ambienti di esecuzione di un singolo account AWS possano essere eseguiti su una microVM, in nessun caso le microVM possono essere condivise tra diversi account AWS. Per l'isolamento delle microVM, AWS Lambda utilizza soltanto due meccanismi: le istanze EC2 e Firecracker. L'isolamento degli ospiti in Lambda basato sulle istanze EC2 è stato applicato dal 2015. Firecracker è un nuovo hypervisor open source, appositamente progettato da AWS per carichi di lavoro serverless e presentato nel 2018. L'hardware fisico su cui vengono eseguite le microVM è condiviso tra i carichi di lavoro di diversi account.

Salvataggio di ambienti e stati dei processi

Sebbene gli ambienti di esecuzione Lambda siano unici per diverse funzioni, è possibile richiamare più volte la stessa funzione, il che significa che l'ambiente di esecuzione può rimanere attivo per diverse ore prima di essere distrutto.

Ogni ambiente di esecuzione Lambda dispone anche di un file system con autorizzazioni di scrittura, accessibile tramite la directory /tmp. Non è possibile accedere ai suoi contenuti da altri ambienti di esecuzione. Per quanto riguarda il salvataggio degli stati dei processi, i file scritti in /tmp esistono durante l'intero ciclo di vita dell'ambiente di esecuzione. Questo consente l'accumulo dei risultati di più invocazioni, il che è particolarmente utile per operazioni costose come il caricamento di modelli di apprendimento automatico.

Trasferimento dei dati delle invocazioni

L'interfaccia Invoke API può essere utilizzata in due modalità: modalità eventi e modalità "richiesta - risposta". Nella modalità eventi, l'invocazione viene messa in coda per l'esecuzione successiva. Nella modalità "richiesta - risposta", la funzione viene chiamata istantaneamente con il payload fornito, dopodiché viene restituita una risposta. In entrambi i casi, la funzione viene eseguita nell'ambiente Lambda, ma con percorsi del payload diversi.

Durante le chiamate di tipo "richiesta - risposta", il payload arriva dall'API di gestione delle richieste (API Caller), come AWS API Gateway o AWS SDK, al bilanciatore di carico, e poi al servizio di invocazione delle funzioni Lambda (Invoke Service). Quest'ultimo determina l'ambiente idoneo per eseguire la funzione e invia lì il payload per completare la chiamata. Il bilanciatore di carico riceve il traffico con protezione TLS tramite Internet. Il traffico all'interno del servizio Lambda, dopo il bilanciatore di carico, passa attraverso il VPC interno in una specifica regione AWS.

Analisi dettagliata di AWS Lambda

Modello di gestione delle chiamate di AWS Lambda: modalità "richiesta - risposta"

Le chiamate basate su eventi possono essere eseguite immediatamente o essere messe in coda. In alcuni casi, la coda è implementata tramite il servizio Amazon SQS (Amazon Simple Queue Service), che trasmette le chiamate al servizio di invocazione delle funzioni Lambda attraverso un processo di polling interno (poller). Il traffico inviato è protetto da TLS, mentre non è previsto ulteriore crittografia dei dati memorizzati in Amazon SQS.

Le chiamate basate su eventi non restituiscono risposte: qualsiasi informazione di risposta viene semplicemente ignorata dal Lambda Worker. Le chiamate originate da Amazon S3, Amazon SNS, CloudWatch e altre fonti vengono elaborate dal servizio Lambda in modalità eventi. Le chiamate dai flussi di Amazon Kinesis e DynamoDB, le chiamate dalle code SQS, dal bilanciatore di carico delle applicazioni e dall'API Gateway vengono gestite in modalità 'richiesta - risposta'.

Monitoraggio

Puoi eseguire il monitoraggio e l'audit delle funzioni Lambda utilizzando vari strumenti e servizi AWS, tra cui i seguenti.

Amazon CloudWatch
Raccoglie diverse statistiche, come il numero di richieste, la durata dell'esecuzione delle richieste e il numero di richieste terminate con errore.

Amazon CloudTrail
Consente di tenere registri, monitorare continuamente e conservare informazioni sulle attività nel tuo account relative alla tua infrastruttura AWS. Avrai una cronologia completa delle azioni eseguite tramite la console AWS Management Console, AWS SDK, strumenti da riga di comando e altri servizi AWS.

AWS X-Ray
Fornisce una visibilità completa di tutte le fasi di elaborazione delle richieste nella tua applicazione, basata sulla mappa dei suoi componenti interni. Permette di analizzare le applicazioni durante lo sviluppo e in ambiente di produzione.

AWS Config
Potrai monitorare le modifiche nella configurazione delle funzioni Lambda (compresa la loro rimozione) e dell'ambiente di esecuzione, dei tag, dei nomi dei gestori, delle dimensioni del codice, della distribuzione della memoria, delle impostazioni di timeout e dei parametri di parallelismo, nonché del ruolo di esecuzione Lambda IAM, delle subnet e dell'associazione dei gruppi di sicurezza.

Conclusione

AWS Lambda offre un potente insieme di strumenti per creare applicazioni sicure e scalabili. Molti dei metodi di sicurezza e conformità normativa in AWS Lambda non differiscono da quelli utilizzati negli altri servizi AWS, anche se ci sono eccezioni. A partire da marzo 2019, Lambda soddisfa i requisiti SOC 1, SOC 2, SOC 3, PCI DSS, la legge statunitense sulla continuità e responsabilità nell'assistenza sanitaria (HIPAA) e altre normative. Pertanto, quando stai pensando di implementare una nuova applicazione, considera il servizio AWS Lambda: potrebbe essere proprio quello di cui hai bisogno per il tuo progetto.

Fonte: habr.com

Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster