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

Váháte mezi AWS CDK a Terraformem? Tento článek vám usnadní rozhodování a pomůže vám vybrat to pravé řešení.

Cloudové technologie zásadně změnily IT svět. Výrazný vliv měly na vývoj aplikací, jejich implementaci i údržbu. Moderní aplikace jsou navrhovány s ohledem na cloud a jeho služby.

Cloudové prostředí umožňuje vytvářet vysoce dostupné, škálovatelné a efektivní architektury, což vede k neustále rostoucí poptávce po cloudových službách. Spolu s rozvojem cloudu roste i potřeba správy infrastruktury prostřednictvím kódu. Ruční správa cloudových zdrojů v konzoli je náročná na sledování a může být obtížná.

Infrastruktura jako kód (IaC) tento problém řeší. Umožňuje definovat zdroje pomocí kódu a následně je využít k poskytování cloudových služeb. IaC usnadňuje spolupráci vývojářů na infrastruktuře a sledování změn.

Infrastruktura jako kód v AWS

AWS je největší a nejrozšířenější poskytovatel cloudu na světě. Nabízí svůj vlastní nástroj IaC, AWS CloudFormation nebo AWS CDK, ale umožňuje i využití nástrojů třetích stran, jako je Terraform. Při volbě nástroje IaC pro AWS je Terraform, jakožto externí řešení, silným konkurentem AWS nástrojů, jako jsou AWS CloudFormation a AWS CDK.

Výběr správného nástroje IaC může být složitý, vzhledem k množství možností a funkcí, které jednotlivé nástroje nabízejí. V tomto článku se zaměříme na rozdíly mezi AWS CDK a Terraformem. AWS CDK interně využívá CloudFormation, proto pro hlubší vhled do problematiky CloudFormation a Terraformu doporučujeme náš související článek „Porozumění nástrojům IaC: CloudFormation vs. Terraform.“

Terraform

Terraform je open-source nástroj pro infrastrukturu jako kód, jehož autorem je společnost Hashicorp. Je to vysoce sofistikovaný nástroj, který podporuje nejen AWS, ale i další poskytovatele cloudu. Terraform je kompatibilní se všemi službami AWS a vývojářská komunita rychle reaguje na jakékoli nové funkce, které AWS přidává. Pro definici infrastruktury se používá jazyk HCL, který vyvinula společnost Hashicorp. HCL je jazyk podobný JSON a slouží k definici zdrojů infrastruktury.

AWS CDK

AWS CDK je vrstva nad AWS CloudFormation. Pro pochopení fungování AWS CDK je nutné se seznámit s AWS CloudFormation. Jedná se o nástroj spravovaný AWS, který umožňuje definovat infrastrukturu AWS ve formátu YML nebo JSON. Ačkoliv je čtení JSON a YML jednoduché, nejedná se o plnohodnotné programovací jazyky a nenabízejí nativní podporu pro smyčky a funkce, což komplikuje údržbu rozsáhlých infrastruktur. Proto se nabízí AWS CDK.

AWS CDK je vrstva nad AWS CloudFromation, která umožňuje používat k definování infrastruktury běžné programovací jazyky jako JAVA nebo Python. 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 klíčové pro pochopení rozdílu mezi AWS CDK a Terraformem.

Začněme Terraformem. Terraform k definování zdrojů používá jazyk HCL (HashiCorp Configuration Language), což je jazyk podobný JSON. Je poměrně přímočarý a jeho dokumentace je srozumitelná i pro začátečníky.

Následuje příklad kódu pro vytvoření S3 bucketu:

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

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

Kód je snadno čitelný a další parametry, které tento zdroj podporuje, naleznete v dokumentaci Terraform.

Jak bylo zmíněno výše, AWS CDK je vrstva nad CloudFormation, která umožňuje definovat zdroje v programovacích jazycích. Následuje příklad kódu AWS CDK pro vytvoření S3 bucketu:

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 Terraformu může vypadat na první pohled úhledněji než kód CDK, nicméně oba kódy jsou poměrně jednoduché. Pro menší projekty, jsou oba nástroje vhodné z pohledu jazyka a snadnosti použití.

Při volbě nástroje pro rozsáhlý projekt s větším počtem vývojářů má však Terraform jednu nevýhodu. I přes jeho jednoduchost, jedná se o nový jazyk a je potřeba vývojáře s tímto novým jazykem seznámit, přičemž se nepodobá ostatním používaným programovacím jazykům. Práce s daty v Terraformu není tak jednoduchá, jako v jiných programovacích jazycích. Například iterace seznamů a objektů a transformace hodnot nejsou pro začátečníky jednoduché.

Osobně bych upřednostnil AWS CDK před Terraformem s ohledem na snadné použití. Při používání Terraformu jsem se setkal s případy, kdy bylo nutné používat složité skripty nebo náhradní řešení pro dosažení požadovaných výsledků. Kontrola nad daty a možnost s nimi manipulovat v programovacích jazycích AWS CDK, je velkou výhodou.

#2. Rozsah

Terraform je multi-cloudový nástroj IaC. To znamená, že jej můžete používat nejen s AWS, ale i s dalšími poskytovateli cloudu, jako je Azure nebo GCP. Terraform je skvělým nástrojem pro multi-cloudová nasazení a pro použití s různými poskytovateli cloudu.

V minulosti jsme byli svědky výpadků globálních platforem z důvodu problému u poskytovatele cloudu. Je proto rozumné mít pro své aplikace více než jednoho poskytovatele cloudu.

AWS CDK je nástroj IAC od AWS. I když je výkonný a vyspělý, je omezen pouze na AWS Cloud.

Z hlediska rozsahu je Terraform jasným vítězem. Pro vývojáře je výhodné používat jeden 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, nicméně u větších projektů může být důležitý. Terraform nasazuje zdroje pomocí AWS SDK, zatímco kód CDK je nejprve převeden do šablon CloudFormation a teprve potom aplikován.

Terraform je o něco rychlejší než AWS CDK, zejména z důvodu doby, kterou CDK zabere převedení kódu do šablony CloudFormation.

#4. Modularita

Pro vytvoření modulů lze využít Terraform i AWS CDK. Terraform má nativní podporu pro moduly. Můžete si vytvářet vlastní moduly a hostovat je v soukromém registru, pro použití v rámci organizace. Terraform má i veřejný registr modulů, kde naleznete moduly pro veřejné použití.

V AWS CDK můžete vytvářet opakovaně použitelné funkce a třídy a sdílet tento kód v rámci vaší organizace. Je to velké plus AWS CDK, jelikož předchozí nástroj AWS IAC CloudFormation, neumožňuje vytvářet a znovu používat kód jako moduly. K dosažení tohoto požadavku můžete v CloudFormation použít vnořené stacky, ale využití AWS CDK je 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 (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 detailní kontrolu nad tím, jaké akce lze na vašem účtu provádět.

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

Závěr

AWS CDK interně využívá CloudFormation, proto doporučujeme projít si článek CloudFormation vs. Terraform, abyste lépe porozuměli rozdílům mezi AWS CDK a Terraformem.

Celkově jsou AWS CDK i Terraform vyspělé a výkonné nástroje. Terraform má nevýhodu, pokud jde o manipulaci s daty, nicméně, po lepším seznámení s psaním v Terraformu, se náhradní řešení a transformace dat stanou jednodušší. Pro multi-cloudové operace je Terraform jasnou volbou. Pokud však preferujete AWS, pak je AWS CDK skvělou alternativou.