Via G. Falcone 5, Pollenza (MC), Italy
+39 0733 203595

AWS Cloud Development Kit (AWS CDK)

In Madisoft utilizziamo da sempre le buone pratiche per la gestione delle nostre infrastrutture. Abbiamo sempre pensato che il cloud fosse la scelta giusta per i nostri servizi, ma soprattutto eravamo certi che gestire la nostra infrastruttura come codice, ci avrebbe rallentato leggermente nelle fasi iniziali dei nostri progetti, ma poi, sul lungo periodo, avremmo avuto solo grandi vantaggi. E cosi è stato.

Fino ad oggi abbiamo usato quasi esclusivamente Ansible, anche se adesso stiamo iniziando ad utilizzare anche Amazon CloudFormation, strumento potente e completo, ma, a nostro avviso, troppo dispersivo in particolare nella scrittura del codice dei modelli complessi.

Amazon ha rilasciato al re:invent 2018 AWS Cloud Development Kit (AWS CDK):

Il kit di sviluppo del cloud AWS (AWS CDK) è un framework di sviluppo software open source che consente di modellare ed erogare risorse di applicazioni cloud tramite linguaggi di programmazione noti.

AWS CDK può essere definito come un wrapper per Amazon CloudFormation, infatti, dove prima era necessario scrivere modelli abbastanza complessi e lunghi, ora, grazie ad AWS CDK, è possibile definire le sole risorse necessarie all’interno del nostro codice e distribuirle con CloudFormation.

AWS CDK ti permette di modellare l’infrastruttura dell’applicazione utilizzando (per il momento) TypeScript, Python, Java e .NET.

Si esatto fa proprio quello che stai pensando, permette di scrivere codice con uno dei linguaggi descritti e automaticamente  offre la possibilità di utilizzare la potenza e la sicurezza di CloudFormation per distribuire le nostre infrastrutture su AWS.

Immagine di proprietà di Amazon AWS
Immagine di proprietà di Amazon AWS

In questo esempio utilizzeremo TypeScript, linguaggio di programmazione che si basa su un Super-set di JavaScript, molto intuitivo e semplice.

L’infrastruttura che andremo a creare è composta dall’orchestratore ECS, nella modalità di configurazione Fargate, che gestisce al suo interno un container Docker con un semplice web server. L’infrastruttura verrà creata in una VPC con un bilanciatore di traffico davanti.

La prima cosa da fare è creare la directory che ospiterà il nostro codice, con i relativi files:

Inseriamo nei rispettivi file il contenuto necessario per utilizzare il framework CDK:

Il file cdk.json contiene i parametri di esecuzione degli script di CDK. Nello specifico definiamo l’eseguibile node, utilizzato per invocare lo script index (sostituisce il –app da linea di comando). Mentre il secondo parametro specifica di non richiedere conferma durante l’esecuzione dello script.

Il file package.json è il manifest di npm. E’ necessario specificare in questo file informazioni come il nome dell’app, la versione, le dipendenze, etc…

Il file tsconfig.json è il file di configurazione di TypeScript, specifica, tra le altre cose, le opzioni del compilatore richieste per il progetto.

Infine il file centrale della nostra applicazione, dove scriveremo il codice per creare la nostra infrastruttura:

I primi 4 import permettono di ereditare i moduli e le classi necessarie per costruire la nostra infrastruttura.

Una volta creata la classe MadisoftCdk, è possibile richiedere un’istanza del servizio che ci occorre in poche righe di codice.

Verrà creata una VPC e tutte le sue configurazioni interne (route tables, subnet, security group, InternetGateway, etc…). Ovviamente, se si vuole, possono essere sovrascritte o gestite nel codice.

Poi, andando avanti con il codice, procediamo alla creazione di un cluster ECS, con la modalità di configurazione Fargate.

In questo esempio abbiamo preso come container Docker la seguente immagine amazon/amazon-ecs-sample, ovviamente è possibile caricare in Fargate qualsiasi immagine Docker.

Infine l’ultima operazione che facciamo è istanziare un Load Balancer che smisterà il traffico verso il nostro cluster Fargate.

Tutta questa operazione è abbastanza complessa se fatta con CloudFormation, mentre con CDK necessita di circa 20 righe di codice!

Ora vediamo, praticamente, come creare la nostra infrastruttura.

Abbiamo creato un semplice script bash per inizializzare l’ambiente, secondo le necessità di AWS CDK, e non ripetere ogni volta i comandi.  Nel file bash sono esportate le credenziali AWS dentro il container locale (facendo un export della AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY e della region):

AWS CDK richiede che node.js sia installato sull’ambiente utilizzato per creare l’infrastruttura, per semplicità abbiamo usato un container Docker in locale, con node.js preinstallato, per fare i nostri test. Anche i comandi di seguito sono stati inseriti in un file bash:

Quindi, provando ad eseguire il nostro container locale (che con l’opzione –rm viene distrutto dopo il suo utilizzo), in pochi minuti abbiamo la nostra infrastruttura pronta per l’utilizzo. Di seguito l’output del comando:

A questo punto la nostra infrastruttura è pronta. Per connetterci al nostro container basta prelevare l’URL dall’output del comando precedente, ed inserirlo nel nostro browser:

 

Ovviamente possiamo personalizzare il nostro script in modo da poter scalare automaticamente i container dentro Fargate, oppure creare nuovi servizi semplicemente aggiungendo qualche riga di codice. Tutto questo gestendo la nostra infrastruttura come codice in modo semplice ed intuitivo.

Per distruggere quanto fatto basta eseguire il seguente comando:

Il comando cancellerà tutte le risorse precedentemente create utilizzando CloudFormation:

Rispetto a strumenti utilizzati in passato come Terraform, Ansible, CloudFormation, ci sembra che AWS CDK sia veramente il punto di svolta per rispondere al meglio al paradigma: Infrastructure as Code (IaC)!

Related Posts

Leave a reply


This site uses Akismet to reduce spam. Learn how your comment data is processed.