Stojíte před rozhodnutím, zda zvolit AWS CloudFormation nebo Terraform? Tento článek vám usnadní výběr toho pravého řešení.
Cloud computing radikálně proměnil svět DevOps. Už to není jen módní trend, ale realita, která mění způsob, jakým vyvíjíme a udržujeme aplikace. I když je cloud computing pro firmy všech velikostí výhodný, má jeden drobný háček: infrastrukturu musíte zřizovat manuálně.
Znamená to, že musíte v konzoli poskytovatele cloudu specifikovat, co přesně potřebujete. Pro menší projekty to funguje dobře, ale co když konfigurace mění více lidí? Snadno se dostanete do situace, kdy budete mít složitou infrastrukturu, kterou je těžké udržovat. Chybí efektivní způsob spolupráce a sledování změn v cloudové infrastruktuře. Existuje však řešení: infrastruktura jako kód.
Infrastruktura jako kód (IaC) je v cloud computingu velmi populární. Znamená to, že spravujete IT infrastrukturu pomocí kódu. Ano, čtete správně. Namísto manuální práce v konzoli vám IaC umožňuje vytvářet konfigurační soubory, které automaticky zřídí vaši cloudovou infrastrukturu. IaC nabízí výhody jako konzistence, snadná a rychlá údržba a eliminace lidských chyb.
Využití IaC s Amazon Web Services
AWS je přední světový poskytovatel cloudových služeb, který má dvakrát větší tržní podíl než druhý největší poskytovatel. AWS nabízí přes 200 služeb, které pokryjí stovky a tisíce různých případů použití.
Když začnete používat IaC s AWS, nejčastěji se rozhodujete mezi AWS CloudFormation a open-source nástrojem Terraform. Pochopit rozdíly mezi těmito dvěma nástroji a jejich funkcemi může být náročné. Proto se v tomto článku zaměříme na porovnání AWS CloudFormation a Terraformu, abychom vám pomohli vybrat ten správný nástroj pro vaše potřeby.
Terraform vs. AWS CloudFormation: Klíčové rozdíly
Modularita
V rozsáhlých organizacích může být modularita klíčovým faktorem při výběru správného IaC nástroje.
CloudFormation
CloudFormation nativně moduly nepodporuje. Místo toho využívá tzv. vnořené zásobníky jako formu modularity.
Například můžete mít standardní konfiguraci pro zřizování S3 bucketů ve vaší organizaci. Vytvoříte standardní šablonu CloudFormation, která vytvoří tyto buckety. Koncový uživatel pak může použít tuto šablonu jako vnořený zásobník a zřídit standardní S3 bucket.
K dispozici je také služba AWS Service Catalog, která vám může s modularitou v CloudFormation pomoci. Tato služba je navržena pro organizace, které chtějí omezit rozsah služeb AWS z důvodu shody s předpisy, bezpečnosti, nákladů nebo výkonu. A hádejte co? AWS Service Catalog využívá v backendu šablony CloudFormation.
Ukažme si to na příkladu. S3 buckety, pokud nejsou správně zabezpečeny, mohou představovat riziko pro vaše data. Řekněme, že chcete mít standardizovaný postup pro používání S3 v celé organizaci. První možnost je vytvořit šablonu vnořeného zásobníku, kterou lze používat v rámci jiných zásobníků CloudFormation. To je dobré řešení.
Pokud nechcete, aby uživatelé museli používat standardní šablonu jako vnořený zásobník, můžete využít AWS Service Catalog. Ten umožňuje uživatelům spouštět standardní šablonu z konzole a specifikovat parametry pro drobné úpravy. To vám dává kontrolu nad tím, jak je infrastruktura zřizována a chrání vás před nežádoucími scénáři.
Terraform
Terraform nativně podporuje moduly. To znamená, že můžete vytvářet standardní konfigurace a používat je v jiných konfiguracích Terraformu.
Protože je Terraform open-source nástroj, můžete v registru Terraform nalézt mnoho předpřipravených modulů. Můžete si také vytvářet vlastní moduly s vlastními konfiguracemi a hostovat je v privátním registru.
Osobně bych dal přednost Terraformu před CloudFormation, pokud je modularita klíčovým požadavkem.
Používání vnořených zásobníků v CloudFormation není tak intuitivní jako používání modulů v Terraformu. Předávání dat z šablony CFN do vnořeného zásobníku může být složité.
Neexistuje žádné standardní místo pro sdílení šablon CloudFormation. Existuje AWS Service Catalog, ale to je pouze nástroj, který vám umožňuje definovat pravidla pro zřizování infrastruktury z konzole. Všichni ale preferujeme práci s kódem. I když pomocí Service Catalogu můžete zabalit složité úlohy do CloudFormation, stále musíte jít do konzole a manuálně zadat parametry.
Terraform naopak nabízí strukturovaný způsob vytváření, správy a sdílení modulů. V registru modulů Terraform najdete přesné požadavky modulů a snadno je použijete ve svých Terraform souborech.
Kontrola a správa infrastruktury
Pokud chcete omezit, jaké zdroje mohou vaši lidé vytvářet ve vašich AWS účtech, jak AWS CloudFormation, tak Terraform vám nabízejí nástroje k tomu.
Nejprve si řekněme něco o CloudFormation. Samotný CloudFormation nenabízí kontrolu nad tím, jak se šablony používají, ale můžete používat zásady AWS IAM, abyste povolili uživatelům ve vašem účtu používat pouze standardní CloudFormation šablony pro zřizování zdrojů. Například v našem příkladu S3 bucketů můžete omezit oprávnění „Vytvořit S3“ pro uživatele a umožnit jim vytvářet S3 buckety pouze pomocí AWS Service Catalog nebo Nested Stacks.
Terraform vám umožňuje řídit, které zdroje mohou uživatelé vytvářet pomocí nástroje Sentinel. Sentinel vám umožní definovat jemná pravidla na základě logiky, která povolují nebo zakazují akce uživatelů pomocí Terraformu. Můžete například zakázat zřizování všech S3 bucketů a povolit uživatelům vytvářet S3 buckety pouze pomocí standardního modulu.
Správa stavu
Jak AWS CloudFormation, tak Terraform potřebují sledovat zdroje, které spravují.
Terraform ukládá stav vaší infrastruktury do stavového souboru. Ve výchozím nastavení je tento soubor uložen lokálně, ale můžete ho uložit na vzdáleném backendu, jako je S3, a umožnit více uživatelům provádět změny v rámci stejné infrastruktury.
CloudFormation neudržuje stavový soubor, alespoň ne takový, který bychom mohli vidět. CloudFormation je spravovaná služba, takže veškerou správu a kontrolu stavu provádí na pozadí.
Oba nástroje, AWS CloudFormation i Terraform, umí zobrazit, jaké změny budou provedeny ve vaší infrastruktuře. V Terraformu stačí spustit příkaz „terraform plan“ a Terraform zobrazí plánované změny. V CloudFormation mohou uživatelé vidět tyto informace pomocí Change Sets.
Jazyk
Terraform používá konfigurační jazyk HashiCorp, HCL. Je podobný JSONu, ale má navíc vestavěné funkce a možnosti.
Šablony CloudFormation se píší ve formátech YAML nebo JSON.
Protokolování a návrat zpět
Jak AWS CloudFormation, tak Terraform nabízejí dobré možnosti protokolování. Podle mých zkušeností jsou chyby a problémy dobře dohledatelné.
CloudFormation: Ve výchozím nastavení CloudFormation vrátí zpět všechny změny v případě neúspěšné změny zásobníku. To je velmi užitečná funkce, kterou je možné zakázat pro účely ladění.
Terraform: Terraform automaticky nevrátí zpět změny, pokud se mu něco nepodaří. To není problém, protože můžete spustit příkaz `terraform destroy` a odstranit napůl vytvořenou konfiguraci a spustit Terraform znovu.
Rozsah
Terraform se neomezuje pouze na AWS. Klíčovým faktorem při výběru mezi Terraformem a CloudFormation je, že Terraform podporuje i jiné cloudové poskytovatele a služby.
Pokud tedy plánujete používat IaC pro více cloudových platforem, Terraform je ideální volbou. CloudFormation, i když je to výkonný nástroj, je omezen pouze na AWS. S Terraformem můžete nastavit infrastrukturu a nasadit aplikaci na více cloudových platformách, a vaše aplikace se tak stane dostupnější a robustnější.
Podpora funkcí
Když AWS představuje nové služby a funkce, CloudFormation je obvykle aktualizován dříve než Terraform, protože se jedná o službu AWS. V současnosti oba nástroje pokrývají většinu služeb a jejich funkcí. Toto může být menší nevýhodou pro Terraform, ale existuje řešení.
Je možné vytvořit zásobník CloudFormation uvnitř kódu Terraformu. Takže pokud používáte Terraform a chybí vám nějaká funkce, můžete dočasně nastavit zásobník CloudFormation v rámci kódu Terraform.
Technická podpora
Placené plány technické podpory AWS zahrnují i podporu CloudFormation.
HashiCorp také nabízí placené plány technické podpory pro Terraform.
Závěr
Jak AWS CloudFormation, tak Terraform jsou výkonné a plně vyvinuté nástroje. Výše zmíněné rozdíly vám pomohou učinit informované rozhodnutí při výběru nástroje, který nejlépe odpovídá vašim požadavkům. Pokud plánujete v budoucnu používat více cloudových platforem, nebo již používáte více cloudů, je Terraform dobrou volbou. Pokud hledáte IaC nástroj pouze pro AWS, pak jsou AWS CloudFormation i Terraform rovnocenné možnosti.
Pokud se chcete naučit Terraform, podívejte se na dostupné online kurzy.