Comprensione degli strumenti IaC: AWS CDK e Terraform

AWS CDK e Terraform: non sai quale scegliere? Questo articolo ti aiuterà a prendere una decisione informata.

Il Cloud Computing ha rivoluzionato il mondo dell’informazione e della tecnologia. Dal modo in cui distribuiamo e gestiamo le applicazioni alle pratiche di sviluppo, tutto è stato fortemente influenzato dal Cloud Computing. Tutte le nuove applicazioni sono sviluppate per essere native del cloud e compatibili con i servizi cloud.

Il cloud computing ci aiuta a sviluppare architetture altamente disponibili, scalabili ed efficienti, che rendono i servizi cloud sempre più richiesti. Con questo boom del cloud computing arriva la necessità di mantenere l’infrastruttura come codice. La manutenzione manuale delle risorse cloud tramite console può essere un’attività complessa che può essere molto difficile da monitorare.

L’infrastruttura come codice, alias IAC o IAAC, risolve questo problema. Utilizzando IAC, possiamo definire le nostre risorse come codice e utilizzare questo codice per fornire servizi cloud. L’utilizzo dell’infrastruttura come codice consente a più sviluppatori di collaborare all’infrastruttura e di tenere traccia delle modifiche apportate dagli sviluppatori.

Infrastruttura come codice in AWS

AWS è il provider cloud più grande e più utilizzato a livello globale. Dispone di un proprio strumento IAC, AWS CloudFormation o AWS CDK, e consente anche a strumenti IAC di terze parti come Terraform di effettuare il provisioning delle risorse. Quando si scelgono gli strumenti IAC per AWS, Terraform, uno strumento di terze parti, è una solida concorrenza agli strumenti gestiti da AWS, AWS CloudFormation e AWS CDK.

Con così tante scelte e funzionalità fornite da ciascuno di questi strumenti, scegliere lo strumento IAC giusto può essere difficile. In questo articolo, discuteremo la differenza tra AWS CDK e Terraform. AWS CDK utilizza Cloudformation internamente, quindi per una visione più approfondita di Cloudformation e Terraform, fai riferimento all’articolo correlato, Comprensione degli strumenti IAC: CloudFormation vs. Terraform.

Terraforma

Terraform è un’infrastruttura open source come strumento di codice inizialmente sviluppato da Hashicorp. È uno strumento altamente accurato e maturo che supporta non solo AWS ma anche altri provider cloud. Terraform supporta tutti i servizi AWS e la comunità di sviluppo è pronta a cogliere qualsiasi nuova funzionalità che AWS aggiunge ai suoi servizi. Ci permette di scrivere codice nel linguaggio sviluppato Hashicorp (HCL). HCL è un linguaggio simile a JSON per la definizione delle risorse dell’infrastruttura.

AWS CDK

AWS CDK è un wrapper di AWS CloudFormation. Per comprendere il funzionamento di AWS CDK, dovresti conoscere un po’ di AWS CloudFormation. AWS CloudFormation è uno strumento gestito da AWS che ci consente di definire l’infrastruttura AWS in formato YML o JSON. Anche se leggere JSON e YML è facile, non sono veri e propri linguaggi di programmazione. Non esiste un supporto nativo per loop e funzioni, il che rende sempre più difficile il mantenimento di grandi infrastrutture. È qui che entra in gioco AWS CDK.

AWS CDK è un wrapper di AWS CloudFromation che ti consente di utilizzare linguaggi di programmazione familiari come JAVA o Python per eseguire il provisioning della tua infrastruttura. Ciò semplifica la scrittura e la manutenzione del codice.

Terraform vs. AWS CDK: differenze

# 1. Linguaggio e facilità d’uso

Il linguaggio e la facilità d’uso sono fondamentali per comprendere la differenza tra AWS CDK e Terraform.

Parliamo prima di Terraform. Terraform utilizza un linguaggio simile a JSON per definire risorse e altri dati, HCL o HashiCorp Configuration Language. È piuttosto semplice e la documentazione è facile da capire e da seguire, anche per i principianti.

Vediamo un codice per creare un bucket S3.

resource "aws_s3_bucket" "my_s3_bucket" {
  bucket = "my-tf-bucket"

  tags = {
    Name        = "My bucket"
    Environment = "Dev"
  }
}

Il codice è abbastanza semplice da leggere e puoi vedere altri parametri supportati da questa risorsa nel file Documentazione Terraform.

Come accennato in precedenza, AWS CDK è un wrapper CloudFormation che ci consente di definire le nostre risorse nei linguaggi di programmazione. Vediamo un codice AWS CDK per creare un bucket S3.

import * as cdk from '@aws-cdk/core';
import * as s3 from '@aws-cdk/aws-s3';

export class BucketStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
    new s3.Bucket(this, 'MyFirstBucket', {
      bucketName: 'my-first-bucket',
    });
 }
}

Il codice Terraform può sembrare un po’ più ordinato del CDK, ma entrambi i codici Terraform e CDK sono piuttosto semplici. Se prevedi di utilizzare IAC per un piccolo progetto, sia Terraform che CDK sono ottime opzioni per quanto riguarda la lingua e la facilità d’uso.

Tuttavia, quando si sceglie lo strumento IAC giusto per un grande progetto con molti sviluppatori, Terraform ha uno svantaggio. Per quanto semplice sia Terraform, è un nuovo linguaggio e dovrai addestrare i tuoi sviluppatori in un linguaggio completamente nuovo che non sia simile agli altri linguaggi di programmazione in uso. Ancora più importante, la manipolazione dei dati in Terraform non è così semplice come in altri linguaggi di programmazione. Ad esempio, scorrere elenchi e oggetti e trasformare i valori non è così semplice, soprattutto per i principianti.

Personalmente, preferirei AWS CDK su Terraform se si considera la facilità d’uso. Quando si utilizza Terraform, ci sono stati momenti in cui ho dovuto utilizzare soluzioni alternative o script complicati per ottenere i risultati desiderati. Il controllo che abbiamo sui dati e la capacità di manipolare facilmente i dati nei linguaggi di AWS CDK è una grande vittoria per AWS CDK.

#2. Scopo

Terraform è uno strumento IAC multi-cloud, il che significa che puoi utilizzare Terraform non solo con AWS ma anche con altri provider cloud come Azure o GCP. Terraform è un ottimo strumento per creare distribuzioni multi-cloud e avere un numero qualsiasi di provider cloud per la tua applicazione.

Ci sono stati momenti in cui le piattaforme globali ampiamente utilizzate sono diminuite a causa di un problema nei servizi del Cloud Provider. Al giorno d’oggi, è una decisione intelligente avere più di un provider cloud per le tue applicazioni.

AWS CDK è un’offerta AWS per IAC. Per quanto potente e maturo possa essere il CDK, è limitato solo al cloud AWS.

Quando si considera la portata degli strumenti IAC, Terraform è l’ovvio vincitore dei due. Ha molto senso che i tuoi sviluppatori utilizzino un unico strumento per tutte le piattaforme cloud.

#3. Prestazione

Le prestazioni di solito non sono il criterio più importante nella scelta dello strumento IAC giusto, ma potrebbe essere importante in progetti di grandi dimensioni. Terraform distribuisce le risorse utilizzando l’SDK AWS, mentre il codice CDK viene prima convertito in modelli CloudFormation e quindi applicato.

Terraform funzionerebbe leggermente più velocemente di AWS CDK, in particolare a causa del tempo impiegato da CDK per convertire il codice in CloudFormation Template.

#4. Modularità

Sia Terraform che AWS CDK possono essere utilizzati per creare moduli. Terraform ha il supporto nativo per i moduli. È possibile creare i propri moduli e ospitarli in un registro dei moduli privato da utilizzare all’interno della propria organizzazione. Terraform ha anche un registro dei moduli pubblico per l’hosting e l’utilizzo di moduli pubblici.

In AWS CDK, puoi creare funzioni, classi riutilizzabili e condividere questo codice all’interno della tua organizzazione per ottenere lo stesso risultato. Questo è un grande vantaggio in AWS CDK come l’altro strumento AWS IAC: CloudFormation non ti consente di creare e riutilizzare il codice come moduli. Puoi utilizzare gli stack nidificati in CloudFormation per soddisfare questo requisito, ma l’utilizzo di AWS CDK è un’alternativa molto più adatta.

Tutto sommato, entrambi gli strumenti sono simili sotto questo aspetto.

#5. Controllo e governance

In definitiva, tutto l’accesso alla Console AWS è controllato da IAM, il servizio di gestione delle identità di AWS. Puoi utilizzare le policy IAM con AWS CDK e Terraform per consentire e negare determinate operazioni. IAM ti consente di avere un controllo dettagliato su quali azioni possono essere intraprese sul tuo account.

Oltre a utilizzare IAM per controllare l’accesso alle risorse dell’account, Terraform offre una policy come framework di codice, Sentinel. Sentinel ti consente di scrivere politiche a grana fine per controllare correttamente le azioni di un utente tramite Terraform.

Conclusione

Poiché AWS CDK utilizza internamente CloudFormation, ti suggerisco di consultare l’articolo CloudFormation vs. Terraform per comprendere meglio le differenze tra AWS CDK e Terraform.

Nel complesso, sia AWS CDK che Terraform sono strumenti maturi e potenti. Terraform ha un leggero svantaggio quando si tratta di manipolazione dei dati. Tuttavia, secondo la mia esperienza, una volta che ti senti più a tuo agio con la scrittura di Terraform, l’utilizzo di soluzioni alternative e l’esecuzione delle trasformazioni dei dati diventa più semplice. Per le operazioni multi-cloud, Terraform è una scelta ovvia; tuttavia, se stai cercando di utilizzare AWS come provider cloud, AWS CDK è un’ottima alternativa.