{"id":4816,"date":"2022-09-02T09:00:00","date_gmt":"2022-09-02T07:00:00","guid":{"rendered":"https:\/\/blog.besharp.it\/?p=4816"},"modified":"2022-09-05T14:15:26","modified_gmt":"2022-09-05T12:15:26","slug":"costruire-applicazioni-serverless-in-deno-con-lambda-custom-runtime-cdk","status":"publish","type":"post","link":"https:\/\/blog.besharp.it\/it\/costruire-applicazioni-serverless-in-deno-con-lambda-custom-runtime-cdk\/","title":{"rendered":"Costruire applicazioni Serverless in Deno con Lambda Custom Runtime & CDK"},"content":{"rendered":"\n
Bentornato su Proud2beCloud, il blog di beSharp<\/a>! Oggi andremo ad esplorare insieme alcune possibilit\u00e0 offerte dal mondo Cloud concentrandoci sulla customizzazione delle soluzioni mantenendo sempre un approccio Infrastructure-as-a-Code<\/em> (IaaC)<\/strong>, Serverless<\/strong> e il pi\u00f9 possibile fully managed<\/strong>. Parleremo quindi di Lambda, CDK, pipeline, Serverless Repository e molto altro. <\/p>\n\n\n\n Le Funzioni AWS Lambda<\/strong> (FaaS) sono uno strumento estremamente versatile del cloud AWS poich\u00e9 \u00e8 possibile utilizzarle per molteplici applicazioni. <\/p>\n\n\n\n Ma come possiamo fare se vogliamo utilizzare un linguaggio di programmazione non attualmente supportato? La risposta \u00e8 semplice: Custom Runtime<\/strong>. <\/p>\n\n\n\n Di custom runtime abbiamo gi\u00e0 parlato in un nostro precedente articolo<\/a> in cui abbiamo visto come realizzare un\u2019applicazione C++ su AWS Lambda. Ora, a 2 anni di distanza, vogliamo presentare una nuova versione dell\u2019articolo scegliendo un altro linguaggio molto chiacchierato al momento: Deno<\/strong>.<\/p>\n\n\n\n Ci concentreremo inoltre su come automatizzare il delivery della nostra applicazione in Deno su Lambda grazie a pipeline CI\/CD e CDK. <\/p>\n\n\n\n Come anticipato, se sei un lettore del nostro blog, probabilmente conoscerai la possibilit\u00e0 di utilizzare custom runtime all\u2019interno di AWS Lambda<\/a>.<\/p>\n\n\n\n Per riassumere in breve: Lambda con custom runtime differisce da una lambda \u2018standard\u2019 poich\u00e9 deve contenere, oltre al codice sorgente, tutte le librerie compilate necessarie per l\u2019esecuzione dell\u2019applicazione e, se il linguaggio scelto \u00e8 interpretato, anche l\u2019interprete. <\/p>\n\n\n\n Utilizzare una runtime custom per AWS Lambda garantisce l\u2019elasticit\u00e0<\/strong> delle soluzioni proposte dallo sviluppatore per la risoluzione e l\u2019ottimizzazione di problemi che richiedono un linguaggio di programmazione specifico.<\/p>\n\n\n\n Nell\u2019articolo precedente \u00e8 descritto nel dettaglio come creare una custom runtime partendo da zero. Oggi invece cerchiamo di semplificare il processo e utilizzare dove possibile elementi pronti e\/o riutilizzabili<\/strong>.<\/p>\n\n\n\n Infatti, per la maggior parte dei linguaggi di programmazione \u00e8 probabile che esista gi\u00e0 una custom runtime pronta all\u2019utilizzo, oppure che ci sia comunque una buona base di partenza per una soluzione custom su GitHub o su altri strumenti di condivisione.<\/p>\n\n\n\n La runtime che andremo ad utilizzare nei paragrafi successivi \u00e8 quella di Deno. <\/p>\n\n\n\n Deno<\/a> \u00e8 una runtime per Javascript<\/strong>, Typescript<\/strong> e WebAssembly<\/strong> basata su JS Engine e su Rust. <\/p>\n\n\n\n Ha il ruolo sia di runtime che di package manager all\u2019interno dello stesso eseguibile, quindi non \u00e8 necessario un gestore di pacchetti separato. <\/p>\n\n\n\n Deno punta a essere un ambiente di scripting sicuro e intuitivo<\/strong> per il programmatore ed \u00e8 open-source sotto licenza MIT. <\/p>\n\n\n\n Come Node.js anche Deno si concentra su un\u2019architettura ad eventi e pu\u00f2 essere utilizzato per creare web server, eseguire computazioni scientifiche ed altre soluzioni. <\/p>\n\n\n\n Deno si differenzia da Node.js in diversi aspetti:<\/p>\n\n\n\n \u00c8 bene precisare che questo non vuole essere un articolo comparativo tra Node.js e Deno. Node.js come runtime continua ad essere un’ottima scelta assicurando un time-to-market del codice applicativo minimo e un’esperienza di sviluppo molto veloce se paragonata a quella di altri linguaggi di programmazione.<\/p>\n\n\n\n Se pur ancora acerbo, per\u00f2, Deno offre alcune opportunit\u00e0 molto interessanti che andremo ad indagare proprio in queste righe.<\/p>\n\n\n\n Partiamo con il sandboxing<\/strong><\/em>, una delle sue funzionalit\u00e0 pi\u00f9 importanti. Deno \u00e8 sicuro by default, non ci sono network, file o accessi agli ambienti gi\u00e0 dati, tutti i tipi di accesso richiedono l\u2019abilitazione esplicita.<\/p>\n\n\n\n Nell\u2019immagine possiamo vedere i vari tipi di sandboxing supportati da Deno.<\/p>\n\n\n\n <\/p>\n\n\n <\/p>\n\n\n\n Entriamo nel vivo del nostro articolo: creare un semplice progetto che utilizzi Lambda con custom runtime mantenendo l\u2019approccio IaaC<\/strong>. <\/p>\n\n\n\n Su AWS, per l\u2019infrastructure as a code utilizziamo AWS CDK.<\/p>\n\n\n\n L\u2019AWS Cloud Development Kit (CDK)<\/a>, \u00e8 un framework di sviluppo software che permette l\u2019utilizzo di linguaggi noti come Typescript o Python, con i vantaggi che comportano, per descrivere e definire l\u2019infrastruttura cloud richiesta. Autonomamente CDK traduce poi il linguaggio scelto in Cloudformation al momento del deploy su cloud. <\/p>\n\n\n\n Per il pull dell\u2019immagine runtime di Deno, utilizziamo AWS Serverless Application Repository<\/a>.<\/p>\n\n\n\n L\u2019AWS Serverless Application Repository, proprio come dice il nome, \u00e8 una repository gestita per applicazioni serverless e rende possibile a team e sviluppatori di memorizzare e condividere applicazioni riutilizzabili, oltre a poter assemblare e deployare architetture in maniera semplice e veloce. <\/p>\n\n\n\n \u00c8 possibile infatti utilizzare applicazioni preesistenti direttamente dal Serverless Application Repository nella propria architettura evitando cos\u00ec di duplicare il lavoro in progetti simili e di risparmiare tempo. <\/p>\n\n\n\n Ogni applicazione \u00e8 pacchettizzata con un AWS Serverless Application Model template che definisce le risorse utilizzate. Le applicazioni condivise pubblicamente includono un link al codice sorgente dell\u2019applicazione. <\/p>\n\n\n\n Per la soluzione descritta in questo articolo utilizziamo AWS Serverless Application Repository per il pull diretto degli script necessari per il setup di una custom runtime in modo da non dover fornire nuovamente i vari shell script di bootstrap.<\/p>\n\n\n\n Iniziamo! <\/p>\n\n\n\nCustom runtime on Lambda<\/h3>\n\n\n\n
Cos\u2019\u00e8 Deno<\/h3>\n\n\n\n
<\/figcaption><\/figure><\/div>\n\n\nAWS Cloud Development Kit (CDK)<\/h3>\n\n\n\n
const denoRuntime = new CfnApplication(this, \"DenoRuntime\", {\n location: {\n applicationId:\n \"arn:aws:serverlessrepo:us-east-1:390065572566:applications\/deno\",\n semanticVersion: \"1.24.3\",\n },\n});<\/code><\/pre>\n\n\n\n
Hands-on<\/h3>\n\n\n\n