{"id":7437,"date":"2024-11-20T10:37:27","date_gmt":"2024-11-20T09:37:27","guid":{"rendered":"https:\/\/blog.besharp.it\/?p=7437"},"modified":"2024-11-20T10:56:36","modified_gmt":"2024-11-20T09:56:36","slug":"sviluppo-remoto-su-aws-da-cloud9-a-vs-code","status":"publish","type":"post","link":"https:\/\/blog.besharp.it\/it\/sviluppo-remoto-su-aws-da-cloud9-a-vs-code\/","title":{"rendered":"Sviluppo remoto su AWS: da Cloud9 a VS Code"},"content":{"rendered":"\n
Negli ultimi anni, lo sviluppo software ha visto una trasformazione significativa, con un numero crescente di sviluppatori che abbracciano approcci di lavoro distribuiti e collaborativi. Con il diffondersi delle metodologie DevOps, l’adozione del paradigma cloud-native e l’uso crescente di strumenti di automazione, la flessibilit\u00e0 e la capacit\u00e0 di lavorare su diverse piattaforme sono diventate essenziali. Tuttavia, questa flessibilit\u00e0 introduce anche sfide, in particolare quando si tratta di mantenere la coerenza degli ambienti di sviluppo, che spesso varia notevolmente a seconda del dispositivo o del sistema operativo utilizzato, nonch\u00e8 dei progetti su cui si sta lavorando.<\/p>\n\n\n\n
AWS ha annunciato<\/a> di non avere piani per sviluppare nuove funzionalit\u00e0 per Cloud9, e ormai da diversi mesi il servizio non \u00e8 disponibile per i nuovi clienti. Questo ha portato molti sviluppatori a cercare alternative che offrano maggiore personalizzazione, flessibilit\u00e0 e una migliore esperienza utente. Visual Studio Code (VS Code), combinato con un’istanza EC2 o ECS su AWS, rappresenta una valida alternativa. Questa configurazione permette agli sviluppatori di accedere a un ambiente di sviluppo remoto, potente e unificato, mantenendo le stesse configurazioni e strumenti cui sono abituati, indipendentemente dal dispositivo client utilizzato.<\/p>\n\n\n\n L’utilizzo di VS Code per lo sviluppo remoto garantisce un flusso di lavoro portabile, l\u2019accesso a risorse di calcolo on demand, e ad una connettivit\u00e0 ultra veloce per il download di librerie, dipendenze ed artefatti.<\/p>\n\n\n\n Questo approccio riduce i problemi di compatibilit\u00e0, sfrutta appieno le capacit\u00e0 delle istanze EC2 e offre la possibilit\u00e0 di integrare strumenti e configurazioni personalizzate.<\/p>\n\n\n\n In questo articolo, vedremo come configurare Visual Studio Code per lavorare su un’istanza EC2, esplorando passo dopo passo le impostazioni necessarie e i vantaggi che ne derivano.<\/p>\n\n\n\n Per ottenere un\u2019esperienza simile a quella di Cloud9 occorre che il codice risieda fisicamente sull\u2019istanza remota, cos\u00ec come le dipendenze, eventuali librerie e configurazioni specifiche. Il client locale deve essere quindi completamente integrato con l\u2019host, mostrandone il terminale ed usando l\u2019ambiente remoto per la ricerca delle librerie, per l\u2019auto-completamento e in generale per tutte le funzioni che richiedono accesso al sorgente.<\/p>\n\n\n\n Inoltre, deve essere possibile eseguire i test sull\u2019istanza remota, o avviare un server di sviluppo per testare il software su cui si sta lavorando.<\/p>\n\n\n\n Con Visual Studio Code, \u00e8 possibile ottenere tutto quello che ci occorre mediante una singola estensione, che permette di collegare il client ad un Visual Studio Code Server<\/a>.<\/p>\n\n\n\n Quello che andremo a realizzare quindi, \u00e8 molto semplicemente la configurazione di un\u2019istanza EC2 per accogliere il server di sviluppo, vedremo anche come configurare il client per connettersi all\u2019istanza ed utilizzarla per lo sviluppo remoto.<\/p>\n\n\n\n <\/p>\n\n\n <\/p>\n\n\n\n La comunicazione tra client e server \u00e8 basata su SSH, ed \u00e8 possibile configurare una singola istanza per pi\u00f9 sviluppatori sfruttando il meccanismo di autenticazione e segregazione dello spazio utente gi\u00e0 presente in Linux e supportato da SSH.<\/p>\n\n\n\n Per ogni sviluppatore \u00e8 possibile creare un account utente sull\u2019istanza e per ogni utente verr\u00e0 eseguita un\u2019istanza del server VS Code.<\/p>\n\n\n\n Sviluppare su un\u2019istanza remota offre una serie di vantaggi significativi che possono migliorare notevolmente il flusso di lavoro di un team e semplificare la gestione degli ambienti di sviluppo. <\/p>\n\n\n\n Uno dei problemi pi\u00f9 comuni, per esempio, \u00e8 l\u2019incoerenza tra le configurazioni delle macchine degli sviluppatori. Differenze anche lievi possono causare errori difficili da diagnosticare, oppure ostacolare e rallentare il lavoro collaborativo. <\/p>\n\n\n\n Con un\u2019istanza remota, tutte queste configurazioni sono centralizzate. Ogni sviluppatore lavora su un ambiente identico, potenzialmente sulla stessa istanza, laddove non vi siano controindicazioni specifiche, riducendo al minimo i problemi legati alla compatibilit\u00e0 e garantendo che le dipendenze siano sempre aggiornate e coerenti. <\/p>\n\n\n\n \u00e8 possibile configurare l\u2019host per offrire gli interpreti e le librerie pi\u00f9 comunemente utilizzate, centralizzandone il versionamento e la distribuzione.<\/p>\n\n\n\n Laddove fosse necessario, \u00e8 anche possibile installare sistemi di gestione delle versioni degli interpreti, come pyenv o nvm, e renderli disponibili a tutti gli sviluppatori.<\/p>\n\n\n\n Un ulteriore aspetto da non trascurare sono le performance. Molti framework moderni sono esosi di risorse durante le fasi di compilazione o di build, senza contare il crescente impiego di algoritmi di machine learning che richiedono ingenti quantit\u00e0 di tempo CPU, GPU dedicate e grandi quantit\u00e0 di RAM.<\/p>\n\n\n\n Svincolando l\u2019IDE dall\u2019ambiente di esecuzione utilizzando un\u2019istanza remota \u00e8 possibile assegnare agli sviluppatori risorse hardware notevolmente pi\u00f9 performanti rispetto ai dispositivi locali, aumentandole o riducendole al bisogno per ottimizzare i costi e velocizzare il lavoro.<\/p>\n\n\n\n Inoltre, se un dispositivo locale si guasta o necessita di manutenzione, non ci sono interruzioni significative: l\u2019ambiente remoto rimane intatto e pronto all\u2019uso. <\/p>\n\n\n\n Infine, centralizzando lo sviluppo su un server remoto, \u00e8 pi\u00f9 facile implementare e monitorare politiche di sicurezza e controllare l\u2019attivit\u00e0 degli utenti.<\/p>\n\n\n\n Il primo passo \u00e8 installare e configurare l’estensione “Remote – SSH”<\/a> in Visual Studio Code. Questa estensione \u00e8 il cuore della connessione remota, poich\u00e9 consente di lavorare su un’istanza remota come se fosse locale, mantenendo al contempo la potenza e la flessibilit\u00e0 del proprio ambiente di sviluppo.<\/p>\n\n\n\n Si tratta di un componente aggiuntivo per VS Code che permette di aprire una cartella su un server remoto direttamente dall’editor, utilizzando un tunnel SSH. Con questa estensione, i file vengono visualizzati, modificati e gestiti all’interno di VS Code, ma rimangono fisicamente sul server remoto. <\/p>\n\n\n\n All\u2019interno del tunnel SSH vengono convogliati anche i comandi scritti sul terminale integrato, che \u00e8 in realt\u00e0 un terminale remoto, cos\u00ec come tutte le operazioni che VS Code esegue sul FS per fornire il supporto al linguaggio ed i framework desiderati.<\/p>\n\n\n\n Installare l\u2019estensione \u00e8 facilissimo: nella barra laterale di sinistra di VS Code, clicca sull’icona delle estensioni e cerca “Remote – SSH”. Il primo risultato dovrebbe essere l\u2019estensione ufficiale di Microsoft.<\/p>\n\n\n\n <\/p>\n\n\n\n <\/p>\n\n\n\n Procediamo con l\u2019installazione dell\u2019estensione, una volta completato il processo sar\u00e0 disponibile una nuova opzione nel pannello di comando che permette di collegarsi ad un host remoto.<\/p>\n\n\n\n <\/p>\n\n\n <\/p>\n\n\n\n Non sono necessarie particolari configurazioni sull\u2019istanza remota. VS Code provveder\u00e0 all\u2019installazione del server automaticamente una volta instaurato il tunnel SSH.<\/p>\n\n\n\n La componente server infatti viene avviata in spazio utente, e non necessita di privilegi elevati.<\/p>\n\n\n\n Sar\u00e0 poi direttamente il client a mantenere aggiornata la componente server side, proponendo gli aggiornamenti all\u2019utilizzatore proprio come avviene per la parte client.<\/p>\n\n\n\n Ci\u00f2 che dobbiamo fare quindi, \u00e8 solo avviare un\u2019istanza EC2, avendo cura di scegliere le risorse pi\u00f9 adatte in base al caso d\u2019uso.<\/p>\n\n\n\n Se stai facendo una prova o se il caso d\u2019uso non \u00e8 avido di risorse, la famiglia “t” permette di ottenere il miglior prezzo, e di solito si adatta bene al pattern di utilizzo della CPU di uno sviluppatore che non compila in modo intensivo.<\/p>\n\n\n\nLa soluzione<\/h2>\n\n\n\n
<\/figure><\/div>\n\n\n
Vantaggi dello sviluppo su istanza remota<\/h2>\n\n\n\n
Configurazione del client: Estensione “Remote – SSH”<\/h2>\n\n\n\n
<\/figure>\n\n\n\n
<\/figure><\/div>\n\n\n
Configurazione dell\u2019istanza<\/h2>\n\n\n\n