danilo_poccia In questo post Danilo Poccia (AWS Technical Evangelist) risponde ad alcune domande su AWS Lambda, un servizio di computazione che permette di eseguire il proprio codice utilizzando l’infrastruttura Amazon Web Service.

Amazon Web Services durante il 2014 ha rilasciato AWS Lambda, un servizio di computazione completamente gestito che sta modificando il modo in cui vengono scritte e sviluppate alcune soluzioni software lato server.

Per chi non lo conoscesse, AWS Lambda è un servizio di computazione attraverso il quale è possibile eseguire il proprio codice utilizzando l’infrastruttura AWS. Dopo aver caricato il codice e creato l’apposita funzione, AWS Lambda si occupa del provisioning e della gestione dei server che saranno utilizzati per eseguire il codice.

AWS Lambda

Un esempio di architettura serverless basata su Lambda per la gestione di servizi multimediali su mobile.

È possibile utilizzare AWS Lambda come servizio:

  • di elaborazione event-driven in cui AWS Lambda esegue il codice in risposta a specifici eventi, come ad esempio le modifiche ai dati ospitati in Amazon S3 o in una tabella di Amazon DynamoDB.
  • di elaborazione di eventi schedulati in stile “CRON”
  • di calcolo per eseguire il codice in risposta alle richieste che utilizzano Web API esposte tramite l’Amazon API Gateway o chiamate dirette alle API Lambda utilizzando gli AWS SDK, inclusi quelli per ambienti Mobile.

AWS Lambda esegue il codice su un’infrastruttura di elaborazione le cui attività di amministrazione delle risorse (aggiornamenti hardware e di sistema operativo) sono gestite da AWS, compreso il provisioning delle risorse per l’esecuzione dell’applicativo.

Questo servizio sta rivoluzionando le tecniche di sviluppo del software lato server.

In qualità di partner AWS abbiamo il piacere di confrontarci costantemente con il suo team, per questo motivo abbiamo pensato di porre alcune domande a Danilo Poccia, (AWS Technical Evangelist), per analizzare come Lambda, unito ad altri servizi di AWS, sta modificando gli approcci allo sviluppo software server side.

1. Quali sono i principali vantaggi che Lambda offre a chi sviluppa soluzioni Server Side?

Con AWS Lambda è possibile disegnare il backend della propria applicazione come un insieme di funzioni che possono essere invocate dai client (browser web, smarphone, tablet o un qualsiasi dispositivo connesso ad Internet) direttamente o tramite l’Amazon API Gateway. Le funzioni Lambda possono essere anche sottoscritte ad eventi generati dalle risorse utilizzate dall’applicazione: ad esempio se un utente carica una immagine su Amazon S3, una funzione può indicizzare i metadati dell’immagine e generare dei thumbnail per visualizzare l’immagine correttamente a differenti risoluzioni. AWS può controllare l’autenticazione e l’autorizzazione nell’uso di queste funzioni, e l’accesso alle risorse AWS utilizzate da queste funzioni.
In questo modo l’architettura implementata è completamente “serverless”, ovvero non è necessario gestire, installare o aggiornare le patch di nessun server, fisico o virtuale. AWS gestisce in automatico la scalabilità nel numero di richieste. Il costo del servizio è estremamente granulare ed è legato al numero di richieste gestite e alla durata dell’esecuzione delle funzioni arrotondato ai decimi di secondo. Per favorire la sperimentazione degli sviluppatori, delle aziende e delle startup, ogni mese tutti gli account AWS hanno con Lambda un free tier di 1 milione di richieste e 3,2 milioni di secondi di esecuzione (usando 128MB di memoria) senza alcun costo.

2. Come potrebbe essere usato Lambda in scenari innovativi come Internet of Things e Big Data?

AWS è una piattaforma in cui i servizi sono integrati tra loro. In particolare con AWS IoT, il servizio che permette di implementare in modo semplice e sicuro una architettura Internet of Things, è possibile creare delle regole che, in base al contenuto dei messaggi ricevuti dai dispositivi, attivano delle funzioni Lambda per implementare la propria logica applicativa. Ad esempio, per ottimizzare le risorse utilizzate per l’agricoltura, potrei utilizzare dei sensori di umidità distribuiti sul terreno. In base ai dati raccolti posso attivare un sistema di irrigazione che andrà ad utilizzare la minima quantità d’acqua necessaria, riducendo gli sprechi di risorse.
In ambito Big Data è possibile sottoscrivere l’esecuzione di funzioni Lambda ad un flusso di dati real-time, usando Amazon Kinesis, o reagire al caricamento di dati massivi, come ad esempio file di log, su Amazon S3. Queste funzioni posso implementare il proprio algoritmo di analisi o utilizzare altri servizi specifici, come Amazon Machine Learning, in modo da apprendere dai dati e costruire un proprio modello predittivo.

3. Qual è l’approccio migliore per la gestione del versionamento del software in Lambda? Qual è la migliore integrazione di Lambda con Git e con i sistemi di Continuous Deploy?

AWS Lambda gestisce nativamente il versionamento delle funzioni, per cui di una stessa funzione posso avere la versione 1, 2, e così via. E’ poi possibile creare degli alias che puntano a specifiche versioni delle funzioni, ad esempio l’alias “test” potrebbe puntare alla versione 3 (più nuova) e l’alias “produzione” alla versione 2 (più vecchia). Quando si vuole portare in produzione la versione 3, è sufficiente spostare l’alias “produzione” dalla versione 2 alla 3, e tutti i riferimenti utilizzati nell’applicazione sono automaticamente aggiornati.

Posso utilizzare Git con AWS Lambda in due modi:
– Per gestire lo sviluppo del codice delle funzioni Lambda, come file singoli o attraverso un template AWS CloudFormation, un servizio che permette di gestire la configurazione dei servizi AWS attraverso un file di testo che può, appunto, essere messo sotto source control.
– Per reagire alle “commit” sul repository Git, attivando la propria procedura di continuous deployment proprio attraverso funzioni Lambda dedicate, che possono implementare il deployment su infrastrutture tradizionali o a loro volta basate su Lambda.

4. Può fornirci alcuni suggerimenti per sviluppare un’architettura a Microservizi con Lambda?

Utilizzando AWS Lambda si è naturalmente spinti a decomporre la propria applicazione in piccole funzioni, per cui ci si trova già indirizzati verso una architettura a microservizi. Il mio consiglio è quello di spingersi oltre, impostando la logica del proprio backend in modalità event-driven, guidata dagli eventi, ovvero sottoscrivendo funzioni Lambda agli eventi che accadono all’interno della propria applicazione: in questo modo le interazioni diventano asincrone e più semplici da gestire in modo distribuito, favorendo la “coreografia” delle interazioni rispetto ad una “orchestrazione” centralizzata. L’applicazione di comporta come uno foglio di calcolo: quando una informazione è ricevuta o modificata, tutti i dati dipendenti sono automaticamente aggiornati, come le celle di un foglio di calcolo appunto. Questo approccio porta a seguire le linee guida della programmazione reactive, come ad esempio descritto nel “Reactive Manifesto”.


email zero12

Pubblichiamo frequentemente post scritti dal nostro team o da esperti in ambito tecnologico e innovativo. 

Per rimanere aggiornato iscriviti alla nostra newsletter!

 

Leave a Comment