Porozumění nástrojům IaC: AWS CDK vs. Terraform

AWS CDK a Terraform – nejste si jisti, který vybrat? Tento článek vám pomůže učinit informované rozhodnutí.

Cloud Computing způsobil revoluci ve světě informací a technologií. Od způsobu, jakým nasazujeme a udržujeme aplikace až po postupy vývoje, všechno bylo výrazně ovlivněno Cloud Computingem. Všechny nové aplikace jsou vyvíjeny jako nativní cloud a kompatibilní s cloudovými službami.

Cloud Computing nám pomáhá vyvíjet vysoce dostupné, škálovatelné a efektivní architektury, díky nimž je po cloudových službách stále větší poptávka. S tímto boomem cloud computingu přichází potřeba udržovat infrastrukturu jako kód. Ruční údržba cloudových zdrojů prostřednictvím konzole může být složitým úkolem, který může být velmi obtížné sledovat.

Infrastruktura jako kód, neboli IAC nebo IAAC, tento problém řeší. Pomocí IAC můžeme definovat naše zdroje jako kód a použít tento kód k poskytování cloudových služeb. Použití infrastruktury jako kódu umožňuje více vývojářům spolupracovat na infrastruktuře a sledovat změny provedené vývojáři.

Infrastruktura jako kód v AWS

AWS je největším a nejrozšířenějším poskytovatelem cloudu na světě. Má svůj vlastní nástroj IAC, AWS CloudFormation nebo AWS CDK, a také umožňuje nástrojům IAC třetích stran, jako je Terraform, poskytovat zdroje. Při výběru nástrojů IAC pro AWS je Terraform, nástroj třetí strany, pevnou konkurencí nástrojům AWS-Managed, AWS CloudFormation a AWS CDK.

S tolika možnostmi a funkcemi, které každý z těchto nástrojů poskytuje, může být výběr správného nástroje IAC náročný. V tomto článku budeme diskutovat o rozdílu mezi AWS CDK a Terraform. AWS CDK používá Cloudformation interně, takže pro hlubší pohled na Cloudformation a Terraform si přečtěte související článek Pochopení nástrojů IAC: CloudFormation vs. Terraform.

Terraform

Terraform je open-source infrastruktura jako nástroj kódu původně vyvinutý společností Hashicorp. Jedná se o vysoce přesný a vyspělý nástroj, který podporuje nejen AWS, ale i další poskytovatele cloudu. Terraform podporuje všechny služby AWS a vývojářská komunita se rychle chopí jakékoli nové funkce, kterou AWS přidává do svých služeb. Umožňuje nám psát kód v jazyce vyvinutém společností Hashicorp (HCL). HCL je jazyk podobný JSON pro definování prostředků infrastruktury.

AWS CDK

AWS CDK je obal kolem AWS CloudFormation. Abyste pochopili fungování AWS CDK, měli byste vědět něco o AWS CloudFormation. AWS CloudFormation je nástroj spravovaný AWS, který nám umožňuje definovat infrastrukturu AWS ve formátu YML nebo JSON. I když je čtení JSON a YML snadné, nejedná se o skutečné programovací jazyky. Neexistuje žádná nativní podpora pro smyčky a funkce, což ztěžuje údržbu velkých infrastruktur. Zde přichází na řadu AWS CDK.

AWS CDK je obal kolem AWS CloudFromation, který vám umožňuje používat známé programovací jazyky jako – JAVA nebo Python k poskytování vaší infrastruktury. To usnadňuje psaní a údržbu kódu.

Terraform vs. AWS CDK: Rozdíly

#1. Jazyk a snadnost použití

Jazyk a snadnost použití jsou zásadní pro pochopení rozdílu mezi AWS CDK a Terraform.

Nejprve si promluvme o Terraformu. Terraform používá k definování zdrojů a dalších dat jazyk podobný JSON, HCL nebo konfigurační jazyk HashiCorp. Je to docela přímočaré a dokumentace je snadno pochopitelná a sledovatelná, a to i pro začátečníky.

Podívejme se na kód pro vytvoření kbelíku S3.

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

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

Kód je poměrně snadno čitelný a další parametry, které tento zdroj podporuje, můžete vidět v Dokumentace Terraform.

Jak již bylo zmíněno, AWS CDK je obal CloudFormation, který nám umožňuje definovat naše zdroje v programovacích jazycích. Podívejme se na kód AWS CDK pro vytvoření kbelíku 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',
    });
 }
}

Kód Terraform může vypadat o něco úhledněji než CDK, ale kódy Terraform i CDK jsou docela jednoduché. Pokud plánujete použití IAC pro malý projekt, Terraform i CDK jsou skvělé možnosti, pokud jde o jazyk a snadnost použití.

Při výběru správného nástroje IAC pro velký projekt s mnoha vývojáři má však Terraform nevýhodu. Jak je Terraform jednoduchý, je to nový jazyk a budete muset své vývojáře vyškolit ve zcela novém jazyce, který není podobný ostatním používaným programovacím jazykům. Ještě důležitější je, že manipulace s daty v Terraformu není tak jednoduchá jako v jiných programovacích jazycích. Například iterace seznamů a objektů a transformace hodnot není tak jednoduchá, zejména pro začátečníky.

Osobně bych preferoval AWS CDK před Terraformem, pokud vezmeme v úvahu snadné použití. Při používání Terraformu byly chvíle, kdy jsem musel používat náhradní řešení nebo složité skripty, abych získal požadované výsledky. Kontrola, kterou máme nad daty a možnost snadno manipulovat s daty v jazycích AWS CDK, je pro AWS CDK velkou výhrou.

#2. Rozsah

Terraform je multicloudový IAC nástroj, což znamená, že Terraform můžete používat nejen s AWS, ale také s dalšími cloudovými poskytovateli, jako je Azure nebo GCP. Terraform je skvělý nástroj pro vytváření multi-cloudových nasazení a pro vaši aplikaci má libovolný počet poskytovatelů cloudu.

Byly doby, kdy široce používané globální platformy upadly kvůli problému se službami poskytovatele cloudu. V dnešní době je chytré rozhodnutí mít pro své aplikace více než jednoho poskytovatele cloudu.

AWS CDK je nabídka AWS pro IAC. Jakkoli může být CDK výkonné a vyspělé, je omezeno pouze na AWS Cloud.

Když vezmeme v úvahu rozsah nástrojů IAC, Terraform je jasným vítězem těchto dvou. Je velmi rozumné, aby vaši vývojáři používali jediný nástroj pro všechny cloudové platformy.

#3. Výkon

Výkon obvykle není nejdůležitějším kritériem při výběru správného nástroje IAC, ale u velkých projektů to může být důležité. Terraform nasazuje prostředky pomocí sady AWS SDK, zatímco kód CDK je nejprve převeden na šablony CloudFormation a poté aplikován.

Terraform by fungoval o něco rychleji než AWS CDK, zejména kvůli času, který CDK zabere převod kódu na šablonu CloudFormation.

#4. Modularita

K vytvoření modulů lze použít Terraform i AWS CDK. Terraform má nativní podporu pro moduly. Můžete si vytvořit své vlastní moduly a hostit je v soukromém registru modulů pro použití ve vaší organizaci. Terraform má také veřejný registr modulů pro hostování a používání veřejných modulů.

V AWS CDK můžete vytvářet opakovaně použitelné funkce, třídy a sdílet tento kód v rámci vaší organizace, abyste dosáhli stejného výsledku. To je velké plus v AWS CDK jako v dalším nástroji AWS IAC – CloudFormation vám neumožňuje vytvářet a znovu používat kód jako moduly. K dosažení tohoto požadavku můžete použít vnořené zásobníky v CloudFormation, ale použití AWS CDK je mnohem vhodnější alternativou.

Celkově jsou oba nástroje v tomto ohledu podobné.

#5. Kontrola a správa

Veškerý přístup k AWS Console je řízen IAM, službou Identity Management Service od AWS. Zásady IAM můžete použít s AWS CDK i Terraformem k povolení a odmítnutí určitých akcí. IAM vám umožňuje mít podrobnou kontrolu nad tím, jaké akce lze na vašem účtu provádět.

Kromě použití IAM k řízení přístupu ke zdrojům účtu nabízí Terraform politiku jako rámec kódu, Sentinel. Sentinel vám umožňuje psát jemnozrnné politiky pro správné ovládání akcí uživatele prostřednictvím Terraformu.

Závěr

Protože AWS CDK interně používá CloudFormation, doporučuji vám projít si článek CloudFormation vs. Terraform, abyste lépe porozuměli rozdílům mezi AWS CDK a Terraform.

Celkově jsou AWS CDK i Terraform vyspělé a výkonné nástroje. Terraform má mírnou nevýhodu, pokud jde o manipulaci s daty. Nicméně podle mých zkušeností, jakmile se lépe seznámíte s psaním Terraformu, bude používání náhradních řešení a provádění transformací dat jednodušší. Pro multi-cloudové operace je Terraform jasnou volbou; pokud však chcete používat AWS jako svého poskytovatele cloudu, AWS CDK je vynikající alternativou.