{"id":1161,"date":"2020-02-07T15:04:25","date_gmt":"2020-02-07T14:04:25","guid":{"rendered":"https:\/\/blog.besharp.it\/?p=1161"},"modified":"2021-03-17T15:10:13","modified_gmt":"2021-03-17T14:10:13","slug":"troposphere-un-tool-per-creare-gestire-e-mantenere-una-infrastruttura-aws-basata-su-cloudformation","status":"publish","type":"post","link":"https:\/\/blog.besharp.it\/it\/troposphere-un-tool-per-creare-gestire-e-mantenere-una-infrastruttura-aws-basata-su-cloudformation\/","title":{"rendered":"Troposphere: un tool per creare, gestire e mantenere una infrastruttura AWS basata su CloudFormation."},"content":{"rendered":"

La gran parte delle moderne applicazioni web SaaS sono sviluppate e deployate sull\u2019infrastruttura Cloud messa a disposizione da un Cloud Provider. In particolare Amazon Web Service \u00e8 stato il primo vero Cloud provider e ha saputo conquistare e mantenere la guida di questo settore di mercato grazie alla qualit\u00e0 e alla flessibilit\u00e0 dei servizi offerti.<\/span><\/p>\n

Le infrastrutture create su AWS stanno diventando sempre pi\u00f9 grandi per sfruttare al massimo i vantaggi dei nuovi servizi rilasciati regolarmente da AWS. Il numero di servizi managed offerti direttamente da AWS \u00e8 enorme e cresce di anno in anno.<\/span><\/p>\n

L\u2019utilizzo di servizi managed da AWS al posto, per esempio, di soluzioni custom implementate su macchine virtuali EC2 garantisce una notevole diminuzione dei costi di setup e manutenzione dell\u2019infrastruttura date che Amazon si fa carico del deployment, dell\u2019ottimizzazione, della manutenzione e anche della sicurezza di tutti i servizi offerti.<\/span><\/p>\n

Inoltre la maggior parte dei servizi AWS \u00e8 progettata per essere in alta affidabilit\u00e0 senza la necessit\u00e0 di configurazioni aggiuntive particolari, consentendo agli utilizzatori di evitare un altro grosso sforzo di configurazione e test.<\/span><\/p>\n

L\u2019utilizzo dei servizi managed da AWS come componenti base consente agli sviluppatori di aggredire con successo e in tempi rapidi un gran numero di problemi e di sviluppare praticamente ogni tipo di applicazione. Per esempio per una tipica applicazione web serverless moderna \u00e8 possibile usare Amazon Cognito per l’autenticazione,\u00a0 DynamoDB come database, SNS\/SES rispettivamente per notifiche push e mail, S3\/Cloudfront per servire il frontend e SQS per le code applicative interne.<\/span><\/p>\n

Tuttavia la maggior parte delle applicazione ha un livello di complessit\u00e0 molto maggiore di questo (sono spesso richiesti modelli di Machine Learning, datalakes, connessioni vpn verso altri networks\/servizi, tipi diversi di database, sistemi di batch processing etc.) e quindi il numero di servizi e risorse dell\u2019infrastruttura AWS sale rapidamente a numeri molto elevati (spesso centinaia di risorse create) e le infrastrutture risultanti sono cos\u00ec grandi e complesse che non possono pi\u00f9\u00a0 essere create e mantenute \u2018a mano\u2019.<\/span><\/p>\n

Infatti molto spesso modifiche ad un solo componente (per esempio un security group, un ruolo o una routing table) possono dar luogo ad effetti collaterali imprevisti rilevanti che possono bloccare vari servizi e potenzialmente l\u2019intera applicazione.<\/span><\/p>\n

In questi casi la gestione dell\u2019infrastruttura tramite IaC (Infrastructure as Code) da un grosso aiuto. Tramite IaC \u00e8 infatti possibile descrivere l\u2019intera infrastruttura AWS scrivendo codice, quindi \u00e8 possibile versionarlo usando Git come per ogni altro progetto software. Quando il codice IaC viene eseguito andr\u00e0 a creare o ad aggiornare l\u2019infrastruttura per portarla ad uno stato identico a quello descritto nel codice! Se in un secondo momento dovesse sorgere la necessit\u00e0 di modificare l\u2019infrastruttura sar\u00e0 sufficiente aggiornare il codice IaC, committare la modifica ed eseguire nuovamente il codice. In caso di problemi imprevisti \u00e8 perci\u00f2 possibile effettuare il rollback di tutta l\u2019infrastruttura all’ultima versione funzionante.<\/span><\/p>\n

Se ti sembra tutto troppo bello per essere vero probabilmente hai ragione! Ogni livello di astrazione che andiamo ad aggiungere ad un progetto software ha le sue problematiche e lo IaC non fa eccezione. Il primo problema che uno sviluppatore tipicamente incontra approcciandosi allo Iac \u00e8 la scelta dello strumento, infatti vi sono due framework IaC principali al momento disponibile per AWS: Terraform and CloudFormation. Inizialmente abbiamo sperimentato con terraform ma sono emersi alcuni problemi significativi:<\/span><\/p>\n