Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS User Group Cuneo - Serverless 101

AWS User Group Cuneo - Serverless 101

Con questo evento vogliamo dare un'introduzione al mondo Serverless, cos'è, quali sono i pro e i contro di questa tecnologia.

Approfondiremo i servizi AWS alla base del Serverless, come Lambda, API Gateway, S3, DynamoDB, SNS e come interagiscono tra di loro. Metteremo a confronto Serverless Framework, Amplify e Claudia.js per scegliere al meglio quali framework usare ed in quali circostanze.

Fabio Gollinucci

March 20, 2019
Tweet

More Decks by Fabio Gollinucci

Other Decks in Technology

Transcript

  1. Cosa significa serverless? È l'architettura nativa del cloud che consente

    di trasferire più responsabilità operative ad AWS, aumentando agilità e innovazione. Consente di creare ed eseguire applicazioni e servizi senza dover gestire alcun server. NESSUNA GESTIONE DI SERVER Non è più necessario allocare o gestire server. Non è necessario installare, gestire e amministrare alcun software o runtime. SCALABILITÀ E FLESSIBILITÀ Le risorse dell'applicazione saranno ricalibrate automaticamente in base al carico di lavoro. COSTO OTTIMIZZATO Si paga per durata di esecuzione e non per unità di server. ELEVATA DISPONIBILITÀ Il serverless fornisce elevata disponibilità e funzionalità di tolleranza ai guasti di default, senza altre configurazione necessarie in tal senso.
  2. I Servizi Gestione dei file - S3 È un servizio

    di storage di oggetti che offre scalabilità, disponibilità dei dati, sicurezza e prestazioni all'avanguardia. S3 è progettato per una durabilità dei dati del 99,999999999% e storage infinito. Gestione API - API Gateway È un servizio completamente gestito che semplifica agli sviluppatori la creazione, la pubblicazione, la manutenzione, il monitoraggio e la protezione delle API su qualsiasi scala. Gestione dei Dati - DynamoDB È un database che supporta i modelli di dati di tipo documento e di tipo chiave-valore che offre prestazioni di pochi millisecondi a qualsiasi livello. Si possono creare applicazioni con throughput e storage virtualmente illimitati. Computazione - Lambda Consente di eseguire codice senza dover effettuare il provisioning né gestire server. Le tariffe sono calcolate in base ai tempi di elaborazione, perciò non viene addebitato alcun costo quando il codice non è in esecuzione.
  3. Architettura monolitica • Aggiornamento dell’intera applicazione anche solo per piccoli

    bugfix • L’intera applicazione scala tutta assieme • Gestione architetturale più semplice Gestione utenti Post Prodotti Carrello Pagamento Applicazione Magazzino
  4. Architettura a microservizi • Aggiornamento di ogni sua parte singolarmente

    • Scalabilità selettiva del servizio • Ottimizzazione del carico di lavoro • Possibilità di migrazione e delegazione di alcuni servizi Gestione utenti Post Prodotti Carrello Pagamento
  5. Function-as-a-Service (FaaS) È un modello di erogazione dei servizi basato

    sulle funzioni del codice. Lo sviluppatore non dove preoccuparsi del provisioning, dei server o delle configurazioni dell’infrastruttura, ma solo di creare funzioni che possano operare in modo indipendente dalle applicazioni.
  6. AWS - Architettura Serverless Utenti example.com Website Bucket api.example.com AddProductToCart

    Tabella Cart GetProduct DoCheckout Media Bucket Tabella Product Tabella Stock OutOfStockAlert Stock Topic Email Magazzino ChangeProductQty Orders Queue ProcessOrder SES Admin Spedizione ResizeImage
  7. Infrastruttura come codice (IaC - Infrastructure as code) È il

    processo di gestione e provisioning dei data center attraverso file di configurazione. Si intende quindi la pratica di usare script per configurare l’infrastruttura di elaborazione invece di configurare le macchine manualmente (es. attraverso la console di gestione). • Consente di gestire le macchine virtuali come se fossero programmi senza dover configurare e aggiornare manualmente i singoli elementi. • Può essere creata una copia identica della configurazione in pochi secondi con il solo uso degli script di configurazione. • Aiuta a gestire configurazioni complesse dividendo i moduli i componenti dell’infrastruttura.
  8. Framework per applicazioni Serverless Riduce lo separazione tra codice dell’applicazione

    e l’infrastruttura rendendole una cosa sola. Serverless Framework Il più diffuso ed utilizzato, centinaia di plugin disponibile. Permette di descrivere i servizi in linguaggio YAML con interpolazioni ed inclusione di file esterni. Modulare, aggiornato e potente. Claudia.js (Framework) minimalistico, richiede pochissime configurazioni nel package.json del progetto. Facile da eseguire localmente tramite pacchetti come “claudia-local-api”. Amplify Progetto ufficiale AWS per la creazione delle risorse tramite sistema di scaffolding. In rapida crescita, ora è presente nella console di gestione di AWS come servizio. SAM Framework ufficiale di AWS, potente sistema di emulazione locale per Lambda, API Gateway e DynamoDB. Sistema ufficiale di pacchettizzazione per Serverless Application Repository. BE FE BE BE BE FE
  9. Sito web statico Un sito web composto da file HTML,

    sovente statici generati da sistemi di template, dove la struttura e le informazioni non vengono modificate dal server durante il render della pagina. L'utente può visualizzare i contenuti forniti dall'autore di un sito, ma non ne può modificare lo stato. Quando usarlo? • Per siti web vetrina che non hanno bisogno di un dinamismo dei contenuti così frequente. • Quando è necessaria un latenza più bassa possibile ( < 100ms ). • Per ridurre all’osso le spese di gestione dell’infrastruttura. • Aver un’architettura completamente serverless con una scalabilità infinita. Che servizi utilizzare? • AWS S3 + CloudFront • GitLab/GitHub pages • Netlify
  10. Serverless Framework - inizializzazione 42 template disponibili Per 7 diversi

    hosting/cloud provider aws-alexa-typescript, aws-clojure-gradle, aws-clojurescript-gradle, aws-csharp, aws-fsharp, aws-go-dep, aws-go-mod, aws-go, aws- groovy-gradle, aws-java-gradle, aws-java-maven, aws-kotlin-jvm- gradle, aws-kotlin-jvm-maven, aws-kotlin-nodejs-gradle, aws-nodejs- ecma-script, aws-nodejs-typescript, aws-nodejs, aws-provided, aws- python, aws-python3, aws-ruby, aws-scala-sbt, azure-nodejs, cloudflare-workers-enterprise, cloudflare-workers, fn-go, fn-nodejs, google-go, google-nodejs, google-python, kubeless-nodejs, kubeless- python, openwhisk-java-maven, openwhisk-nodejs, openwhisk-php, openwhisk-python, openwhisk-ruby, openwhisk-swift, spotinst-java8, spotinst-nodejs, spotinst-python, spotinst-ruby, È presente un template “plugin” per la creazione di un plugin serverless
  11. Serverless Framework – files di progetto File di configurazione: serverless.yml

    Nome del progetto Configurazioni del provider e runtime da utilizzare Nome della funzione da creare (Lambda) Posizione del file contenente il codice
  12. Serverless Framework – files di progetto Codice della funzione Lambda:

    handler.js Evento HTTP status code e contenuto della risposta
  13. Serverless Framework – todo app Utenti API Gateway GetTodos Todo

    Table CreateTodo UpdateTodo Frontend DeleteTodo