Înțelegerea instrumentelor IaC: AWS CDK vs. Terraform

Alegerea între AWS CDK și Terraform poate fi dificilă? Acest articol vă oferă informațiile necesare pentru a lua o decizie corectă.

Tehnologia Cloud Computing a schimbat fundamental modul în care gestionăm informațiile și tehnologia. De la modul în care implementăm și întreținem aplicațiile, până la practicile de dezvoltare, totul a fost transformat de cloud. În prezent, majoritatea aplicațiilor sunt construite nativ pentru cloud și optimizate pentru a utiliza eficient serviciile cloud.

Cloud Computing ne permite să construim arhitecturi cu o înaltă disponibilitate, scalabilitate și eficiență, ceea ce explică popularitatea crescândă a serviciilor cloud. Odată cu expansiunea cloud-ului, a apărut necesitatea gestionării infrastructurii ca și cod. Gestionarea manuală a resurselor cloud prin intermediul consolei poate deveni rapid o sarcină complicată și greu de urmărit.

Infrastructura ca și cod, cunoscută și ca IaC sau IAAC, rezolvă această problemă. Prin utilizarea IaC, definim resursele noastre sub formă de cod, pe care îl folosim apoi pentru a furniza servicii cloud. Această abordare permite colaborarea mai eficientă a dezvoltatorilor și o evidență clară a modificărilor aduse infrastructurii.

Infrastructura ca și cod în AWS

AWS este liderul global în furnizarea de servicii cloud. Acesta dispune de instrumente IaC proprii, precum AWS CloudFormation și AWS CDK, dar permite și utilizarea instrumentelor IaC terțe, cum ar fi Terraform. Când vine vorba de alegerea unui instrument IaC pentru AWS, Terraform, fiind o soluție independentă, concurează serios cu instrumentele native AWS.

Cu atât de multe opțiuni și caracteristici oferite de fiecare instrument, alegerea corectă poate fi o provocare. În acest articol, vom explora diferențele dintre AWS CDK și Terraform. Deoarece AWS CDK utilizează intern CloudFormation, pentru o înțelegere mai detaliată a CloudFormation în comparație cu Terraform, vă recomandăm să consultați articolul dedicat: Înțelegerea instrumentelor IAC: CloudFormation vs. Terraform.

Terraform

Terraform este un instrument open-source de infrastructură ca și cod, creat inițial de Hashicorp. Este un instrument matur și versatil, care suportă nu doar AWS, ci și alți furnizori de cloud. Terraform acceptă toate serviciile AWS, iar comunitatea sa de dezvoltatori răspunde rapid la orice nouă funcționalitate adăugată de AWS. Permite scrierea codului în limbajul Hashicorp (HCL), un limbaj similar JSON, utilizat pentru definirea resurselor de infrastructură.

AWS CDK

AWS CDK funcționează ca un strat superior peste AWS CloudFormation. Pentru a înțelege funcționarea AWS CDK, este necesară o cunoaștere minimă a AWS CloudFormation. Acesta din urmă este un instrument gestionat de AWS, care permite definirea infrastructurii AWS în format YML sau JSON. Deși aceste formate sunt ușor de citit, ele nu sunt limbaje de programare propriu-zise. Lipsa suportului nativ pentru bucle și funcții face gestionarea infrastructurilor mari tot mai complexă. Aici intervine AWS CDK.

AWS CDK este un strat suplimentar peste AWS CloudFormation, care permite utilizarea limbajelor de programare cunoscute, cum ar fi JAVA sau Python, pentru a furniza infrastructura. Aceasta facilitează scrierea și întreținerea codului.

Terraform vs. AWS CDK: Diferențe

#1. Limbă și Ușurință în Utilizare

Limbajul și ușurința de utilizare sunt elemente esențiale pentru a distinge AWS CDK de Terraform.

Să începem cu Terraform. Acesta utilizează HCL (HashiCorp Configuration Language), un limbaj similar JSON, pentru a defini resursele. Este destul de simplu, iar documentația este clară și ușor de urmat, chiar și pentru începători.

Iată un exemplu de cod pentru a crea un bucket S3:

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

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

Codul este destul de lizibil și puteți găsi detalii despre parametrii acceptați în documentația Terraform.

Așa cum am menționat, AWS CDK este un înveliș peste CloudFormation, care ne permite să definim resursele în limbaje de programare. Iată un exemplu de cod AWS CDK pentru crearea unui 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',
    });
 }
}

Deși codul Terraform poate părea ușor mai intuitiv, ambele variante sunt destul de simple. Pentru proiecte mici, atât Terraform, cât și CDK sunt opțiuni viabile din punct de vedere al limbajului și ușurinței de utilizare.

Totuși, când alegem instrumentul IaC pentru un proiect amplu, cu mulți dezvoltatori, Terraform prezintă un dezavantaj. Oricât de simplu ar fi HCL, este un limbaj nou, necesitând instruirea dezvoltatorilor într-un limbaj complet nou, diferit de cele pe care le utilizează deja. Mai important, manipularea datelor în Terraform nu este la fel de simplă ca în alte limbaje de programare. De exemplu, iterarea prin liste și obiecte sau transformarea valorilor poate fi complexă, mai ales pentru începători.

Personal, aș prefera AWS CDK datorită ușurinței de utilizare. Experiența cu Terraform m-a pus în situația de a recurge la soluții de compromis sau scripturi complicate pentru a obține rezultatele dorite. Controlul asupra datelor și capacitatea de a le manipula cu ușurință în limbajele AWS CDK reprezintă un mare avantaj.

#2. Domeniul de Aplicare

Terraform este un instrument IaC multi-cloud, ceea ce înseamnă că îl puteți utiliza nu doar cu AWS, ci și cu alți furnizori, precum Azure sau GCP. Este o soluție excelentă pentru implementări multi-cloud și pentru a utiliza mai mulți furnizori de servicii pentru aplicația dvs.

În trecut, au existat situații când platforme globale populare au suferit căderi din cauza problemelor la nivelul furnizorului de cloud. Astăzi, este o decizie înțeleaptă să utilizați mai mult de un furnizor de cloud pentru aplicațiile dvs.

AWS CDK este o soluție IaC specifică pentru AWS. Oricât de robust și matur ar fi CDK-ul, el se limitează doar la AWS Cloud.

Din punct de vedere al domeniului de aplicare, Terraform este câștigătorul clar. Este mai eficient pentru dezvoltatori să utilizeze un singur instrument pentru toate platformele cloud.

#3. Performanță

Performanța nu este, de obicei, criteriul decisiv în alegerea unui instrument IaC, dar poate fi importantă în proiectele mari. Terraform implementează resurse folosind SDK-ul AWS, în timp ce codul CDK este transformat mai întâi în șabloane CloudFormation, care sunt apoi aplicate.

Terraform are o performanță ușor mai bună, în special datorită timpului necesar CDK pentru a converti codul în șabloane CloudFormation.

#4. Modularitate

Atât Terraform, cât și AWS CDK permit crearea de module. Terraform are suport nativ pentru module, pe care le puteți crea și găzdui într-un registru privat pentru a le reutiliza în cadrul organizației. Există, de asemenea, un registru public de module pentru utilizarea modulelor publice.

În AWS CDK, puteți crea funcții, clase reutilizabile, și le puteți partaja în cadrul organizației pentru a obține același rezultat. Acesta este un avantaj major, deoarece CloudFormation nu oferă posibilitatea de a crea și reutiliza cod sub formă de module. Puteți utiliza stive imbricate în CloudFormation, dar AWS CDK este o alternativă mult mai eficientă.

În general, ambele instrumente sunt similare din acest punct de vedere.

#5. Control și Guvernare

În cele din urmă, accesul la AWS Console este controlat prin IAM, serviciul de management al identității AWS. Puteți utiliza politicile IAM atât cu AWS CDK, cât și cu Terraform pentru a permite sau interzice anumite acțiuni. IAM oferă un control granular asupra acțiunilor care pot fi efectuate în contul dvs.

Pe lângă IAM, Terraform oferă și un cadru de politici ca și cod, numit Sentinel. Acesta permite scrierea de politici detaliate, care controlează acțiunile unui utilizator prin intermediul Terraform.

Concluzie

Având în vedere că AWS CDK utilizează intern CloudFormation, vă recomand să analizați articolul CloudFormation vs. Terraform pentru a înțelege mai bine diferențele dintre AWS CDK și Terraform.

În ansamblu, atât AWS CDK, cât și Terraform sunt instrumente puternice și mature. Terraform are un mic dezavantaj când vine vorba de manipularea datelor. Totuși, cu experiență, scrierea de cod în Terraform și utilizarea soluțiilor alternative pentru transformarea datelor devine mai ușoară. Pentru operațiuni multi-cloud, Terraform este o alegere evidentă, dar dacă intenționați să utilizați doar AWS, AWS CDK este o alternativă excelentă.