Best practice di CloudFormation - AWS CloudFormation
Abbreviare il ciclo di feedback per migliorare la velocità di sviluppoOrganizzare gli stack per ciclo di vita e proprietàUtilizza i riferimenti tra stack per restituire il valore di un output esportato da un altro stackUtilizza CloudFormation StackSets per le implementazioni con più account e regioniVerificare le quote per tutti i tipi di risorseRiutilizzare i modelli per replicare gli stack in ambienti multipliUtilizzare i moduli per riutilizzare le configurazioni delle risorseUtilizzare l’infrastruttura come pratica di codiceNon incorporare le credenziali nei modelliTipi di parametri specifici per AWSUtilizzare i vincoli dei parametriUtilizzo degli pseudoparametri per promuovere la portabilitàUtilizza AWS::CloudFormation::Init per implementare le applicazioni software sulle istanze Amazon EC2Utilizzare gli script helper più recentiConvalidare i modelli prima di utilizzarliUtilizzare YAML o JSON per creare i modelliImplementazione di una strategia di assegnazione tag completaSfrutta le macro dei modelli per trasformazioni avanzateGestire tutte le risorse dello stack tramite CloudFormationCreare set di modifiche prima di aggiornare gli stackUtilizzare le policy di stack per proteggere le risorseUtilizza AWS CloudTrail per registrare le chiamate CloudFormationUtilizzare la revisione del codice e i controlli di revisione per gestire i modelliAggiornare regolarmente le istanze Amazon EC2Utilizza regolarmente il rilevamento della derivaConfigura i trigger di rollback per il ripristino automaticoImplementa strategie efficaci di rifattorizzazione degli stackUtilizzo di CloudFormation Hooks per la gestione del ciclo di vitaUsa il generatore IaC per creare modelli a partire da risorse esistentiUtilizza AWS Infrastructure Composer per la progettazione di modelli visiviPrendi in considerazione l’utilizzo di AWS Cloud Development Kit (AWS CDK) per infrastrutture complesseUtilizza IAM per controllare gli accessiApplica il principio del privilegio minimoProteggi i parametri sensibiliImplementa la policy come codice con AWS CloudFormation Guard

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Best practice di CloudFormation

Le best practice sono raccomandazioni che possono aiutarti a utilizzare CloudFormation in modo più efficiente e ad adottare delle pratiche sicure nell’arco del suo intero flusso di elaborazione. Scopri come pianificare e organizzare gli stack, creare modelli che descrivono le risorse e le applicazioni software in esecuzione su di esse e come gestire i tuoi stack e le loro risorse. Le seguenti best practice sono basate sull’esperienza pratica dei clienti CloudFormation attuali.

Pianificazione e organizzazione
Creazione di modelli
Gestione degli stack
Strumenti di creazione
Conformità e sicurezza

Abbreviare il ciclo di feedback per migliorare la velocità di sviluppo

Adotta pratiche e strumenti che contribuiscono ad abbreviare il ciclo di feedback per la tua infrastruttura che descrivi con modelli CloudFormation. Ciò include l’esecuzione tempestiva di linting e test dei modelli nella tua workstation; quando esegui l’operazione, hai l’opportunità di scoprire potenziali problemi di sintassi e configurazione anche prima di inviare i tuoi contributi a un repository di codici sorgente. L’individuazione anticipata di tali problemi contribuisce a evitare che raggiungano ambienti formali del ciclo di vita, ad esempio sviluppo, garanzia di qualità e produzione. Questo approccio di test anticipato e anticipo dell’errore (fail fast) offre i vantaggi di ridurre i tempi di attesa per rilavorazioni, ridurre le potenziali aree di impatto e aumentare il livello di affidabilità delle operazioni di provisioning.

Le scelte di strumenti che facilitano procedure per anticipare l’errore includono gli strumenti a riga di comando CloudFormation Linter (cfn-lint) e TaskCat. Lo strumento cfn-lint consente di convalidare i tuoi modelli CloudFormation rispetto alla Specifica delle risorse CloudFormation. Ciò include la verifica di valori validi per le proprietà delle risorse e procedure consigliate. I plug-in per cfn-lint sono disponibili per numerosi editor di codice; ciò consente di visualizzare i problemi nel tuo editor e di ottenere un feedback diretto dal linter. Puoi anche scegliere di integrare cfn-lint nella configurazione del tuo repository di codici sorgente, in modo da poter eseguire la convalida del modello quando esegui il commit dei tuoi contributi. Per ulteriori informazioni, consulta Git pre-commit validation of CloudFormation templates with cfn-lint. Dopo aver eseguito il linting iniziale e risolto eventuali problemi emersi da cfn-lint, puoi utilizzare TaskCat per testare i modelli programmaticamente creando stack nelle Regioni AWS scelte. TaskCat genera anche un report con verifiche dell’esito positivo/negativo per ogni regione scelta.

Per una procedura pratica e dettagliata sull’utilizzo di entrambi gli strumenti per abbreviare il ciclo di feedback, segui il Laboratorio di linting and testing del Workshop CloudFormation.

Organizzare gli stack per ciclo di vita e proprietà

Utilizzare il ciclo di vita e la proprietà delle risorse AWS per decidere quali risorse assegnare a ciascuno stack. Inizialmente, è possibile inserire tutte le risorse in un unico stack, ma via via che le dimensioni e l’ambito si ampliano, la gestione di un singolo stack può essere complessa e dispendiosa in termini di tempo. Raggruppando le risorse con cicli di vita e proprietà comuni, i proprietari possono apportare modifiche ai loro set di risorse con processi e pianificazioni personali, senza interferire con altre risorse.

Ad esempio, immaginiamo un team di sviluppatori e tecnici che possiedono un sito Web ospitato in istanze Amazon EC2 Auto Scaling dietro a un bilanciatore del carico. Poiché il sito Web ha il proprio ciclo di vita e viene gestito dal team dei siti Web, è possibile creare uno stack per il sito Web e le sue risorse. Ora immaginiamo che il sito Web utilizza anche database di backend ubicati in un altro stack, di proprietà e gestito dagli amministratori del database. Quando il team dei siti Web o il team di database devono aggiornare le proprie risorse, possono farlo senza influenzare lo stack dell’altra parte. Se tutte le risorse fossero in un singolo stack, coordinare e comunicare gli aggiornamenti sarebbe complicato.

Per ulteriori informazioni su come organizzare gli stack, puoi usare due framework comuni: un’architettura multilivello e un’architettura orientata ai servizi (SOA).

L’architettura multilivello organizza gli stack in più livelli orizzontali creati uno sull’altro, in cui ogni livello dipende dal livello direttamente sottostante. Possono essere presenti uno o più stack in ciascun livello, ma all’interno di ciascun livello lo stack deve disporre di risorse AWS con cicli di vita e proprietà simili.

Con un’architettura orientata ai servizi, è possibile organizzare i grandi problemi aziendali in parti semplici da gestire. Ognuna di queste parti è un servizio che ha uno scopo ben definito e rappresenta un’unità completa di funzionalità. È possibile mappare questi servizi a uno stack, ognuno con proprietari e ciclo di vita propri. Questi servizi (stack) possono essere cablati insieme in modo che possano interagire l’uno con l’altro.

Utilizza i riferimenti tra stack per restituire il valore di un output esportato da un altro stack

Quando organizzi le tue risorse AWS in base al ciclo di vita e alla proprietà, puoi creare uno stack che utilizza le risorse in un altro stack. È possibile utilizzare valori fissi o parametri di input per trasmettere gli ID e i nomi delle risorse. Tuttavia, questi metodi possono rendere i modelli difficili da riutilizzare o possono aumentare i costi per attivare uno stack. Invece, utilizza i riferimenti tra stack per restituire il valore di un output esportato da un altro stack così che gli altri stack possano usarli. Stack possono utilizzare le risorse esportate chiamandole con la funzione Fn::ImportValue.

Ad esempio, potresti volere un stack di rete che includa un VPC, un gruppo di sicurezza e una sottorete. Vuoi che tutte le applicazioni Web pubbliche utilizzino queste risorse. Esportando le risorse, consenti a tutti gli stack con applicazioni Web pubbliche di utilizzarle. Per ulteriori informazioni, consulta Ottieni gli output esportati da uno stack di CloudFormation distribuito.

Utilizza CloudFormation StackSets per le implementazioni con più account e regioni

CloudFormation StackSets estende le funzionalità degli stack consentendoti di creare, aggiornare o eliminare stack in più account e regioni in un’unica operazione. Usa StackSets per implementare componenti di infrastruttura comuni, controlli di conformità o servizi condivisi in tutta l’organizzazione.

Quando usi StackSets, implementa le autorizzazioni gestite dal servizio con AWS Organizations per una gestione semplificata delle autorizzazioni. Questo approccio consente di implementare gli StackSets sugli account all’interno dell’organizzazione senza la necessità di configurare manualmente i ruoli IAM in ciascun account.

Per ulteriori informazioni sugli StackSets, consulta StackSets concepts.

Verificare le quote per tutti i tipi di risorse

Prima di avviare uno stack, assicurati di poter creare tutte le risorse che desideri senza toccare i limiti dell’account AWS. Se si arriva al limite, CloudFormation non potrà creare lo stack finché non avrai aumentato la quota o non avrai eliminato risorse aggiuntive. Ogni servizio può avere vari limiti di cui devi essere a conoscenza prima di avviare uno stack. Ad esempio, per impostazione predefinita, è possibile avviare solo 2000 stack CloudFormation per Regione nel proprio Account AWS. Per ulteriori informazioni sui limiti e su come aumentare i limiti predefiniti, consulta la Quote di servizio di AWS nella Riferimenti generali di AWS.

Riutilizzare i modelli per replicare gli stack in ambienti multipli

Dopo aver configurato stack e risorse, puoi riutilizzare i modelli per replicare l’infrastruttura in più ambienti. Ad esempio, puoi creare ambienti di sviluppo, di test e di produzione per testare le modifiche prima di implementarle nella produzione. Per rendere riutilizzabili i modelli, utilizza le sezioni dedicate ai parametri, alle mappature e alle condizioni, in modo da poter personalizzare lo stack quando lo crei. Ad esempio, per i tuoi ambienti di sviluppo, puoi specificare un tipo di istanza a un costo inferiore rispetto all’ambiente di produzione, ma con tutte le altre configurazioni e impostazioni invariate. Per ulteriori informazioni su parametri, mappature e condizioni, consulta Sezioni del modello CloudFormation.

Utilizzare i moduli per riutilizzare le configurazioni delle risorse

Con la crescita dell’infrastruttura, possono emergere schemi comuni in cui gli stessi componenti vengono dichiarati in ciascun modello. I moduli sono un modo per creare pacchetti di configurazioni delle risorse per l’inclusione su modelli di stack, in modo trasparente, gestibile e ripetibile. I moduli possono incapsulare configurazioni di servizio comuni e best practice come blocchi predefiniti modulari e personalizzabili da includere nei modelli di stack.

Questi elementi costitutivi possono essere per un’unica risorsa, come le best practice per la definizione di un’istanza Amazon Elastic Compute Cloud (Amazon EC2), oppure possono essere per più risorse, per definire modelli comuni di architettura dell’applicazione. Questi elementi costitutivi possono essere nidificati in altri moduli, in modo da poter impilare le best practice in elementi costitutivi di livello superiore. I moduli CloudFormation sono disponibili nel Registro di CloudFormation, in modo da poterli utilizzare proprio come una risorsa nativa. Quando si utilizza un modulo CloudFormation, il modello di modulo viene espanso nel modello in uso, che consente di accedere alle risorse all’interno del modulo utilizzando Ref o Fn::GetAtt. Per ulteriori informazioni, consulta Creazione di configurazioni di risorse riutilizzabili che possono essere incluse nei modelli con i moduli CloudFormation.

Utilizzare l’infrastruttura come pratica di codice

Tratta i modelli CloudFormation come un codice implementando le procedure infrastructure as code (IaC). Archivia i tuoi modelli nei sistemi di controllo delle versioni, implementa le revisioni del codice e utilizza test automatici per convalidare le modifiche. Questo approccio garantisce la coerenza, migliora la collaborazione e fornisce un audit trail per le modifiche all’infrastruttura.

Prendi in considerazione l’implementazione di pipeline CI/CD per il codice dell’infrastruttura al fine di automatizzare il test e l’implementazione dei tuoi modelli CloudFormation. Strumenti come AWS CodePipeline, AWS CodeBuild e AWS CodeDeploy possono essere utilizzati per creare flussi di lavoro automatizzati per le implementazioni dell’infrastruttura.

Per ulteriori informazioni sull’implementazione delle best practice IaC, consulta Using AWS CloudFormation as an IaC tool.

Per ulteriori informazioni sull’utilizzo della distribuzione continua con CloudFormation, consulta Continuous delivery with CodePipeline.

Non incorporare le credenziali nei modelli

Anziché incorporare informazioni sensibili nei modelli CloudFormation, è consigliabile utilizzare riferimenti dinamici nel modello di stack.

I riferimenti dinamici forniscono un modo compatto ed efficace per fare riferimento a valori esterni che sono archiviati e gestiti in altri servizi, come AWS Systems Manager Parameter Store o AWS Secrets Manager. Quando utilizzi un riferimento dinamico, CloudFormation recupera il valore del riferimento specificato quando necessario durante le operazioni di stack e modifica del set e passa il valore alla risorsa appropriata. Tuttavia, CloudFormation non memorizza mai il valore del riferimento effettivo. Per ulteriori informazioni, consulta Utilizzo di riferimenti dinamici per specificare valori di modello.

AWS Secrets Manager consente di crittografare, archiviare e utilizzare in modo sicuro le credenziali per database e altri servizi. AWSArchivio parametri di Systems Manager fornisce uno storage sicuro e gerarchico per la gestione dei dati di configurazione.

Per ulteriori informazioni sulla definizione dei parametri del modello, consulta Sintassi dei Parameters del modello CloudFormation.

Tipi di parametri specifici per AWS

Se il modello richiede input per i valori specifici di AWS esistenti, ad esempio gli ID Amazon Virtual Private Cloud esistenti o un nome di coppia di chiavi Amazon EC2, utilizzare i tipi di parametri specifici di AWS. Ad esempio, puoi specificare un parametro come tipo AWS::EC2::KeyPair::KeyName, che richiede il nome di una coppia di chiavi esistente, presente nel tuo Account AWS e nella Regione in cui viene creato lo stack. Prima di creare il tuo stack, CloudFormation può convalidare rapidamente i valori per i tipi di parametro specifici di AWS. Inoltre, se si utilizza la console CloudFormation, CloudFormation mostra un elenco di valori validi, quindi non è necessario ricercare o memorizzare gli ID VPC o i nomi delle coppie di chiavi corretti. Per ulteriori informazioni, consulta Specifica delle risorse esistenti in fase di runtime con i tipi di parametri forniti da CloudFormation.

Utilizzare i vincoli dei parametri

Con i vincoli, puoi descrivere i valori di input consentiti in modo che CloudFormation rilevi eventuali valori non validi prima di creare uno stack. Puoi impostare vincoli, quali lunghezza minima e massima e schemi consentiti. Ad esempio, puoi impostare vincoli sul valore del nome utente di un database perché abbia almeno 8 caratteri e contenga solo caratteri alfanumerici. Per ulteriori informazioni, consulta Sintassi dei Parameters del modello CloudFormation.

Utilizzo degli pseudoparametri per promuovere la portabilità

È possibile utilizzare gli pseudoparametri nei modelli come argomenti di funzioni intrinseche, come Ref e Fn::Sub. Gli pseudoparametri sono parametri che sono predefiniti da CloudFormation. Non vengono dichiarati nel modello. L’utilizzo di pseudoparametri nelle funzioni intrinseche aumenta la portabilità dei modelli di stack tra Regioni e account.

Ad esempio, immagina di voler creare un modello in cui, per una determinata proprietà della risorsa, devi specificare il nome della risorsa Amazon (ARN) di un’altra risorsa esistente. In questo caso, la risorsa esistente è una risorsa archivio parametri AWS Systems Manager con il seguente ARN: arn:aws:ssm:us-east-1:123456789012:parameter/MySampleParameter. Dovrai adattare il formato ARN alla partizione, alla Regione e all’ID account AWS di destinazione. Invece di codificare in modo fisso questi valori, puoi utilizzare gli pseudoparametri AWS::Partition, AWS::Region e AWS::AccountId per rendere il tuo modello più portabile. In questo caso, l’esempio seguente mostra come concatenare gli elementi in un ARN con CloudFormation: !Sub 'arn:${AWS::Partition}:ssm:${AWS::Region}:${AWS::AccountId}:parameter/MySampleParameter.

Per fare un altro esempio, supponiamo di voler condividere risorse o configurazioni su più stack. In questo esempio, supponiamo di aver creato una sottorete per il VPC e quindi di averne esportato l’ID per utilizzarlo con altri stack nello stesso Account AWS e Regione. In un altro stack, fai riferimento al valore esportato dell’ID di sottorete quando descrivi un’istanza Amazon EC2. Per un esempio dettagliato dell’utilizzo del campo di output Export e della funzione intrinseca Fn::ImportValue, consulta Fare riferimento a output di risorse in un altro stack CloudFormation.

Le esportazioni di stack devono essere univoche per ogni account e Regione. Quindi, in questo caso, puoi utilizzare lo pseudoparametro AWS::StackName per creare un prefisso per l’esportazione. Poiché i nomi degli stack devono essere univoci anche per ogni account e Regione, l’utilizzo di questo pseudoparametro come prefisso aumenta la possibilità di avere un nome di esportazione univoco, promuovendo al contempo la riutilizzabilità tra gli stack da cui esporti i valori. In alternativa, puoi utilizzare un prefisso di tua scelta.

Utilizza AWS::CloudFormation::Init per implementare le applicazioni software sulle istanze Amazon EC2

Quando avvii gli stack, puoi installare e configurare applicazioni software sulle istanze Amazon EC2 utilizzando lo script helper cfn-init e la risorsa AWS::CloudFormation::Init. Utilizzando AWS::CloudFormation::Init, puoi descrivere le configurazioni che desideri, invece di scrivere script delle fasi procedurali. Puoi anche aggiornare le configurazioni senza ricreare le istanze. In caso di problemi con la configurazione, CloudFormation genera log da utilizzare per analizzare i problemi.

Nel modello, specifica gli stati di installazione e configurazione nella risorsa AWS::CloudFormation::Init. Per una procedura dettagliata che mostra come usare cfn-init e AWS::CloudFormation::Init, consulta Distribuisci applicazioni su Amazon EC2.

Utilizzare gli script helper più recenti

Gli script helper CloudFormation vengono aggiornati periodicamente. Assicurati di includere il comando seguente nella proprietà UserData del modello prima di chiamare gli script helper: ti accerterai così che le istanze avviate recuperino gli script helper più recenti.

yum install -y aws-cfn-bootstrap

Per ulteriori informazioni su come ottenere gli script helper più recenti, consulta CloudFormation helper scripts reference nella CloudFormation Template Reference Guide.

Convalidare i modelli prima di utilizzarli

Prima di utilizzare un modello per creare o aggiornare uno stack, è possibile farlo convalidare da CloudFormation. Convalidare il modello può aiutare a rilevare errori di sintassi e alcuni errori semantici, ad esempio le dipendenze circolari, prima che CloudFormation crei qualsiasi risorsa. Se si utilizza la console CloudFormation, la console convalida automaticamente il modello dopo aver specificato i parametri di input. Per l’API CloudFormation o AWS CLI, utilizza il comando CLI validate-template o l’operazione API ValidateTemplate.

Durante la convalida, CloudFormation verifica innanzitutto se il modello è in un formato JSON valido. Se non lo è, CloudFormation verifica se il modello è in un formato YAML valido. Se entrambi i controlli hanno esito negativo, CloudFormation restituisce un errore di convalida del modello.

Convalida dei modelli per la conformità ai criteri dell’organizzazione

È anche possibile convalidare il modello per la conformità alle linee guida delle policy dell’organizzazione. AWS CloudFormation Guard (cfn-guard) è uno strumento open source di interfaccia a riga di comando (CLI) che fornisce un linguaggio "policy come codice" per definire regole che possono controllare le configurazioni delle risorse necessarie e proibite. Consente quindi di convalidare i modelli rispetto a tali regole. Ad esempio, gli amministratori possono stabilire delle regole per garantire che gli sviluppatori creino sempre dei bucket Amazon S3 crittografati.

Gli sviluppatori possono utilizzare cfn-guard in locale, durante la modifica dei modelli, oppure in modo automatico all’interno di una pipeline di integrazione e distribuzione continue, per interrompere la distribuzione di risorse non conformi.

Inoltre, cfn-guard include una funzionalità, rulegen, che consente di estrarre le regole dai modelli CloudFormation esistenti conformi.

Per ulteriori informazioni, consulta il repository cfn-guard in GitHub.

Utilizzare YAML o JSON per creare i modelli

CloudFormation supporta sia i formati YAML che JSON per i modelli. Ognuno ha i suoi vantaggi e la scelta dipende dalle esigenze specifiche:

Utilizza YAML quando

  • Dai priorità alla leggibilità e alla manutenibilità umane

  • Vuoi includere i commenti per documentare il tuo modello

  • Stai lavorando su modelli complessi con strutture annidate

  • Vuoi usare funzionalità specifiche di YAML come ancore e alias per ridurre le ripetizioni

Utilizza JSON quando:

  • Devi integrare con strumenti o sistemi che preferiscono JSON

  • Stai lavorando con la generazione o la manipolazione di modelli programmatici

  • È necessaria una rigorosa convalida dei dati

YAML è generalmente consigliato per la creazione manuale di modelli grazie alla sua leggibilità e al supporto per i commenti. È particolarmente utile per modelli complessi in cui la struttura basata sull’indentazione aiuta a visualizzare le gerarchie di risorse. JSON può essere utile nei flussi di lavoro automatizzati o quando si lavora con API che prevedono l’input JSON. È utile anche quando devi garantire la stretta aderenza a una struttura specifica. Indipendentemente dal formato scelto, concentrati sulla creazione di modelli ben strutturati, documentati e gestibili. Se usi YAML, sfrutta le sue funzionalità come ancore e alias per ridurre le ripetizioni e migliorare la manutenibilità.

Implementazione di una strategia di assegnazione tag completa

Implementa una strategia di tag coerente per tutte le risorse create dai tuoi modelli CloudFormation. I tag aiutano nell’organizzazione delle risorse, nell’allocazione dei costi, nel controllo degli accessi e nell’automazione. Valuta la possibilità di includere tag relativi all’ambiente, al proprietario, al centro di costo, all’applicazione e allo scopo.

Utilizza la proprietà Tags della risorsa AWS::CloudFormation::Stack per applicare i tag a tutte le risorse supportate in uno stack. È inoltre possibile utilizzare la proprietà TagSpecifications disponibile su molti tipi di risorse per applicare i tag durante la creazione delle risorse.

Per ulteriori informazioni sui tag, consulta Resource tag.

Sfrutta le macro dei modelli per trasformazioni avanzate

Le macro CloudFormation ti consentono di eseguire l’elaborazione personalizzata su modelli, da semplici operazioni quali ricerca e sostituzione a complesse trasformazioni che generano risorse aggiuntive. Utilizza le macro per estendere le funzionalità dei modelli CloudFormation e implementare modelli riutilizzabili in tutta l’organizzazione.

AWS Serverless Application Model è un esempio di macro che semplifica lo sviluppo di applicazioni serverless. Prendi in considerazione la possibilità di creare macro personalizzate per modelli e requisiti specifici dell’organizzazione.

Per ulteriori informazioni sull’utilizzo delle macro nei modelli, consulta Overview of CloudFormation macros.

Gestire tutte le risorse dello stack tramite CloudFormation

Dopo aver avviato uno stack, utilizza la console, l’API o la AWS CLI CloudFormation per aggiornare le risorse nello stack. Non apportare modifiche alle risorse dello stack al di fuori di CloudFormation. In caso contrario, potrebbe crearsi una mancata corrispondenza tra il modello dello stack e lo stato attuale delle risorse dello stack, con conseguenti possibili errori durante l’aggiornamento o l’eliminazione dello stack. Questo fenomeno è noto come deriva. Se apporti una modifica a una risorsa esterna al modello CloudFormation e aggiorni lo stack, le modifiche apportate direttamente alla risorsa verranno eliminate e la configurazione della risorsa tornerà alla configurazione nel modello.

Per ulteriori informazioni sulla deriva, consulta Cos'è una deviazione?.

Per ulteriori informazioni sull’aggiornamento degli stack, consulta Aggiornare uno CloudFormation stack.

Creare set di modifiche prima di aggiornare gli stack

I set di modifiche consentono di vedere in che modo le modifiche proposte per lo stack possono influire sulle risorse in esecuzione prima di applicarle. CloudFormation non apporta modifiche allo stack finché il set di modifiche non viene eseguito, dando così all’utente la possibilità di decidere se procedere con le modifiche proposte o creare un altro set di modifiche.

Utilizza i set di modifiche per verificare in che modo le modifiche possono influire sulle risorse in esecuzione, soprattutto nel caso di risorse critiche. Ad esempio, se si modifica il nome di un’istanza database Amazon RDS, CloudFormation creerà un nuovo database ed eliminerà quello vecchio. Se non è già stato effettuato un backup, si perderanno i dati nel vecchio database. Se generi un set di modifiche, vedrai che la modifica sostituirà il database. Questo può aiutarti nella pianificazione prima di aggiornare il tuo stack. Per ulteriori informazioni, consulta Aggiorna CloudFormation gli stack utilizzando i set di modifiche.

Utilizzare le policy di stack per proteggere le risorse

Le policy di stack consentono di proteggere le risorse di stack critiche da aggiornamenti involontari che potrebbero causare l’interruzione o persino la sostituzione delle risorse stesse. Una policy di stack è un documento JSON che descrive quali operazioni di aggiornamento possono essere eseguite su risorse definite. Specifica una policy di stack ogni volta che crei uno stack con risorse critiche.

Durante l’aggiornamento di uno stack, devi specificare esplicitamente le risorse protette da aggiornare. In caso contrario, non verranno apportate modifiche a tali risorse. Per ulteriori informazioni, consulta Impedire gli aggiornamenti delle risorse stack.

Utilizza AWS CloudTrail per registrare le chiamate CloudFormation

AWS CloudTrail tiene traccia di chiunque effettui chiamate API CloudFormation nel tuo Account AWS. Le chiamate API sono registrate ogniqualvolta viene utilizzata l’API CloudFormation, la console CloudFormation, una console di backend o i comandi dell’interfaccia a riga di comando CloudFormation AWS CLI. Attivare la registrazione e specificare un bucket Amazon S3 in cui archiviare i log. In questo modo, in caso di necessità, puoi controllare chi ha effettuato quale chiamata CloudFormation nel tuo account.

Per ulteriori informazioni, consulta Registrazione di chiamate API CloudFormation con AWS CloudTrail.

Utilizzare la revisione del codice e i controlli di revisione per gestire i modelli

I modelli di stack descrivono la configurazione delle risorse AWS, ad esempio i valori delle proprietà. Per rivedere le modifiche e mantenere un’accurata cronologia delle risorse, utilizzare la revisione del codice e i controlli di revisione. Questi metodi possono aiutarti a monitorare le modifiche tra diverse versioni dei tuoi modelli, il che è utile per tenere traccia delle modifiche alle risorse di stack. Inoltre, mantenendo una cronologia, è sempre possibile ripristinare lo stack a una determinata versione del modello.

Aggiornare regolarmente le istanze Amazon EC2

Eseguire regolarmente il comando yum update per aggiornare il pacchetto RPM su tutte le istanze Windows Amazon EC2 e sulle istanze Linux Amazon EC2 create con CloudFormation. In questo modo ti assicuri di avere le correzioni e gli aggiornamenti di sicurezza più recenti.

Utilizza regolarmente il rilevamento della deriva

Utilizza regolarmente la funzionalità di rilevamento della deriva di CloudFormation per identificare le risorse che sono state modificate al di fuori della gestione di CloudFormation. Il rilevamento e la risoluzione della deriva aiutano a mantenere l’integrità dell’infrastruttura grazie all’approccio basato sul codice e garantiscono che i modelli riflettano accuratamente lo stato delle risorse implementate.

Prendi in considerazione l’implementazione del rilevamento automatico della deriva come parte delle tue procedure operative. Puoi utilizzare le funzioni AWS Lambda attivate dalle regole di Amazon EventBridge per verificare periodicamente eventuali derive e notificare il team quando vengono rilevate discrepanze.

Per ulteriori informazioni sulla deriva, consulta Detect unmanaged configuration changes to stacks and resources with drift detection.

Configura i trigger di rollback per il ripristino automatico

Utilizza i trigger di rollback per specificare gli allarmi di Amazon CloudWatch che CloudFormation deve monitorare durante le operazioni di creazione e aggiornamento degli stack. Se uno qualsiasi degli allarmi specificati entra nello stato ALARM, CloudFormation esegue il rollback l’intera operazione dello stack, contribuendo a garantire che l’infrastruttura rimanga in uno stato stabile.

Configura i trigger di rollback per metriche critiche come i tassi di errore delle applicazioni, l’utilizzo delle risorse di sistema o le metriche aziendali personalizzate che indicano lo stato dell’applicazione e dell’infrastruttura.

Per ulteriori informazioni sui trigger di rollback, consulta Roll back your stack on alarm breach.

Implementa strategie efficaci di rifattorizzazione degli stack

Man mano che l’infrastruttura si evolve, potresti dover rifattorizzare gli stack CloudFormation per migliorare la manutenibilità, ridurre la complessità o adattarli ai requisiti in evoluzione. Rifattorizzare gli stack implica la ristrutturazione dei modelli e delle risorse preservando il comportamento e la funzionalità esterni. L’utilizzo della rifattorizzazione degli stack è utile con CloudFormation nei seguenti modi:

  • Suddivisione degli stack monolitici: suddivisione degli stack grandi e complessi in stack più piccoli e più gestibili, organizzati per ciclo di vita o proprietà

  • Consolidamento delle risorse correlate: combinazione di risorse correlate provenienti da più stack in un unico stack coeso per semplificare la gestione

  • Estrazione di componenti riutilizzabili: spostamento dei modelli comuni in moduli o stack annidati per promuovere il riutilizzo e la coerenza

  • Miglioramento dell’organizzazione delle risorse: ristrutturazione delle risorse all’interno di uno stack per rispecchiare meglio le relazioni e le dipendenze

Per ulteriori informazioni su come rifattorizzare gli stack CloudFormation, consulta Rifattorizzazione degli stack.

Utilizzo di CloudFormation Hooks per la gestione del ciclo di vita

CloudFormation Hooks fornisce un codice che ispeziona in modo proattivo la configurazione delle risorse AWS prima del provisioning ed esegue controlli di convalida complessi. Hooks verifica se le risorse, gli stack e i set di modifiche sono conformi alle esigenze di sicurezza, operative e di ottimizzazione dei costi dell’organizzazione. Fornisce avvisi prima del provisioning di una risorsa, o fallisce l’operazione e la interrompe completamente, a seconda di come è stata configurata. Le violazioni e gli avvisi vengono registrati in Amazon CloudWatch per fornire visibilità sulle implementazioni non conformi.

Per ulteriori informazioni su queste best practice per Hooks, consulta AWS CloudFormation Hooks concepts.

Per ulteriori informazioni su cosa possono fare gli Hooks per le tue risorse CloudFormation, consulta What are AWS CloudFormation Hooks?

Usa il generatore IaC per creare modelli a partire da risorse esistenti

Il generatore IaC (infrastructure as code) di CloudFormation ti aiuta a creare modelli CloudFormation a partire dalle tue risorse AWS esistenti. Questa funzionalità è particolarmente utile quando devi replicare l’infrastruttura esistente, documentare risorse create manualmente o portare risorse precedentemente non gestite sotto la gestione di CloudFormation. Il generatore IaC è utile per creare i tuoi modelli CloudFormation nei seguenti modi:

  • Creazione accelerata di modelli: genera modelli da risorse esistenti invece di scriverli da zero

  • Infrastruttura coerente: garantisce che i nuovi ambienti corrispondano a quelli esistenti utilizzando i modelli generati come punto di partenza

  • Migrazione all’infrastruttura come codice: trasferisce gradualmente le risorse create manualmente sotto la gestione di CloudFormation

  • Documentazione: crea un record della tua infrastruttura esistente sotto forma di modello

Per ulteriori informazioni sul generatore IaC, consulta Generate templates from existing resources with IaC generator.

Utilizza AWS Infrastructure Composer per la progettazione di modelli visivi

AWS Infrastructure Composer è uno strumento di progettazione visiva che ti aiuta a creare, visualizzare e modificare modelli CloudFormation mediante un’interfaccia basata sul trascinamento. Può essere particolarmente utile quando si utilizza CloudFormation nei modi seguenti:

  • Pianificazione dell’architettura: progetta e convalida le architetture dell’infrastruttura prima dell’implementazione

  • Modernizzazione dei modelli: visualizza i modelli esistenti per comprenderne la struttura e identificare le opportunità di miglioramento

  • Formazione e onboarding: aiuta i nuovi membri del team a comprendere i concetti e le relazioni di servizio AWS di CloudFormation attraverso l’apprendimento visivo

  • Comunicazione con le parti interessate: presenta i progetti dell’infrastruttura a soggetti non tecnici utilizzando rappresentazioni visive chiare

  • Revisioni della conformità: utilizza diagrammi visivi per facilitare le revisioni di sicurezza e conformità dei progetti di infrastruttura

  • Revisioni della conformità: utilizza diagrammi visivi per facilitare le revisioni di sicurezza e conformità dei progetti di infrastruttura

Per ulteriori informazioni su Infrastructure Composer, consulta What is AWS Infrastructure Composer?.

Prendi in considerazione l’utilizzo di AWS Cloud Development Kit (AWS CDK) per infrastrutture complesse

Per requisiti di infrastruttura complessi, prendi in considerazione l’idea di utilizzare il CDK per definire le tue risorse cloud utilizzando linguaggi di programmazione familiari come TypeScript, Python, Java e .NET. AWS CDK genera modelli CloudFormation dal tuo codice, consentendoti di sfruttare tutte le funzionalità di CloudFormation mentre utilizzi le astrazioni e i costrutti di programmazione del tuo linguaggio preferito.

AWS CDK fornisce costrutti di alto livello che incapsulano le best practice e semplificano la definizione di modelli di infrastruttura comuni. Ciò può ridurre in modo significativo la quantità di codice necessaria per definire l’infrastruttura, garantendo al contempo l’aderenza alle migliori pratiche.

Per ulteriori informazioni su CDK, consulta AWS Cloud Development Kit (AWS CDK).

Utilizza IAM per controllare gli accessi

IAM è un servizio AWS che puoi usare per gestire gli utenti e le relative autorizzazioni in AWS. Puoi utilizzare IAM con CloudFormation per specificare quali operazioni CloudFormation possono eseguire gli utenti, ad esempio visualizzare modelli di stack, creare stack o eliminarli. Inoltre, per chiunque gestisca stack CloudFormation, saranno necessarie le autorizzazioni per le risorse all’interno di quegli stack. Ad esempio, se gli utenti vogliono utilizzare CloudFormation per avviare, aggiornare o terminare le istanze Amazon EC2, devono avere le autorizzazioni per chiamare le operazioni Amazon EC2 pertinenti.

Nella maggior parte dei casi, gli utenti richiedono l’accesso completo per gestire tutte le risorse in un modello. CloudFormation esegue chiamate per creare, modificare ed eliminare tali risorse per conto degli utenti. Per separare le autorizzazioni tra un utente e il servizio CloudFormation, utilizza un ruolo di servizio. Per effettuare chiamate, CloudFormation usa la policy del ruolo di servizio, invece della policy dell’utente. Per ulteriori informazioni, consulta CloudFormationRuolo del servizio .

Applica il principio del privilegio minimo

Quando configuri i ruoli IAM per i ruoli di servizio di CloudFormation o per le risorse create dai tuoi modelli, applica sempre il principio del privilegio minimo. Concedi solo le autorizzazioni necessarie per la funzionalità prevista ed evita di utilizzare autorizzazioni jolly quando possibile.

Utilizza lo strumento di analisi degli accessi IAM per esaminare le autorizzazioni concesse ai ruoli di servizio CloudFormation e identificare le autorizzazioni inutilizzate che possono essere rimosse. Rivedi e aggiorna regolarmente le policy IAM per assicurarti che rimangano allineate ai tuoi requisiti di sicurezza.

Proteggi i parametri sensibili

Per informazioni sensibili come password, chiavi API e altri segreti, utilizza AWS Systems Manager Parameter Store o Gestione dei segreti AWS invece di eseguire direttamente l’embedding nei tuoi modelli. Utilizza riferimenti dinamici nei modelli per recuperare in modo sicuro questi valori durante le operazioni di stack.

Quando utilizzi i parametri nei tuoi modelli, imposta la proprietà NoEcho su true per i parametri sensibili al fine di evitare che i loro valori vengano visualizzati nella console, nelle risposte API o nell’output della CLI. Tieni presente che NoEcho non impedisce la registrazione del valore se viene passato ad altri servizi o risorse che potrebbero registrarlo.

Per ulteriori informazioni sull’utilizzo di AWS Systems Manager Parameter Store con CloudFormation, consulta Get a plaintext value from AWS Systems Manager Parameter Store.

Per ulteriori informazioni sull’utilizzo della proprietà NoEcho, consulta CloudFormation template Parameters syntax.

Per ulteriori informazioni sull’utilizzo di Gestione dei segreti AWS con CloudFormation, consulta Create Gestione dei segreti AWS secrets in AWS CloudFormation.

Implementa la policy come codice con AWS CloudFormation Guard

AWS CloudFormation Guard (cfn-guard) è uno strumento policy-as-code open source che ti consente di definire e applicare regole per i modelli di CloudFormation. Utilizza cfn-guard per garantire che i tuoi modelli siano conformi alle politiche organizzative, alle best practice di sicurezza e ai requisiti di governance.

Integra cfn-guard nelle tue pipeline CI/CD per convalidare automaticamente i modelli in base alle regole delle policy prima dell’implementazione. Questo aiuta a impedire che risorse non conformi vengano distribuite nell’ambiente e fornisce un feedback tempestivo agli sviluppatori sulle violazioni delle policy.

Per ulteriori informazioni su Guard, consulta What is AWS CloudFormation Guard?