AWS CloudFormation migliori pratiche - AWS CloudFormation

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à.

AWS CloudFormation migliori pratiche

Le best practice sono raccomandazioni che possono aiutarti a utilizzarlo in modo AWS CloudFormation più efficace e sicuro durante l'intero flusso di lavoro. 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 si basano sull'esperienza reale dei clienti attuali. CloudFormation

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

Adotta pratiche e strumenti che ti aiutino ad abbreviare il ciclo di feedback per l'infrastruttura che descrivi con i 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 ti aiutano a raggiungere pratiche rapide includono AWS CloudFormation Linter (cfn-lint) e gli strumenti a riga di comando. TaskCat Lo strumento cfn-lint vi dà la possibilità di convalidare i vostri modelli in base alle specifiche delle risorse. CloudFormationAWS 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 la convalida pre-commit di AWS CloudFormation modelli con cfn-lint in Git. Dopo aver eseguito il linting iniziale e risolto eventuali problemi che cfn-lint avrebbe potuto sollevare, puoi utilizzarlo per testare i tuoi modelli creando in modo programmatico degli stack nelle regioni che preferisci. TaskCat AWS TaskCatgenera anche un rapporto con un punteggio pass/fail per ogni regione scelta.

Per una step-by-step guida pratica su come utilizzare entrambi gli strumenti per abbreviare il ciclo di feedback, segui il laboratorio di Linting and Testing del Workshop.AWS CloudFormation

Organizzare gli stack per ciclo di vita e proprietà

Usa il ciclo di vita e la proprietà delle tue AWS risorse per decidere quali risorse inserire in ogni 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 a dimensionamento automatico dietro a un load balancer. 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 back-end 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.

Utilizzare i riferimenti tra stack per l'esportazione di risorse condivise

Quando organizzi le AWS risorse in base al ciclo di vita e alla proprietà, potresti voler creare uno stack che utilizzi risorse che si trovano 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. Utilizza invece i riferimenti tra stack per esportare le risorse da uno stack, in modo che altri stack possano utilizzarli. 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 Spiegazione passo per passo: fare riferimento ad output di risorse in un altro stack AWS CloudFormation.

Verificare le quote per tutti i tipi di risorse

Prima di lanciare uno stack, assicurati di poter creare tutte le risorse che desideri senza raggiungere i limiti del tuo account. AWS Se raggiungi un limite, CloudFormation non creerai correttamente lo stack finché non aumenterai la quota o eliminerai risorse extra. Ogni servizio può avere vari limiti di cui devi essere a conoscenza prima di avviare uno stack. Ad esempio, per impostazione predefinita, puoi avviare solo 2000 CloudFormation pile per regione del tuo. Account AWSPer ulteriori informazioni sui limiti e su come aumentare i limiti predefiniti, consulta la Quote di servizio diAWS 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 Anatomia dei modelli.

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 annidati in altri moduli, in modo da poter raggruppare le best practice in blocchi predefiniti di livello superiore. CloudFormation i moduli sono disponibili nel CloudFormation registro, quindi puoi usarli proprio come una risorsa nativa. Quando si utilizza un CloudFormation modulo, il modello del modulo viene espanso nel modello di consumo, il che consente di accedere alle risorse all'interno del modulo utilizzando Ref o Fn:: GetAtt. Per maggiori informazioni, consulta Moduli.

Usa tipi AWSdi parametri specifici

Se il modello richiede input per valori AWSspecifici esistenti, come gli ID Amazon Virtual Private Cloud esistenti o il nome di una coppia di chiavi Amazon EC2 AWS, utilizza tipi di parametri specifici. Ad esempio, puoi specificare un parametro come typeAWS::EC2::KeyPair::KeyName, che accetta il nome di una coppia di chiavi esistente presente nel tuo AWS account e nella regione in cui stai creando lo stack. AWS CloudFormation può convalidare rapidamente i valori per tipi di parametri AWSspecifici prima di creare lo stack. Inoltre, se utilizzi la CloudFormation console, CloudFormation mostra un elenco a discesa di valori validi, in modo da non dover cercare o memorizzare gli ID VPC o i nomi di key pair corretti. Per ulteriori informazioni, consulta Parametri.

Utilizzare i vincoli dei parametri

Con i vincoli, puoi descrivere i valori di input consentiti in modo che vengano rilevati tutti i valori non validi prima di creare uno CloudFormation 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 Parametri.

Utilizzo degli pseudoparametri per promuovere la portabilità

È possibile utilizzare gli pseudoparametri nei modelli come argomenti di funzioni intrinseche, come Ref e Fn::Sub. Gli pseudo parametri sono parametri 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 parametriAWS Systems Manager con il seguente ARN: arn:aws:ssm:us-east-1:111122223333:parameter/MySampleParameter. Dovrai adattare il formato ARN alla AWS partizione, alla regione e all'ID account 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 elementi in un ARN con:. CloudFormation !Sub 'arn:${AWS::Partition}:ssm:${AWS::Region}:${AWS::AccountId}:parameter/MySampleParameter

Per un altro esempio, supponiamo di voler utilizzare per fare riferimento Spiegazione passo per passo: fare riferimento ad output di risorse in un altro stack AWS CloudFormation agli output di risorse in un altro stack. CloudFormation 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 e nella stessa regione. In un altro stack, fai riferimento al valore esportato dell'ID di sottorete quando descrivi un'istanza Amazon EC2.

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.

Per un esempio dettagliato dell'utilizzo del campo di output Export e della funzione intrinseca Fn::ImportValue, consulta Spiegazione passo per passo: fare riferimento ad output di risorse in un altro stack AWS CloudFormation.

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 Distribuzione di applicazioni su Amazon EC2 con AWS CloudFormation.

Utilizzare gli script helper più recenti

Gli script helper 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 la documentazione Riferimenti agli script helper di CloudFormation.

Convalidare i modelli prima di utilizzarli

Prima di utilizzare un modello per creare o aggiornare uno stack, puoi utilizzarlo per CloudFormation convalidarlo. La convalida di un modello può aiutarti a catturare la sintassi e alcuni errori semantici, come le dipendenze circolari, prima CloudFormation di creare qualsiasi risorsa. Se si utilizza la CloudFormation console, la console convalida automaticamente il modello dopo aver specificato i parametri di input. Per l' CloudFormation API AWS CLI or, utilizza il aws cloudformation validate-templatecomando o l'operazione ValidateTemplateAPI.

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

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

Puoi anche convalidare il modello per verificarne la conformità alle linee guida della politica dell'organizzazione. AWS CloudFormation Guard (cfn-guard) è uno strumento di interfaccia a riga di comando (CLI) open source che fornisce policy-as-code un linguaggio per definire regole in grado di verificare le configurazioni delle risorse sia richieste che 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à che consente di estrarre le regole dai modelli conformi esistenti. rulegen CloudFormation

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

Gestisci tutte le risorse dello stack tramite AWS CloudFormation

Dopo aver avviato uno stack, utilizza la CloudFormation console, l'API o la AWS CLI 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. Per ulteriori informazioni, consulta Spiegazione passo per passo: aggiornamento di uno stack.

Creare set di modifiche prima di aggiornare gli stack

I set di modifiche consentono di vedere in che modo le modifiche proposte a uno stack potrebbero influire sulle risorse in esecuzione prima di implementarle. CloudFormation non apporta modifiche allo stack finché non esegui il set di modifiche, consentendoti 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 modifichi il nome di un'istanza di database Amazon RDS, CloudFormation creerai un nuovo database ed eliminerai quello vecchio; perderai i dati nel vecchio database a meno che tu non ne abbia già eseguito il backup. 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 Aggiornamento di stack utilizzando i set di modifiche.

Utilizzare le policy di stack

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.

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

I tuoi modelli di stack descrivono la configurazione delle tue AWS risorse, come i valori delle loro 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

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