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

AWS CDK și Terraform – nu sunteți sigur pe care să alegeți? Acest articol vă va ajuta să luați o decizie informată.

Cloud Computing a revoluționat lumea informației și tehnologiei. De la modul în care implementăm și menținem aplicațiile până la practicile de dezvoltare, totul a fost puternic afectat de Cloud Computing. Toate aplicațiile noi sunt dezvoltate pentru a fi native din cloud și compatibile cu serviciile cloud.

Cloud Computing ne ajută să dezvoltăm arhitecturi foarte disponibile, scalabile și eficiente, ceea ce face ca serviciile cloud să fie din ce în ce mai solicitate. Odată cu acest boom în cloud computing, apare necesitatea de a menține infrastructura ca un cod. Menținerea manuală a resurselor cloud prin consolă poate fi o sarcină complexă care poate fi foarte dificil de urmărit.

Infrastructura ca cod, aka IAC sau IAAC, rezolvă această problemă. Utilizând IAC, putem defini resursele noastre ca cod și folosim acest cod pentru a furniza servicii cloud. Utilizarea infrastructurii ca cod permite mai multor dezvoltatori să colaboreze la infrastructură și să țină evidența modificărilor făcute de dezvoltatori.

Infrastructura ca cod în AWS

AWS este cel mai mare și cel mai utilizat furnizor de cloud la nivel global. Are propriul său instrument IAC, AWS CloudFormation sau AWS CDK și, de asemenea, permite instrumentelor IAC terțe, cum ar fi Terraform, să furnizeze resurse. Atunci când alegeți instrumente IAC pentru AWS, Terraform, un instrument terță parte, este o competiție solidă pentru instrumentele gestionate de AWS, AWS CloudFormation și AWS CDK.

Cu atât de multe opțiuni și caracteristici pe care le oferă fiecare dintre aceste instrumente, alegerea instrumentului IAC potrivit poate fi o provocare. În acest articol, vom discuta diferența dintre AWS CDK și Terraform. AWS CDK utilizează Cloudformation intern, așa că pentru o vedere mai detaliată a Cloudformation și Terraform, vă rugăm să consultați articolul asociat, Înțelegerea instrumentelor IAC: CloudFormation vs. Terraform.

Terraform

Terraform este o infrastructură open-source ca instrument de cod dezvoltat inițial de Hashicorp. Este un instrument foarte precis și matur care acceptă nu numai AWS, ci și alți furnizori de cloud. Terraform acceptă toate serviciile AWS, iar comunitatea de dezvoltare este rapidă să înțeleagă orice funcție nouă pe care AWS o adaugă la serviciile sale. Ne permite să scriem cod în limbajul dezvoltat Hashicorp (HCL). HCL este un limbaj asemănător JSON pentru definirea resurselor de infrastructură.

  Cum să gestionați și să transferați date pe Nintendo Switch

AWS CDK

AWS CDK este un înveliș în jurul AWS CloudFormation. Pentru a înțelege funcționarea AWS CDK, ar trebui să știți puțin despre AWS CloudFormation. AWS CloudFormation este un instrument gestionat de AWS care ne permite să definim infrastructura AWS în format YML sau JSON. Chiar dacă citirea JSON și YML este ușoară, acestea nu sunt limbaje de programare reale. Nu există suport nativ pentru bucle și funcții, ceea ce face menținerea infrastructurilor mari din ce în ce mai dificilă. Aici intervine AWS CDK.

AWS CDK este un înveliș în jurul AWS CloudFromation care vă permite să utilizați limbaje de programare familiare, cum ar fi JAVA sau Python, pentru a vă furniza infrastructura. Acest lucru 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 vitale pentru a înțelege diferența dintre AWS CDK și Terraform.

Să vorbim mai întâi despre Terraform. Terraform folosește un limbaj asemănător JSON pentru a defini resursele și alte date, HCL sau limbajul de configurare HashiCorp. Este destul de simplu, iar documentația este ușor de înțeles și de urmărit, chiar și pentru începători.

Să vedem un cod pentru a crea o găleată S3.

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

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

Codul este destul de simplu de citit și puteți vedea alți parametri pe care îi acceptă această resursă în Documentație Terraform.

Așa cum am menționat anterior, AWS CDK este un wrapper CloudFormation care ne permite să ne definim resursele în limbaje de programare. Să vedem un cod AWS CDK pentru a crea 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',
    });
 }
}

Codul Terraform poate arăta puțin mai bine decât CDK, dar atât codurile Terraform, cât și codurile CDK sunt destul de simple. Dacă intenționați să utilizați IAC pentru un proiect mic, atât Terraform, cât și CDK sunt opțiuni excelente în ceea ce privește limbajul și ușurința de utilizare.

  Cum să generați date de testare false cu Go

Cu toate acestea, atunci când alegeți instrumentul IAC potrivit pentru un proiect mare cu mulți dezvoltatori, Terraform are un dezavantaj. Oricât de simplu este Terraform, este un limbaj nou și va trebui să vă instruiți dezvoltatorii într-un limbaj complet nou, care nu este similar cu celelalte limbaje de programare utilizate. 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 și transformarea valorilor nu este la fel de simplă, mai ales pentru începători.

Personal, aș prefera AWS CDK decât Terraform dacă țin cont de ușurința de utilizare. Când folosesc Terraform, au fost momente când a trebuit să folosesc soluții de soluționare sau scripturi complicate pentru a obține rezultatele dorite. Controlul pe care îl avem asupra datelor și capacitatea de a manipula cu ușurință datele în limbaje AWS CDK reprezintă un mare câștig pentru AWS CDK.

#2. Domeniul de aplicare

Terraform este un instrument IAC multi-cloud, ceea ce înseamnă că nu puteți utiliza Terraform doar cu AWS, ci și cu alți furnizori de cloud precum Azure sau GCP. Terraform este un instrument excelent pentru a crea implementări multi-cloud și pentru a avea orice număr de furnizori de cloud pentru aplicația dvs.

Au existat momente în care platformele globale utilizate pe scară largă au scăzut din cauza unei probleme în serviciile furnizorului de cloud. În zilele noastre, este o decizie inteligentă să ai mai mult de un furnizor de cloud pentru aplicațiile tale.

AWS CDK este o ofertă AWS pentru IAC. Oricât de puternic și matur poate fi CDK-ul, este limitat doar la AWS Cloud.

Când luăm în considerare domeniul de aplicare al instrumentelor IAC, Terraform este câștigătorul evident al celor două. Este foarte logic ca dezvoltatorii tăi să folosească un singur instrument pentru toate platformele cloud.

#3. Performanţă

Performanța nu este de obicei cel mai important criteriu atunci când alegeți instrumentul IAC potrivit, dar ar putea conta în proiectele mari. Terraform implementează resurse folosind SDK-ul AWS, în timp ce codul CDK este mai întâi convertit în șabloane CloudFormation și apoi aplicat.

  9 cele mai bune șabloane SOP (Procedură de operare standard) pentru companii

Terraform ar funcționa puțin mai rapid decât AWS CDK, în special din cauza timpului necesar CDK pentru a converti codul în CloudFormation Template.

#4. Modularitate

Atât Terraform, cât și AWS CDK pot fi folosite pentru a crea module. Terraform are suport nativ pentru module. Puteți să vă creați propriile module și să le găzduiți într-un registru de module privat pentru a le utiliza în cadrul organizației dvs. Terraform are, de asemenea, un registru de module publice pentru găzduirea și utilizarea modulelor publice.

În AWS CDK, puteți crea funcții, clase reutilizabile și puteți partaja acest cod în cadrul organizației dvs. pentru a obține același rezultat. Acesta este un mare plus în AWS CDK ca celălalt instrument AWS IAC – CloudFormation nu vă permite să creați și să reutilizați codul ca module. Puteți utiliza stive imbricate în CloudFormation pentru a îndeplini această cerință, dar utilizarea AWS CDK este o alternativă mult mai potrivită.

Una peste alta, ambele instrumente sunt similare în acest aspect.

#5. Control și guvernare

În cele din urmă, tot accesul la AWS Console este controlat de IAM, serviciul de management al identității de la AWS. Puteți utiliza politicile IAM atât cu AWS CDK, cât și cu Terraform pentru a permite și a respinge anumite acțiuni. IAM vă permite să aveți un control precis asupra acțiunilor care pot fi întreprinse în contul dvs.

Pe lângă utilizarea IAM pentru a controla accesul la resursele contului, Terraform oferă o politică ca cadru de cod, Sentinel. Sentinel vă permite să scrieți politici detaliate pentru a controla corect acțiunile unui utilizator prin Terraform.

Concluzie

Deoarece AWS CDK utilizează în mod intern CloudFormation, vă sugerez să parcurgeți articolul CloudFormation vs. Terraform pentru a înțelege mai bine diferențele dintre AWS CDK și Terraform.

În general, atât AWS CDK, cât și Terraform sunt instrumente mature și puternice. Terraform are un ușor dezavantaj când vine vorba de manipularea datelor. Cu toate acestea, din experiența mea, odată ce vă simțiți mai confortabil cu scrierea Terraform, folosirea soluțiilor alternative și efectuarea transformărilor de date devine mai ușoară. Pentru operațiuni multi-cloud, Terraform este o alegere evidentă; cu toate acestea, dacă doriți să utilizați AWS ca furnizor de cloud, AWS CDK este o alternativă excelentă.