Amazon CloudFormation gestire AWS con dei template
da Davide Riboldi · pubblicato il 21 luglio, 2014 · modificato il 20 luglio, 2016

Il servizio AWS CloudFormation fornisce agli sviluppatori e amministratori di sistema un modo semplice ed efficace per poter gestire e creare un insieme di risorse in cloud attraverso l’utilizzo di alcuni template. Il servizio consente l’avvio o la cancellazione di risorse AWS come se fossero un’unica risorsa (definita stack). Nei template (un file di testo in formato JSON-compliant) vengono definite le caratteristiche e i parametri dello stack, il mapping, le proprietà delle risorse e i valori di output.

È possibile scrivere un template da zero, oppure iniziare con uno dei modelli di esempio che vengono forniti da AWS. Con Amazon CloudFormation è possibile utilizzare una serie di prodotti presenti negli Amazon Web Services come ad esempio: Amazon EC2, Amazon Elastic Beanstalk, Amazon RDS e molti altri. Per avere solo un’idea di quante cose sia possibile gestire andate su Servizi AWS con template cloudformation. Anche se inizialmente può sembrare scomodo creare un file JSON, una volta creato quello che serve, si incomincerà a risparmiare tantissimo tempo, anche negli ambienti di prova.

Introduzione

Il servizio può essere usato anche per non ripetere sempre le stesse operazioni manuali sia esse eseguite da console o da linea di comando con Amazon CLI, ad esempio se abbiamo un’ambiente fatto da un’istanza EC2, un database MySQL su Amazon RDS, un load balancing e un Elastic IP possiamo definire tutto dentro un template e richiamarlo quando abbiamo la  necessità di far ripartire tutto il nostro ambiente.

In questo articolo, come ormai è nostra abitudine, cercheremo prima di tutto di vedere quelli che sono i concetti generali del servizio per poi passare allo sviluppo di qualche esempio che possiamo provare con il nostro account AWS. Una volta capito il template, il servizio consiste nella conoscenza dei parametri e l’unica maniera per cercarli è quella di leggere la documentazione ufficiale o aprire i template di esempio.

Lo stack

Uno stack è un insieme di risorse che derivano dal deploy di un template. È possibile creare uno stack fornendo un template memorizzato su S3 e sulla base di questo e di tutte le dipendenze specificate CloudFormation determina quali risorse AWS devono essere create e l’ordine in cui vengono create all’interno dello stack. È possibile anche modificare uno stack elaborando un nuovo template modificato, sarà CloudFormation a prendersi cura delle modifiche che riguardano le risorse presenti nello stack.

CloudTrail

In molti casi i cambiamenti verranno apportati senza pregiudicare il funzionamento della propria applicazione, tuttavia se una modifica non può essere eseguita in modo dinamico (ad esempio l’aggiornamento di una AMI su un’istanza EC2), il servizio creerà una nuova risorsa da inserire nello stack, eliminando la vecchia una volta che il servizio ha determinato che l’intero aggiornamento sia andato a buon fine.

Templates

Il template è il cuore di questo servizio, è un file in formato JSON che contiene tutte le informazioni che riguardano un’ambiente AWS, fatto di risorse, configurazioni, scripts e relazioni tra una risorsa e un’altra. Nel template bisogna dichiarare diversi tipi di oggetti come ad esempio (version, description, parameters, conditions, resources, mappings e outputs) i quali servono al servizio  durante la creazione di uno stack.

Tra tutti gli oggetti da dichiarare per la creazione di uno stack solo il “resources” è obbligatorio, in quanto indica le risorse AWS che devono essere utilizzate, tutti gli altri possono essere opzionali. Per incominciare a prendere confidenza con un template vi allego un codice di esempio in cui viene illustrata la struttura principale:

{
  "AWSTemplateFormatVersion" : "2010-09-09",
  "Description" : "Template per tutorial AWS",
  "Parameters" : {
    set of parameters
  },
  "Mappings" : {
    set of mappings
  },
  "Conditions" : {
    set of conditions
  },
  "Resources" : {
    set of resources
  },
  "Ouputs" : {
    set of outputs
  }
}

AWSTemplateFormatVersion: la versione del formato del template è una dichiarazione opzionale e poiché il formato del template in CloudFormation non è ancora cambiato, attualmente esiste un solo valore supportato: 2010-09-09.

Description: la descrizione del template è facoltativa, quando viene specificata deve seguire la sezione AWSTemplateFormatVersion. Questa sezione viene utilizzata per inserire una descrizione arbitraria del template.

Parameters: questa sezione consente di passare dei valori al template durante la creazione dello stack. I parametri permettono di creare un template che può essere personalizzato ogni volta che eseguiamo una creazione di uno stack.

Mappings: in queste sezioni vengono associate delle chiavi ad un insieme di valori. Ad esempio, se si desidera impostare dei valori in base alla regione, è possibile creare una mappatura che utilizzi il nome della regione come chiave che contenga i valori che si desidera specificare per ogni specifica regione. (appunto mappatura).

Conditions: è possibile definire delle condizioni utilizzando delle funzioni intrinseche, è possibile, ad esempio, confrontare se un valore è uguale ad un altro valore e sulla base del risultato della condizione è possibile creare delle risorse specifiche.

Resources: in questa sezione vengono dichiarate tutte le risorse AWS che faranno parte dello stack e che quindi che verranno create. Questa è l’unica sezione obbligatoria del template e deve essere sempre dichiarata, mentre tutte le altre sono facoltative. Per ogni risorsa dichiarata si possono anche specificare delle proprietà che definiscono nel dettaglio come deve essere creata la risorsa stessa.

Outputs: questa sezione consente di restituire all’utente uno o più valori in risposta al comando describe-stacks di CloudFormation. Grazie a questa sezione è possibile, ad esempio, ottenere l’ID delle istanze EC2 create oppure l’URL per un collegamento alle risorse di Amazon CloudFront che sono state create nello stack.

Stack API

CloudFormation è facilmente accessibile attraverso management console, che fornisce un’interfaccia web per poter implementare e gestire gli stack. Utilizzando la console è possibile in pochi e semplici passi creare, cancellare e aggiornare gli stack. Oltre alla console, CloudFormation fornisce un insieme di API, qui di seguito viene riportato un elenco con le più utilizzate e con le loro funzioni principali:

CreateStack: avvia la creazione di un nuovo stack. I parametri di input includono il nome dello stack e un file su Amazon S3 come template di origine. Se il processo di creazione viene completato con successo, lo stack andrà in CREATE_COMPLETE. Se la creazione non riesce, CloudFormation elimina tutte le risorse già create, a meno che l’utente non abbia specificato di mantenere gli elementi in caso di errore per debug.

DescribeStackEvents: monitora l’avanzamento delle varie operazioni di creazione o di cancellazione risorse che avvengono all’interno di uno stack.

ListStacks: elenca tutti gli stack all’interno del proprio account. E’ possibile utilizzare questa API per visualizzare lo stato di uno stack specifico.

ListStackResources: elenca il contenuto completo di uno stack che server per controllare o visualizzare lo stato delle singole risorse definite al suo interno.

UpdateStack: avvia il processo di aggiornamento di uno stack esistente. I parametri di input includono il nome dello stack e un file S3 con il template aggiornato. Se il processo di aggiornamento viene completato con successo, lo stack passerà in uno stato di: UPDATE_COMPLETE. Se l’aggiornamento dello stack non riesce, CloudFormation eliminerà tutte le modifiche, riportando lo stack allo stato del template originale.

DeleteStack: avvia la cancellazione di uno stack. Quando si elimina uno stack ciascuna risorsa al suo interno viene cancellata. Anche se CloudFormation ottimizza il processo di cancellazione, l’ordine con cui vengono cancellate le risorse non è prevedibile.

Editor JSON online

Se volete analizzare i file JSON di esempio che trovate nella documentazione ufficiale vi consiglio di utilizzare lo strumento di Editor JSON online. Basta fare un copia e incolla e visionare il contenuto del file in una maniera sicuramente più comoda.

CloudFormation

Sulla sinistra della schermata possiamo incollare il codice originale, mentre sulla destra possiamo navigare l’albero gerarchico della struttura JSON.

Guida completa su AWS

Questo articolo appartiene ad una serie di pubblicazioni che costituiscono una guida completa dedicata agli Amazon Web Services.  Molti servizi che trattiamo in questo blog vengono anche spiegati con dei video che trovate nel nostro canale youtube. Se volete seguire questo percorso didattico iscrivetevi alla community Cloud AWS.

1 Commento

  1. Non conoscevo il tools JSON Editor, ho perso un sacco di tempo fino adesso a leggermi i file in formato nativo, mi hai fatto scoprire una cosa che nella sua semplicità mi farà risparmiare parecchio tempo. Grazie per l'articolo e per tutte le informazioni interessanti che pubblicate su questo blog.

condividi