Ricerca nel sito web

Come automatizzare le risorse AWS con i modelli CloudFormation


Su questa pagina

  1. Prerequisiti
  2. Creare il tuo primo stack
  3. Eliminazione dei tuoi stack CloudFormation
  4. Conclusione

AWS CloudFormation è un servizio che consente agli amministratori di sistema di configurare e gestire un'intera raccolta di risorse AWS, comprese le relative configurazioni, dipendenze e interrelazioni tra di esse, in un'unica istruzione. Possono anche apportare modifiche all'infrastruttura esistente senza arrestare o ridistribuire le applicazioni in esecuzione su di essa.

AWS Cloudformation ti consente di configurare la tua infrastruttura come codice. È fondamentalmente un'infrastruttura come un motore di codice che funziona nel cloud e aiuta gli utenti a fornire e gestire risorse di calcolo, archiviazione e altre. Un modello CloudFormation è un file JSON con direttive su come creare o aggiornare le risorse AWS. Possiamo utilizzare AWS CLI, SDK AWS come boto3 o il servizio AWS CloudFormation per creare modelli.

CloudFormation offre molti vantaggi come:

  • Facilità d'uso: CloudFormation utilizza un formato modello che consente di descrivere tutti gli attributi e le relazioni delle risorse AWS in un unico posto.
  • Agilità di accesso al mercato: CloudFormation ti consente di creare e distribuire le tue risorse AWS come codice.
  • Alto livello di automazione: CloudFormation trasforma il codice di alto livello in un insieme di semplici modelli che possono essere utilizzati per creare o aggiornare le risorse AWS.

Se stai cercando di automatizzare le distribuzioni dei carichi di lavoro su AWS, l'utilizzo di CloudFormation è uno dei modi migliori per farlo.

In questo articolo, ti mostreremo una breve introduzione a CloudFormation e utilizzeremo CloudFormation per automatizzare le tue risorse AWS. Questa guida utilizza le risorse S3 per dimostrare. Dopo questo tutorial, sarai in grado di creare, aggiornare ed eliminare una serie di risorse AWS utilizzando CloudFormation. Puoi anche imparare come iniziare a creare il tuo modello CloudFormation.

Prerequisiti

Per seguire questo tutorial, sono necessari i seguenti prerequisiti:

  • AWS CLI installata sul computer locale nella versione 1.6.1 o successiva e configurata con una regione predefinita. La stessa versione dovrebbe essere configurata anche per Python 2.6 o 3+.
  • Una conoscenza di base dei servizi AWS e un po' di esperienza sulla console AWS.

Creazione del tuo primo stack

Ora che hai i prerequisiti pronti, iniziamo configurando e creando il tuo primo stack.

1. Apri il tuo browser preferito. Accedi a questo repository GitHub e scarica tre file sull'unità disco rigido locale.

  • createstack.json
  • updatestack1.json
  • updatestack2.json

2. Ora vai alla tua console AWS ---> CloudFormation.

3. Verrà visualizzata la seguente schermata. Clicca su Crea stack ---> Con nuove risorse.

4. Verrà visualizzata la seguente schermata. Fai clic su Il modello è pronto ---> Carica un file modello ---> Scegli file ----> Scegli il tuo createstack.json file scaricato in precedenza---> Avanti.

Quando crei un nuovo stack, devi fornire un modello per il tuo stack. Puoi farlo in tre modi:

  • Il modello è pronto: scegli questa opzione se hai già il tuo modello in mano. In caso contrario, vai all'opzione successiva.
  • Utilizza un modello di esempio: usa questa opzione per darti un vantaggio nella creazione del tuo modello. La guida per l'utente di AWS fornisce diversi esempi di modelli CloudFormation.
  • Crea un modello in Designer: AWS CloudFormation Designer è il modo più recente per creare il tuo stack. Utilizza un'interfaccia drag-and-drop, simile ad altri strumenti popolari come Sharepoint, per aiutarti a creare il tuo modello.

Questa demo utilizza la prima opzione, \Il modello è pronto\, poiché hai già i modelli in mano (i file che hai scaricato sul tuo disco).

Puoi aprire il file createstack.json nel tuo editor per dargli un'occhiata. Vedrai le seguenti righe nel file createstack.json.

  • \Resources\: { è la sezione creata da AWS CloudFormation. È un raggruppamento di tutte le risorse fisiche che creerai.
  • \catpics\: è la risorsa logica, il cui tipo è un bucket S3.
  • \Type\: \AWS::S3::Bucket\ è la risorsa fisica che verrà creata da AWS CloudFormation.

5. Nella schermata successiva, fornisci un nome per il tuo stack (htf) e fai clic su Avanti. Ogni stack richiede un nome univoco all'interno della regione AWS in modo che tu possa distinguerli. Non puoi usare caratteri speciali qui, solo lettere, numeri e caratteri di sottolineatura (niente spazi). AWS genera automaticamente un ID stack univoco per una facile identificazione.

6. Nella schermata successiva, mantieni l'impostazione predefinita e fai clic su Avanti.

7. Nella schermata successiva, mantieni l'impostazione predefinita e fai clic su Crea stack.

A questo punto, AWS CloudFormation carica il modello e crea lo stack per te. CloudFormation analizza ogni singola sezione del modello e crea una risorsa fisica corrispondente. In alcuni casi, AWS CloudFormation eseguirà diversi controlli sul modello per assicurarsi che tutto sia a posto. Se trova qualcosa che non va, riceverai un messaggio di errore che descrive qual è il problema e come risolverlo.

Il processo di creazione richiede circa 4-5 minuti per crearlo. Puoi vedere cosa sta succedendo osservando lo stato degli stack sulla dashboard di CloudFormation, come mostrato di seguito. Puoi vedere le risorse logiche catpics sul lato sinistro e in ognuna di queste risorse puoi vedere le risorse fisiche che AWS CloudFormation sta creando per loro (CREATE_IN_PROGRESS).

Puoi passare alla scheda delle risorse per visualizzare le risorse fisiche create per questo stack. In questo caso, si tratta di un bucket S3 denominato catpics con ID risorse fisiche htf-catpics-1roqn54xwm3of, come mostrato di seguito.

8. Ora vai alla dashboard S3. Nella tua dashboard S3, puoi vedere gli oggetti creati nel bucket. In questo caso, il nome dello stack per il bucket S3 è htf-catpics-1roqn54xwm3of, come puoi vedere di seguito.

Puoi vedere che il nome del bucket è seguito da questo schema: il tuo nome stack (htf)-il tuo nome stack logico (catpics)-una stringa casuale (1roqn54xwm3of). Questo modello è molto importante da conoscere. Quando non specifichi gli ID delle risorse fisiche nel modello, AWS CloudFormation utilizza questo modello per creare il nome delle tue risorse. Il potere di questo è che ora puoi utilizzare lo stesso modello per creare più pile; AWS CloudFormation gestirà automaticamente i nomi in modo univoco per te!

Per un servizio come S3, un nome univoco è molto importante; il nome del bucket deve essere univoco a livello globale affinché tu possa archiviare i dati al suo interno. I nomi dei tuoi bucket non possono essere gli stessi. Non riuscirai a inserire gli oggetti nel secchio se provi a nominarlo con lo stesso nome.

È importante capire perché questo è importante. Perché con CloudFormation, si consiglia di non nominare in modo esplicito l'ID delle risorse fisiche nel modello. Invece, lascia che AWS CloudFormation ne crei uno automaticamente per te. Ciò significa che puoi riutilizzare il modello per creare più stack con risorse diverse senza preoccuparti dei conflitti di denominazione. Puoi utilizzare il tuo modello una volta, dieci volte o cento e CloudFormation gestirà le modifiche ai nomi di conseguenza.

Aggiornamento del tuo stack

Ora che hai creato il tuo primo stack utilizzando AWS CloudFormation, esaminiamo come aggiornare lo stack. Come aggiornare uno stack è un concetto molto importante da comprendere, sia per l'utilizzo in produzione che per l'esame. Probabilmente durante l'esame ti verrà chiesto di cambiare qualcosa nel tuo modello, o forse devi aggiornare qualcosa nel tuo stack.

In questa sezione, apporterai alcune modifiche ai modelli e utilizzerai tali modelli aggiornati per aggiornare il tuo stack e valutare quali modifiche vengono apportate alle tue risorse.

In genere, quando si aggiornano gli stack in CloudFormation. Prenderai il modello che hai usato per creare uno stack e aggiungerai nuove risorse, aggiornerai le risorse esistenti o rimuoverai le risorse esistenti.

1. Apri il file updatestack1.json che hai scaricato in precedenza nel tuo editor, vedrai i seguenti blocchi di codice. Confrontiamo questo modello con il modello createstack.json che hai utilizzato in precedenza. Puoi vedere che aggiungeremo una risorsa logica aggiuntiva denominata dogpics. Ancora più importante, non sono state apportate modifiche alle risorse logiche esistenti, che sono i catpic esistenti. Le risorse catpics non sono state modificate o rimosse. Aggiungerò solo un'ulteriore risorsa logica, che è dogpics.

2. Accedi alla dashboard di CloudFormation. Seleziona il tuo stack (htf) e fai clic su Aggiorna.

3. Nella schermata successiva, seleziona Sostituisci modello corrente ---> Carica un file modello ---> Scegli file ---> Seleziona il tuo file updatestack1.json ---> Avanti.

4. Nella schermata successiva, fare clic su Avanti ---> Avanti ---> Aggiorna stack, come mostrato di seguito. Puoi vedere che CloudFormation ti mostra le modifiche che verranno apportate. In questo caso, abbiamo aggiunto un ID logico denominato dogpics. CloudFormation ci mostra anche l'azione che verrà eseguita (Aggiungi) e il tipo di risorsa logica (AWS::S3::Bucket). La colonna Sostituzione è vuota.

Proprio come quando crei uno stack, puoi guardare gli eventi di aggiornamento dalla pagina dello stack. Tutti gli aggiornamenti vengono eseguiti da CloudFormation. In questo caso, ha passato un ulteriore ID risorsa logica, che è dogpics.

Una volta completato il processo di aggiornamento, puoi vedere di seguito che abbiamo sia le risorse catpics che dogpics nel nostro stack.

Passa alla dashboard S3 e puoi vedere che è stato creato un bucket dogpics aggiuntivo denominato htf-dogpics-4qesklu84ugq. Puoi vedere che la denominazione del bucket utilizzando lo stesso modello segue la stringa nome stack-nome stack logico-casuale.

A questo punto, aggiungiamo solo nuove risorse logiche alle nostre risorse, il che è piuttosto semplice ea basso rischio. Ora ti mostreremo come rimuovere le risorse dal tuo stack.

Rimuoveremo la risorsa dogpics dal nostro stack. Questo è più rischioso dell'aggiunta perché l'eliminazione delle risorse potrebbe rompere lo stack. Dato che stiamo ancora imparando, facciamo pratica eliminando la nostra risorsa dogpics per vedere cosa succede

5. Accedi alla dashboard di CloudFormation. Seleziona il tuo stack htf, fai clic su Aggiorna ---> Sostituisci modello corrente ---> Scegli file ---> questa volta selezioneremo di nuovo il file creastack.json ---> Avanti -- -> Avanti ---> Avanti.

6. Nella schermata successiva, fai clic su Aggiorna stack. Sotto l'anteprima del set di modifiche, puoi vedere che la colonna Azione ora è: Rimuovi. In questo caso, CloudFormation rimuove la risorsa dogpics e le corrispondenti risorse fisiche (htf-dogpics-4qesklu84ugq).

Passa alla tua dashboard S3, puoi vedere che il bucket dogpics ora è sparito dalla tua dashboard S3.

Verrà visualizzato l'evento DELETE_COMPLETE nel tuo evento Stack.

La rimozione delle risorse logiche è un po' rischiosa perché può eliminare cose, ma tale rischio è associato solo alle risorse logiche rimosse dal modello (le risorse dogpics). Finora, non abbiamo apportato alcuna modifica a nessuna delle altre risorse logiche esistenti come le risorse catpics. Quindi le risorse fisiche catpic non possono essere influenzate da alcun aggiornamento dello stack. C'è un'altra opzione per aggiornare il tuo stack. Usando questa opzione, potremmo cambiare la configurazione per una risorsa logica esistente.

7. Apri il file updatestack2.json che hai scaricato in precedenza nel tuo editor, vedrai il seguente blocco di codice.

Il file updatestack2.json è molto simile al modello createstack.json utilizzato in precedenza, ad eccezione di due differenze principali. Aggiungiamo di nuovo la seconda risorsa logica, dogpics. Ma abbiamo anche apportato una modifica alle catpic.

Abbiamo aggiunto una sezione aggiuntiva della configurazione, che si chiama Proprietà, dove possiamo definire proprietà aggiuntive per una data risorsa logica. In questo caso, creeremo un bucket S3. Impostiamo esplicitamente il nome del bucket della risorsa fisica come catsareawesome-howtoforge.

8. Passa alla dashboard di CloudFormation. Seleziona il tuo stack htf, fai clic su Aggiorna ---> Sostituisci modello corrente ---> Scegli file ---> questa volta selezioneremo  updatestack2. json file ---> Avanti ---> Avanti ---> Avanti.

9. Nella schermata successiva, fai clic su Aggiorna stack. Osserva il pannello Anteprima set di modifiche, puoi quali saranno gli effetti di questo aggiornamento.

Il primo cambiamento sembra familiare. Aggiungeremo una risorsa logica aggiuntiva per dogpics, che sarà un bucket S3. Ma vediamo anche un'azione Modifica. E la modifica è in realtà la cosa più rischiosa che potresti fare a uno stack CloudFormation.

Il motivo è che le risorse esistenti, che sono presenti e potenzialmente utilizzate da altri ambienti, potrebbero essere modificate dall'aggiornamento dello stack. Pertanto, la modifica delle risorse logiche esistenti è potenzialmente più rischiosa da utilizzare.

Ci sono 3 possibilità che una risorsa fisica sia influenzata quando aggiorni uno stack in questo modo. La prima possibilità è che una risorsa venga aggiornata senza alcuna interruzione del servizio.

La seconda possibilità è che la risorsa venga aggiornata e il servizio venga interrotto da un certo livello di interruzione. Ad esempio, quando aggiorni il tuo stack per modificare la dimensione dell'istanza EC2. Quando esegui questa operazione, dovrai riavviare manualmente l'istanza EC2. Verrà lanciata una nuova AMI e potresti riscontrare dei tempi di inattività. Ma una volta lanciata la nuova AMI, il tuo servizio sarà immediatamente disponibile.

L'ultima possibilità è che l'aggiornamento elimini l'intera risorsa fisica esistente e la sostituisca con una nuova (sostituzione). Questa è la possibilità più rischiosa durante l'aggiornamento del tuo stack CloudFormation. Dovresti davvero prestare attenzione quando lo fai. Quando si verifica questo tipo di sostituzione, la colonna Sostituzione è True, come mostrato nello screenshot qui sotto.

Sulla dashboard di CloudFormation Stacks, puoi vedere che dice \L'aggiornamento richiesto richiede la creazione di una nuova risorsa fisica; quindi crearne una.\ Quindi CloudFormation elimina la risorsa esistente e ne crea una nuova.

Passa alla tua dashboard S3, vedrai che il secchio catpics è sparito e ne è stato creato uno nuovo, catsareawesome-howtoforge. Nota che forniamo esplicitamente il nome fisico (catsareawesome-howtoforge) per una risorsa all'interno di un modello CloudFormation, non applica alcun carattere casuale al nome della risorsa.

Il problema è che se usiamo questo modello per creare un altro stack CloudFormation, fallirebbe perché tenterebbe di creare un altro bucket con lo stesso identico nome. E non puoi avere 2 bucket con lo stesso nome in nessun account AWS. Riceverai il seguente errore quando tenti di creare un altro bucket con lo stesso identico nome.

Eliminazione dei tuoi stack CloudFormation

Ora che abbiamo modificato il modello e aggiornato il nostro stack, dobbiamo assicurarci di eliminare lo stack dopo aver completato il lavoro su di esso. Se non eliminiamo gli stack inutilizzati, rimarranno nella nostra dashboard CloudFormation Stack a tempo indeterminato. Dovremmo andare manualmente lì ed eliminarlo.

Dalla dashboard di CloudFormation, seleziona il tuo stack, quindi seleziona Elimina. Quando CloudFormation elimina lo stack, elimina anche tutte le risorse all'interno di tale stack. Non è possibile eliminare solo una risorsa come il bucket S3 o l'istanza EC2. Questa azione viene eseguita in base alla progettazione.

Conclusione

In questa guida, abbiamo esaminato come vengono creati e modificati gli stack di CloudFormation. Abbiamo esaminato alcuni dei modi per modificare i modelli e come aggiornare gli stack esistenti. Abbiamo quindi esaminato alcune delle possibilità associate all'aggiornamento degli stack. Infine, abbiamo esaminato come eliminare gli stack di CloudFormation dopo aver finito di lavorarci.

Si prega di lasciare un commento qui sotto se avete domande o suggerimenti. Grazie per aver letto!