REL08-BP04 Esecuzione dell'implementazione utilizzando un'infrastruttura immutabile
L'infrastruttura immutabile è un modello che richiede che non vengano applicati aggiornamenti, patch di sicurezza o modifiche di configurazione sui carichi di lavoro di produzione. Quando è necessaria una modifica, l'architettura viene costruita su una nuova infrastruttura e distribuita alla produzione.
Segui una strategia di implementazione dell'infrastruttura immutabile per aumentare l'affidabilità, la coerenza e la riproducibilità nelle implementazioni dei carichi di lavoro.
Risultato desiderato: con un'infrastruttura immutabile, non sono consentite modifiche locali (in-place) per l'esecuzione delle risorse dell'infrastruttura all'interno di un carico di lavoro. Invece, quando è necessaria una modifica, un nuovo set di risorse infrastrutturali aggiornate contenente tutte le modifiche necessarie viene implementato in parallelo alle risorse esistenti. Questa implementazione viene convalidata automaticamente e, in caso di successo, il traffico viene gradualmente trasferito al nuovo set di risorse.
Questa strategia di implementazione si applica, ad esempio, agli aggiornamenti software, alle patch di sicurezza, alle modifiche apportate all'infrastruttura, agli aggiornamenti della configurazione e agli aggiornamenti delle applicazioni.
Anti-pattern comuni:
-
Implementazione locale (in-place) di modifiche alle risorse dell'infrastruttura in esecuzione.
Vantaggi dell'adozione di questa best practice:
-
Maggiore coerenza tra ambienti: poiché non vi sono differenze nelle risorse dell'infrastruttura tra ambienti, la coerenza aumenta e i test risultano semplificati.
-
Riduzione delle deviazioni di configurazione: sostituendo le risorse dell'infrastruttura con una configurazione nota e controllata dalla versione, l'infrastruttura viene reimpostata a uno stato noto, testato e attendibile, evitando in questo modo deviazioni di configurazione.
-
Implementazioni atomiche affidabili: le implementazioni vengono completate correttamente o, in caso contrario, non generano alcun cambiamento, aumentando così la coerenza e l'affidabilità nel processo di implementazione.
-
Implementazioni semplificate: le implementazioni sono semplificate perché non devono supportare gli aggiornamenti. Gli aggiornamenti sono solo nuove distribuzioni.
-
Implementazioni più sicure con processi di rollback e ripristino rapidi: le implementazioni sono più sicure perché la versione funzionante precedente non viene modificata. Puoi eseguire il rollback se vengono rilevati errori.
-
Potenziamento del profilo di sicurezza: non consentendo modifiche all'infrastruttura, i meccanismi di accesso remoto (come SSH) possono essere disabilitati. Questo riduce il vettore di attacco, migliorando il profilo di sicurezza dell'organizzazione.
Livello di rischio associato alla mancata adozione di questa best practice: medio
Guida all'implementazione
Automazione
Quando si definisce una strategia di implementazione immutabile dell'infrastruttura, si consiglia di utilizzare l'automazione
Con il modello Infrastructure as code (IaC), le fasi di provisioning, orchestrazione e implementazione dell'infrastruttura sono definite in modo programmatico, descrittivo e dichiarativo e archiviate in un sistema di controllo del codice sorgente. L'utilizzo del modello Infrastructure as code (IaC) semplifica l'automazione dell'implementazione dell'infrastruttura e aiuta a raggiungere l'immutabilità dell'infrastruttura.
Schemi di implementazione
Quando è richiesta una modifica del carico di lavoro, la strategia di implementazione immutabile dell'infrastruttura impone l'implementazione di un nuovo set di risorse dell'infrastruttura, comprese tutte le modifiche necessarie. È importante che questo nuovo set di risorse si basi su un modello di implementazione che riduca al minimo l'impatto sugli utenti. Esistono due strategie principali per questa implementazione:
Implementazione Canary: pratica di indirizzare un piccolo numero di clienti alla nuova versione, in genere in esecuzione su una singola istanza di servizio (la release Canary). Quindi analizzerai in modo approfondito le modifiche di comportamento o gli errori generati. Puoi rimuovere il traffico dalla release Canary in caso di problemi critici e reindirizzare gli utenti alla versione precedente. Se l'implementazione viene completata correttamente, puoi continuare l'implementazione alla velocità desiderata, monitorando le modifiche alla ricerca di errori, fino al completamento dell'implementazione. AWS CodeDeploy può essere configurato con una configurazione di implementazione che abilita un'implementazione Canary.
Implementazione blu/verde: simile all'implementazione Canary, tranne per il fatto che viene implementato in parallelo un intero parco istanze dell'applicazione. Puoi alternare le distribuzioni tra i due stack (blue e green). Ancora una volta, puoi inviare il traffico alla nuova versione e tornare alla versione precedente in caso di problemi con la distribuzione. Generalmente, tutto il traffico viene trasferito contemporaneamente, tuttavia puoi anche utilizzare frazioni del traffico verso ciascuna versione per comporre l'adozione della nuova versione utilizzando le funzionalità di indirizzamento DNS ponderato di Amazon Route 53. AWS CodeDeploy e AWS Elastic Beanstalk possono essere configurati con una configurazione di distribuzione che abilita un'implementazione blu/verde.
Figura 8. Implementazione blu/verde con AWS Elastic Beanstalk e Amazon Route 53
Rilevamento della deviazione
La deviazione è definita come qualsiasi modifica che fa sì che una risorsa dell'infrastruttura abbia uno stato o una configurazione diversi dal previsto. Qualsiasi tipo di modifica non gestita della configurazione è contraria al concetto di infrastruttura immutabile e tale modifica dovrebbe essere individuata e corretta per implementare con successo l'infrastruttura immutabile.
Passaggi dell'implementazione
-
Non autorizzare la modifica locale (in-place) delle risorse dell'infrastruttura in esecuzione.
-
Puoi usare AWS Identity and Access Management (IAM)
per specificare chi o cosa può accedere a servizi e risorse in AWS, gestire centralmente le autorizzazioni a elevata granularità e analizzare l'accesso per perfezionare le autorizzazioni in AWS.
-
-
Automatizza l'implementazione delle risorse dell'infrastruttura per aumentare la riproducibilità e ridurre al minimo i potenziali errori umani.
-
Come descritto nel whitepaper Introduzione a DevOps in AWS, l'automazione è un elemento fondamentale per i servizi AWS ed è supportata internamente in tutti i servizi, le funzionalità e le offerte.
-
La preparazione preliminare delle Amazon Machine Image (AMI) può velocizzare i tempi di avvio. EC2 Image Builder
è un servizio AWS completamente gestito che consente di automatizzare la creazione, la manutenzione, la convalida, la condivisione e l'implementazione di AMI personalizzate, sicure e aggiornate per Linux o Windows. -
Alcuni dei servizi che supportano l'automazione sono:
-
AWS Elastic Beanstalk
è un servizio per implementare e dimensionare rapidamente applicazioni Web sviluppate con Java, .NET, PHP, Node.js, Python, Ruby, Go e Docker su server tradizionali come Apache, NGINX, Passenger e IIS. -
AWS Proton
aiuta i team della piattaforma a connettere e coordinare tutti i diversi strumenti di cui i team di sviluppo hanno bisogno per il provisioning dell'infrastruttura, le implementazioni del codice, il monitoraggio e gli aggiornamenti. AWS Proton abilita il provisioning e l'implementazione basati sul modello IaC di applicazioni serverless e basate su container.
-
-
L'utilizzo del modello Infrastructure as code (IaC) semplifica l'automazione dell'implementazione dell'infrastruttura e aiuta a raggiungere l'immutabilità dell'infrastruttura. AWS fornisce servizi che consentono la creazione, l'implementazione e la manutenzione dell'infrastruttura in modo programmatico, descrittivo e dichiarativo.
-
AWS CloudFormation
aiuta gli sviluppatori a creare risorse AWS in modo ordinato e prevedibile. Le risorse sono scritte in file di testo utilizzando il formato JSON o YAML. I modelli richiedono una sintassi e una struttura specifiche che dipendono dai tipi di risorse create e gestite. Crei le tue risorse in formato JSON o YAML con qualsiasi editor di codice, ad esempio AWS Cloud9, e le inserisci in un sistema di controllo delle versioni. A questo punto, CloudFormation crea i servizi specificati in modo sicuro e ripetibile. -
AWS Serverless Application Model (AWS SAM)
è un framework open source che puoi utilizzare per creare applicazioni serverless in AWS. AWS SAM si integra con altri servizi AWS ed è un'estensione di CloudFormation. -
AWS Cloud Development Kit (AWS CDK)
è un framework di sviluppo di software open source per modellare ed effettuare il provisioning delle risorse delle applicazioni cloud utilizzando linguaggi di programmazione noti. È possibile utilizzare AWS CDK per modellare l'infrastruttura dell'applicazione mediante TypeScript, Python, Java e.NET. AWS CDK utilizza CloudFormation in background per fornire risorse in modo sicuro e ripetibile. -
AWS Cloud Control API
introduce un set comune di API Create, Read, Update, Delete and List (CRUDL) per aiutare gli sviluppatori a gestire la propria infrastruttura cloud in modo semplice e coerente. Le API Cloud Control API comuni consentono agli sviluppatori di gestire in modo uniforme il ciclo di vita di AWS e i servizi di terze parti.
-
-
-
Applica modelli di implementazione che riducano al minimo l'impatto sugli utenti.
-
Implementazioni canary:
-
Implementazioni blu/verdi: il whitepaper relativo alle implementazioni blu/verdi in AWSdescrive esempi di tecniche per applicare le strategie di implementazione blu/verde.
-
-
Rileva le deviazioni a livello di configurazione o stato. Per maggiori dettagli, consulta Rilevamento di modifiche non gestite della configurazione di stack e risorse.
Risorse
Best practice correlate:
Documenti correlati:
Video correlati: