Utilizzare .NET Core con AWS Lambda

di Cristian Civera, in AWS,

Il cloud computing è una metodologia di distribuzione delle soluzioni che è ormai diventata all'ordine del giorno. I servizi che lo sfruttano sono sempre di più e l'offerta delle piattaforme è sempre più ricca e completa. Che si voglia utilizzare IaaS, PaaS o FaaS sono indubbi la comodità e il rapporto costo/benefico sull'utilizzo del cloud. Gli attori più importanti sul mercato sono Amazon Web Services (AWS) che ne copre il 30%, Microsoft Azure per un 20% e Google Cloud Platform per un 7%, al momento della stesura di questo articolo.

Amazon è stata la prima a muoversi in questo settore e offre un parco di servizi per realizzare qualunque tipo di applicativo. E' stata la prima a fornire anche soluzioni innovative, quali le Lambda, l'espressione principale di ciò che viene comunemente indicato come serverless. Con esse lo sviluppatore deve concentrarsi esclusivamente sulle proprie funzioni (lambda appunto) ed ignorare completamente l'infrastruttura di hosting, la gestione e la sua intera scalabilità, spostandolo quindi da un approccio basato sulle applicazioni ad uno basato sulle funzioni.

Uno dei pregi del cloud e in particolare delle Lambda, è quello di essere indipendente dai runtime e dai linguaggio di programmazione .NET, infatti, è uno dei framework che possiamo utilizzare per la realizzazione di queste lambda ed è pienamente supportato da AWS stesso. In questo articolo vogliamo introdurre l'uso delle lambda anche nell'ambito .NET, quali strumenti utilizzare per lo sviluppo e come gestire le funzioni create.

Introduzione alle Lambda

Le lambda ci permettono di realizzare le cosiddette Functions as a Service (FaaS) e rappresentano l'implementazione da parte di Amazon. In Microsoft Azure si chiamano Azure Functions mentre su Google si chiamano Cloud functions. Il concetto principale che sta alla base delle Lamba è quello di portare noi sviluppatori a focalizzarci sulla funzione. Essa viene invocata da uno o più trigger, ma di essi e della loro implementazione non ce ne dobbiamo occupare. Non è necessario allocare un server, indicare quanta potenza necessitiamo, ma semplicemente il runtime ad ogni nuova richiesta si occupa di eseguire la funzione e restituire il risultato o invocare in asincrono altri servizi.

Non ci sono costi fissi perché paghiamo al millisecondo ciò che utilizziamo, in base alla memoria che abbiamo deciso di allocare e, in proporzione, alla CPU. L'apertura di un account include, tra l'altro, 1 milione di richieste al mese e 400.000 GB/secondo di tempo di elaborazione al mese, rendendolo accessibile e utilizzabile anche a chi ha basse esigenze. Le nostre funzioni vengono allocate a fronte di una richiesta, messe a disposizione poi per altre, se necessario, e crescono e diminuiscono in autonomia mediante uno scaling automatico. Nel giro di un minuto possono aumentare di 500 istanze e, nelle region principali, arrivare a soddisfare 3000 richieste concorrenti. Grazie alle availability zones le istanze vivono in server distribuiti in modo da minimizzare l'impatto in caso di fault dei server. Gli aggiornamenti dei sistemi sono gestiti autonomamente e non dobbiamo fare nulla per la loro manutenzione.

Le Lambda sono funzioni stateless e fanno affidamento a database esterni come DynamoDB o file system distribuiti come Elastic File System. Eventualmente le Lambda possono essere usate con le Step Functions per orchestrare dei workflow che coinvolgano più servizi e più Lambda basati su eventi.

Si prestano bene per quelle situazioni in cui non sono certe le risorse necessarie e per l'esecuzione di attività sincrone o asincrone. Possono essere attivate via HTTP, tramite API Gateway, e rispondere direttamente per la realizzazione di API REST e non, da richieste di Alexa, da Cognito, Lex, CloudFront. Oppure in asincrono, per esempio da code di SNS e SQS, da flussi stream come Kinesis, da attività su file, come S3. Sono l'ideale per attività di background, come la preparazione di documenti, l'elaborazione di immagini, l'invio di notifiche e l'analisi dei dati. Molte sono quindi le situazioni in cui si prestano e possono sostituirsi a molti scenari per i quali generalmente ci limitiamo a creare un applicativo unico per svolgere tutte le funzioni.

C'è però un rovescio della medaglia per quanto riguarda le Lambda, perché per ogni istanza viene creato un processo diverso, perciò, è necessario progettare bene le nostre funzioni affinché siano le più leggere possibili ad avviarsi. Dobbiamo ottimizzare l'uso di RAM, le operazioni di avvio devono essere ridotte al minimo e posticipate solo quando necessario. Questo difetto è anche un pregio perché ci spinge a progettare le nostre architetture con un approccio che va oltre ai micro servizi, con unità ancora più piccole e indipendenti: le funzioni.

Fatta questa introduzione vediamo quali sono i passi necessari per lo sviluppo.

6 pagine in totale: 1 2 3 4 5 6
Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Top Ten Articoli

Articoli via e-mail

Iscriviti alla nostra newsletter nuoviarticoli per ricevere via e-mail le notifiche!

In primo piano

I più letti di oggi

In evidenza

Misc