{"id":1204,"date":"2020-03-06T11:24:14","date_gmt":"2020-03-06T10:24:14","guid":{"rendered":"https:\/\/blog.besharp.it\/?p=1204"},"modified":"2021-03-17T15:11:27","modified_gmt":"2021-03-17T14:11:27","slug":"creare-e-mantenere-uninfrastruttura-aws-serverless-con-troposphere-e-codepipeline","status":"publish","type":"post","link":"https:\/\/blog.besharp.it\/it\/creare-e-mantenere-uninfrastruttura-aws-serverless-con-troposphere-e-codepipeline\/","title":{"rendered":"Creare e mantenere un\u2019infrastruttura AWS Serverless con Troposphere e CodePipeline."},"content":{"rendered":"

Le architetture AWS serverless, nella maggior parte dei casi di uso, offrono enormi vantaggi rispetto alle loro controparti \u201cclassiche\u201d sviluppate su istanze EC2.\u00a0<\/span><\/p>\n

Prendiamo in considerazione, a titolo di esempio, una semplice web application serverless sviluppata usando AWS Lambda (backend), DynamoDB (database), Cognito (Authentication) e S3 – CloudFront (Angular single page application): un’applicazione sviluppata in\u00a0 questo modo sar\u00e0 in grado di scalare molto rapidamente, adattandosi in modo quasi istantaneo a qualunque livello di traffico. Inoltre coster\u00e0 significativamente meno di un applicazione con hosting su EC2 visto che verr\u00e0 fatturato da AWS un prezzo proporzionale al traffico effettivamente ricevuto invece del costo fisso di una macchina virtuale sempre accesa. Un ulteriore vantaggio consiste nell\u2019abbattimento dei costi di manutenzione dato che i sistemisti non dovranno pi\u00f9 occuparsi di aggiornare il sistema operativo, configurare l\u2019hardening della macchina, installare patch di sicurezza etc.<\/span><\/p>\n

\"\"<\/p>\n

Tutto ci\u00f2 fa s\u00ec che migrare verso il paradigma serverless sia una scelta naturale in buona parte delle situazioni: si andr\u00e0 a pagare meno per un servizio pi\u00f9 scalabile e pi\u00f9 manutenibile.<\/span><\/p>\n

Tuttavia il vero prezzo da pagare per usufruire per usufruire dei vantaggi del paradigma serverless \u00e8 l\u2019aumento della complessit\u00e0 dell\u2019infrastruttura AWS: mentre con una semplice applicazione deployata su macchine EC2 \u00e8 sufficiente creare un AMI della configurazione funzionante del sistema operativo, agganciarla ad un autoscaling group e configurare un Load balancer per essere pronti ad andare in produzione, nel caso di\u00a0 un’applicazione serverless le componenti architetturali da configurare sono molteplici. Di solito si dovranno gestire svariate Lambda, spesso un numero paragonabile di rotte su Api Gateway, oltre ovviamente alla configurazioni di DynamoDB. Inoltre a differenza del codice deployato su EC2, che \u00e8 di solito autocontenuto, il codice della lambda \u00e8 spesso fortemente integrato con l’infrastruttura e modifiche al codice spesso richiedono di modificare anche l\u2019infrastruttura Per esempio l’aggiunta di una nuova Api tipicamente richiede la creazione di una nuova funzione lambda e della corrispondente rotta su Api Gateway.<\/span><\/p>\n

Ovviamente cercare di gestire manualmente tutte queste risorse diventa rapidamente impossibile e rende necessario ricorrere ad un diverso approccio: gestire le varie risorse, infrastruttura compresa, tramite pipelines di Continuous Integration\/Continuous Delivery (CD\/CI) con AWS CodePipeline. Nel caso del backend, in questo tipo di set-up, ogni volta che un developer esegue un push sul repo Git, il codice viene scaricato dal repo direttamente da AWS CodePipeline, viene eseguita una build del codice tramite AWS CodeBuild che prepara un pacchetto (o dei pacchetti) contenenti il codice delle Lambda e anche uno o pi\u00f9 template Cloudformation che descrivono i cambiamenti che devono essere apportati all\u2019infrastruttura per consentire il funzionamento delle nuove Lambda. Infine, nell\u2019ultimo step della pipeline, Cloudformation si occupa di eseguire il template aggiornando\/creando le lambda e allo stesso tempo creando\/modificando le varie risorse infrastrutturali usate dalle lambda.<\/span><\/p>\n

Sebbene sia possibile gestire l\u2019intera infrastruttura con un solo Cloudformation\/Pipeline questo risulta spesso complesso e poco efficiente, pertanto dovrebbe essere evitato. Un modo migliore di procedere \u00e8 invece quello di creare pi\u00f9 Stacks Cloudformation,<\/strong> uno per ogni macro componente dell\u2019applicazione. Per esempio nel caso piuttosto semplice di una web application classica come quello presentato all\u2019inizio del post si potrebbe creare tre Cloudformation stacks, uno per il backend, uno per frontend ed uno per gli altri componenti infrastrutturali (Dynamo, Cognito, etc) ognuno deployato in modo automatico da una sua pipeline dedicata.\u00a0<\/span><\/p>\n

La creazione di una pipeline dedicata solamente alle varie risorse necessarie all\u2019infrastruttura serverless, ma non strettamente legate al codice, consente agli sviluppatori di avere una grossa libert\u00e0 di movimento in quanto possono autonomamente creare e testare nuove funzionalit\u00e0 ed eseguire modifiche e miglioramenti all’infrastruttura dell\u2019Account AWS senza avere la possibilit\u00e0 di eseguire azioni distruttive.<\/span><\/p>\n

Per semplificare la vita dei developer sarebbe consigliabile usare Troposphere come linguaggio di Infrastructure as Code e trasformare i file python di troposphere in template YAML solo nei vari step di Build. In questo modo \u00e8 possibile usufruire della versatilit\u00e0 di CloudFormation unita alla semplicit\u00e0 di un linguaggio ad alto livello interpretato come Python.<\/span><\/p>\n

Inoltre sarebbe preferibile che tutta la configurazione base dell\u2019account, come la configurazione di CloudTrail, dei FlowLogs della VPC e la creazione delle pipeline sopra descritte venisse portata a termine da un ulteriore Cloudformation Stack dedicato in modo da avere una \u201cricetta\u201d base che possa essere utilizzata come documentazione e che possa rendere possibile se necessario la configurazione rapida di cccount identici, per esempio destinati ad altri ambienti di sviluppo o a necessit\u00e0 di disaster recovery.<\/span><\/p>\n

\"\"<\/p>\n

Il Cloudformation Template per la parte di Backend dell\u2019applicazione pu\u00f2 essere creato direttamente dagli sviluppatori oppure generato tramite una routine automatica da uno dei tanti framework per sviluppo Serverless come il Serverless Framework, chalice, Zappa o da AWS Amplify. In caso si richieda una maggiore versatilit\u00e0 \u00e8 anche possibile usare un SAM. AWS SAM \u00e8 un linguaggio di templating semplificato rispetto a cloudformation che consente di creare le varie risorse tipiche dei progetti serverless (e.g. funzioni Lambda, Api gateways etc..). Un template SAM pu\u00f2 poi essere convertito direttamente in un template cloudformation tramite un comando della AWS cli (<\/span>AWS CloudFormation package).<\/span><\/p>\n

Per concludere abbiamo presentato una procedura per rendere facilmente mantenibile una applicazione serverless anche molto complessa utilizzando CodePipeline e Troposphere\/Cloudformation. Se siete curiosi e volete saperne di pi\u00f9 non esitate a scriverci nei commenti o per mail!<\/a><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"

Le architetture AWS serverless, nella maggior parte dei casi di uso, offrono enormi vantaggi rispetto alle loro controparti \u201cclassiche\u201d sviluppate […]<\/p>\n","protected":false},"author":9,"featured_media":1224,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[241],"tags":[285,253,267,301],"yoast_head":"\nCreare e mantenere un\u2019infrastruttura AWS Serverless con Troposphere e CodePipeline. - Proud2beCloud Blog<\/title>\n<meta name=\"description\" content=\"Ecco una procedura per rendere facilmente mantenibile un'applicazione serverless anche molto complessa utilizzando CodePipeline e Troposphere\/Cloudformation\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.besharp.it\/it\/creare-e-mantenere-uninfrastruttura-aws-serverless-con-troposphere-e-codepipeline\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Creare e mantenere un\u2019infrastruttura AWS Serverless con Troposphere e CodePipeline.\" \/>\n<meta property=\"og:description\" content=\"Ecco una procedura per rendere facilmente mantenibile un'applicazione serverless anche molto complessa utilizzando CodePipeline e Troposphere\/Cloudformation\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.besharp.it\/it\/creare-e-mantenere-uninfrastruttura-aws-serverless-con-troposphere-e-codepipeline\/\" \/>\n<meta property=\"og:site_name\" content=\"Proud2beCloud Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-03-06T10:24:14+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-03-17T14:11:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.besharp.it\/wp-content\/uploads\/2020\/03\/codepipeline27-27.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1668\" \/>\n\t<meta property=\"og:image:height\" content=\"1251\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Matteo Moroni\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Creare e mantenere un\u2019infrastruttura AWS Serverless con Troposphere e CodePipeline.\" \/>\n<meta name=\"twitter:description\" content=\"Ecco una procedura per rendere facilmente mantenibile un'applicazione serverless anche molto complessa utilizzando CodePipeline e Troposphere\/Cloudformation\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/blog.besharp.it\/wp-content\/uploads\/2020\/03\/codepipeline27-27.png\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matteo Moroni\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.besharp.it\/it\/creare-e-mantenere-uninfrastruttura-aws-serverless-con-troposphere-e-codepipeline\/\",\"url\":\"https:\/\/blog.besharp.it\/it\/creare-e-mantenere-uninfrastruttura-aws-serverless-con-troposphere-e-codepipeline\/\",\"name\":\"Creare e mantenere un\u2019infrastruttura AWS Serverless con Troposphere e CodePipeline. - Proud2beCloud Blog\",\"isPartOf\":{\"@id\":\"https:\/\/blog.besharp.it\/it\/#website\"},\"datePublished\":\"2020-03-06T10:24:14+00:00\",\"dateModified\":\"2021-03-17T14:11:27+00:00\",\"author\":{\"@id\":\"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/0b3e69eb2dcb125d58476b906ec1c7bc\"},\"description\":\"Ecco una procedura per rendere facilmente mantenibile un'applicazione serverless anche molto complessa utilizzando CodePipeline e Troposphere\/Cloudformation\",\"breadcrumb\":{\"@id\":\"https:\/\/blog.besharp.it\/it\/creare-e-mantenere-uninfrastruttura-aws-serverless-con-troposphere-e-codepipeline\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.besharp.it\/it\/creare-e-mantenere-uninfrastruttura-aws-serverless-con-troposphere-e-codepipeline\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.besharp.it\/it\/creare-e-mantenere-uninfrastruttura-aws-serverless-con-troposphere-e-codepipeline\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blog.besharp.it\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Creare e mantenere un\u2019infrastruttura AWS Serverless con Troposphere e CodePipeline.\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.besharp.it\/it\/#website\",\"url\":\"https:\/\/blog.besharp.it\/it\/\",\"name\":\"Proud2beCloud Blog\",\"description\":\"il blog di beSharp\",\"alternateName\":\"Proud2beCloud Blog\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.besharp.it\/it\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/0b3e69eb2dcb125d58476b906ec1c7bc\",\"name\":\"Matteo Moroni\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/acad790b9bb4c6d62e076ecdc1debb35?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/acad790b9bb4c6d62e076ecdc1debb35?s=96&d=mm&r=g\",\"caption\":\"Matteo Moroni\"},\"description\":\"DevOps e Solution Architect di beSharp, mi occupo di sviluppare soluzioni Saas, Data Analysis, HPC e di progettare architetture non convenzionali a complessit\u00e0 divergente. Appassionato di informatica e fisica, da sempre lavoro nella prima e ho un PhD nella seconda. Parlare di tutto ci\u00f2 che \u00e8 tecnico e nerd mi rende felice!\",\"url\":\"https:\/\/blog.besharp.it\/it\/author\/matteo-moroni\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Creare e mantenere un\u2019infrastruttura AWS Serverless con Troposphere e CodePipeline. - Proud2beCloud Blog","description":"Ecco una procedura per rendere facilmente mantenibile un'applicazione serverless anche molto complessa utilizzando CodePipeline e Troposphere\/Cloudformation","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.besharp.it\/it\/creare-e-mantenere-uninfrastruttura-aws-serverless-con-troposphere-e-codepipeline\/","og_locale":"it_IT","og_type":"article","og_title":"Creare e mantenere un\u2019infrastruttura AWS Serverless con Troposphere e CodePipeline.","og_description":"Ecco una procedura per rendere facilmente mantenibile un'applicazione serverless anche molto complessa utilizzando CodePipeline e Troposphere\/Cloudformation","og_url":"https:\/\/blog.besharp.it\/it\/creare-e-mantenere-uninfrastruttura-aws-serverless-con-troposphere-e-codepipeline\/","og_site_name":"Proud2beCloud Blog","article_published_time":"2020-03-06T10:24:14+00:00","article_modified_time":"2021-03-17T14:11:27+00:00","og_image":[{"width":1668,"height":1251,"url":"https:\/\/blog.besharp.it\/wp-content\/uploads\/2020\/03\/codepipeline27-27.png","type":"image\/png"}],"author":"Matteo Moroni","twitter_card":"summary_large_image","twitter_title":"Creare e mantenere un\u2019infrastruttura AWS Serverless con Troposphere e CodePipeline.","twitter_description":"Ecco una procedura per rendere facilmente mantenibile un'applicazione serverless anche molto complessa utilizzando CodePipeline e Troposphere\/Cloudformation","twitter_image":"https:\/\/blog.besharp.it\/wp-content\/uploads\/2020\/03\/codepipeline27-27.png","twitter_misc":{"Scritto da":"Matteo Moroni","Tempo di lettura stimato":"4 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.besharp.it\/it\/creare-e-mantenere-uninfrastruttura-aws-serverless-con-troposphere-e-codepipeline\/","url":"https:\/\/blog.besharp.it\/it\/creare-e-mantenere-uninfrastruttura-aws-serverless-con-troposphere-e-codepipeline\/","name":"Creare e mantenere un\u2019infrastruttura AWS Serverless con Troposphere e CodePipeline. - Proud2beCloud Blog","isPartOf":{"@id":"https:\/\/blog.besharp.it\/it\/#website"},"datePublished":"2020-03-06T10:24:14+00:00","dateModified":"2021-03-17T14:11:27+00:00","author":{"@id":"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/0b3e69eb2dcb125d58476b906ec1c7bc"},"description":"Ecco una procedura per rendere facilmente mantenibile un'applicazione serverless anche molto complessa utilizzando CodePipeline e Troposphere\/Cloudformation","breadcrumb":{"@id":"https:\/\/blog.besharp.it\/it\/creare-e-mantenere-uninfrastruttura-aws-serverless-con-troposphere-e-codepipeline\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.besharp.it\/it\/creare-e-mantenere-uninfrastruttura-aws-serverless-con-troposphere-e-codepipeline\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.besharp.it\/it\/creare-e-mantenere-uninfrastruttura-aws-serverless-con-troposphere-e-codepipeline\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.besharp.it\/it\/"},{"@type":"ListItem","position":2,"name":"Creare e mantenere un\u2019infrastruttura AWS Serverless con Troposphere e CodePipeline."}]},{"@type":"WebSite","@id":"https:\/\/blog.besharp.it\/it\/#website","url":"https:\/\/blog.besharp.it\/it\/","name":"Proud2beCloud Blog","description":"il blog di beSharp","alternateName":"Proud2beCloud Blog","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.besharp.it\/it\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"it-IT"},{"@type":"Person","@id":"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/0b3e69eb2dcb125d58476b906ec1c7bc","name":"Matteo Moroni","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/blog.besharp.it\/it\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/acad790b9bb4c6d62e076ecdc1debb35?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/acad790b9bb4c6d62e076ecdc1debb35?s=96&d=mm&r=g","caption":"Matteo Moroni"},"description":"DevOps e Solution Architect di beSharp, mi occupo di sviluppare soluzioni Saas, Data Analysis, HPC e di progettare architetture non convenzionali a complessit\u00e0 divergente. Appassionato di informatica e fisica, da sempre lavoro nella prima e ho un PhD nella seconda. Parlare di tutto ci\u00f2 che \u00e8 tecnico e nerd mi rende felice!","url":"https:\/\/blog.besharp.it\/it\/author\/matteo-moroni\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/posts\/1204"}],"collection":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/comments?post=1204"}],"version-history":[{"count":0,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/posts\/1204\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/media\/1224"}],"wp:attachment":[{"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/media?parent=1204"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/categories?post=1204"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.besharp.it\/it\/wp-json\/wp\/v2\/tags?post=1204"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}