Deploy AWS CLI e CloudFormation per l’infrastruttura

Nel buio passato dei server fisici, l’infrastruttura veniva fornita utilizzando cacciaviti e cavi in scantinati umidi. Questi tempi bui sono diventati più luminosi quando le soluzioni di cloud pubblico hanno iniziato a prendere il sopravvento sull’infrastruttura in loco come modo preferito per fornire e gestire i server. In questo post del blog, scopri come distribuire soluzioni cloud con AWS CLI e CloudFormation.

Questo è un post ospite di Karl Eriksson, cofondatore di Mocki – uno strumento che consente di creare API di prova in pochi minuti.

Se stai gestendo un ambiente per la tua applicazione, puoi gestire facilmente le cose tramite un’interfaccia utente grafica (GUI) come la Console AWS. Ma quando hai più ambienti come sviluppo, staging e produzione, le cose si complicano. Entra in gioco l’errore umano e il tempo. AWS CLI e CloudFormation possono aiutare.

Devi gestire la tua infrastruttura come codice. Nel mondo AWS, il modo per farlo è con gli stack di CloudFormation.

Quando si distribuisce uno stack di CloudFormation per la prima volta, AWS creerà tutto da zero. Se si distribuisce lo stack come aggiornamento, rileverà eventuali modifiche all’infrastruttura e distribuirà solo quelle modifiche.

Gli stack di CloudFormation garantiscono che le stesse modifiche vengano applicate in tutti i diversi ambienti.

CloudFormation: l’infrastruttura come codice di AWS

AWS Infrastructure as Code Source: https://aws.amazon.com/cloudformation/

AWS CloudFormation è uno strumento per scrivere e fornire infrastrutture come codice in un ambiente AWS. La maggior parte dei servizi di AWS è supportata da CloudFormation. La maggior parte di ciò che è possibile creare utilizzando la Console AWS, come server virtuali, database, bilanciatori di carico e archiviazione di file, può essere aggiunta a uno stack di CloudFormation. Una volta aggiunti, tutte queste risorse possono poi essere distribuite da una riga di comando o da un altro processo automatizzato.

Per gli aggiornamenti, CloudFormation si assicura che le operazioni vengano eseguite nel modo più efficiente possibile e annulla automaticamente le modifiche se qualcosa va storto.

Ora impariamo come creare un’infrastruttura utilizzando AWS CLI e CloudFormation.

Prerequisiti

Per seguire il tutorial di CloudFormation nel resto di questo articolo, assicurati di avere quanto segue:

  • Un account AWS
  • AWS CLI – Scopri come scaricarla e configurarla qui. Puoi confermare che la CLI sia stata configurata correttamente eseguendo il comando aws s3 ls. Se il comando restituisce un risultato positivo, tutto è a posto.

Se hai configurato più profili AWS tramite AWS CLI, utilizza uno adatto a scopi di sviluppo o test per questo tutorial.

Creazione del tuo primo stack CloudFormation

Abbiamo abbastanza informazioni di base, passiamo all’azione e utilizziamo AWS CLI e CloudFormation per creare uno stack!

In questo esempio, creerai uno stack contenente l’infrastruttura necessaria per distribuire un sito web statico ospitato sul servizio di hosting di file statici AWS S3.

Per iniziare, crea un nuovo file chiamato template.yaml e riempilo con il seguente contenuto:

AWSTemplateFormatVersion: 2010-09-09
Description: A simple CloudFormation template
Resources:
    Bucket:
        Type: AWS::S3::Bucket
        Properties:
            BucketName: your-bucket-name # usa un nome unico tuo
  • AWSTemplateFormatVersion determina la versione del formato del modello in modo che AWS possa interpretarlo correttamente durante il rilascio.
  • Description – contiene una descrizione del modello che verrà visualizzata nella Console AWS una volta distribuito.
  • Risorse – contiene tutta l’infrastruttura che stai aggiungendo al modello. In questo caso, le risorse creeranno un semplice bucket S3 che ospiterà un sito statico.

La proprietà BucketName deve essere unica, quindi cerca di trovare qualcosa diverso dal tuo-nome-del-bucket.

Implementazione dello stack con AWS CLI e CloudFormation

Ora che hai creato un modello semplice per l’implementazione, eseguilo su AWS utilizzando AWS CLI e CloudFormation tramite il comando seguente:

aws cloudformation deploy --template-file template.yaml --stack-name static-website

Dopo aver eseguito il comando, vai alla Console AWS e poi a Servizi → CloudFormation. Dovresti vedere l’implementazione in corso. Dopo alcuni minuti, dovresti vederla entrare nello stato CREATE_COMPLETE. Se è così, è completa!

Se ci sono stati degli errori, dovresti poterli vedere nella sezione Eventi quando visualizzi i dettagli del tuo stack.

Navigando su ServiziS3, dovresti ora vedere un nuovo bucket S3 creato.

Costruzione del Sito Web Semplice

Una volta che hai un bucket S3 pronto per memorizzare un sito web, crea un file index.html che fungerà da sito.

Se non hai in mente qualcosa di tuo, puoi utilizzare il seguente contenuto nel tuo file index.html:

<html>
  <body>
    <h1>Static Site Deployed Using CloudFormation</h1>
    <p>Hello! This site was deployed using CloudFormation. Go cloud!</p>
  </body>
</html>

Salva il file index.html e caricalo nel tuo bucket S3 tramite la Console AWS.

Assicurati di concedere l’accesso in lettura pubblico al file di indice poiché sarà accessibile a tutti i visitatori del sito.

Aggiornamento del Modello

Al momento, il bucket S3 appena creato non è configurato per ospitare un sito web. Modifichiamolo. Attualmente è possibile scaricare il file di indice tramite la console AWS, ma non è accessibile tramite Internet pubblico. Utilizzando AWS CLI e CloudFormation, modifica la configurazione per abilitare l’hosting di un sito web statico.

Modifica il file template.yaml come mostrato di seguito per abilitare questa funzionalità. Di seguito presentiamo alcune nuove proprietà per il nostro modello.

AWSTemplateFormatVersion: 2010-09-09
Description: A simple CloudFormation template
Resources:
    Bucket:
        Type: AWS::S3::Bucket
        Properties:
            BucketName: your-bucket-name # usa un nome unico
            AccessControl: PublicRead
            WebsiteConfiguration:
                IndexDocument: index.html
Outputs:
    WebsiteURL:
        Value: !GetAtt [Bucket, WebsiteURL]
        Description: URL for website hosted on S3
  • AccessControl – imposta i diritti di accesso al bucket S3 come “public read” in modo che qualsiasi utente che visita il sito possa vedere il file index.html
  • WebsiteConfiguration – configura il bucket S3 come un sito web che servirà il file index.html caricato quando gli utenti visitano l’URL del bucket
  • Outputs – possono essere diverse proprietà per le risorse che fanno parte dello stack. Nell’esempio precedente, l’output dello stack è l’URL del sito web. Quando si distribuisce nuovamente il modello, dovresti vedere l’URL del sito web come output nella Console AWS CloudFormation.

Ora distribuisci le modifiche allo stack esistente utilizzando lo stesso comando del passaggio precedente.

aws cloudformation deploy --template-file template.yaml --stack-name static-website

Per confermare il risultato, vai alla console di CloudFormation. Dopo alcuni minuti, dovresti notare che lo stack è nello stato UPDATE_COMPLETE. Quando lo stack raggiunge questo stato, vai alla scheda Outputs dove dovresti vedere l’aggiunta di WebsiteUrl come output nel modello.

Fai clic sull’URL fornito e dovresti vedere il tuo sito nel tuo browser.

Congratulazioni! Con AWS CLI e CloudFormation, hai ora distribuito il tuo primo stack utilizzando l’infrastruttura come codice! A questo punto, continua ad aggiungere al tuo file di modello per distribuire nuove modifiche o crearne uno nuovo in base alle tue esigenze.

Conclusione

In questo tutorial, hai appreso il concetto di infrastruttura come codice e i vantaggi che ha rispetto alla provisioning manuale dell’infrastruttura. Utilizzando l’approccio di infrastruttura come codice con AWS CLI e CloudFormation, hai quindi distribuito uno stack per creare un sito web statico.

Utilizzando i principi appresi in questo tutorial, puoi distribuire un sistema pronto per la produzione completamente utilizzando CloudFormation.

Ulteriori Letture

Se desideri leggere di più sull’infrastruttura come codice come fenomeno, dai un’occhiata a Infrastructure as Code in the Real World di HashiCorp.

Se desideri saperne di più su come integrare CloudFormation nel tuo flusso di sviluppo e gestire tutta la tua infrastruttura utilizzando CloudFormation, assicurati di dare un’occhiata:

Buona fortuna nel tuo viaggio nel deployare tutta la tua infrastruttura utilizzando l’infrastruttura come codice in AWS!

Source:
https://adamtheautomator.com/aws-cli-and-cloudformation/