Terraform vs. CloudFormation: welke cloud softwaretool kies je best?
Wat is Terraform?
Terraform is een open source tool ontwikkeld door HashiCorp. Het stelt je in staat om je cloudinfrastructuur te definiëren als code, met behulp van een declaratieve taal genaamd HCL (HashiCorp Configuration Language). Met Terraform kun je je infrastructuur beschrijven in een configuratiebestand, dat vervolgens wordt toegepast op je cloudprovider naar keuze.
Terraform ondersteunt meer dan 200 providers, waaronder AWS, Azure, Google Cloud, DigitalOcean, VMware en meer. Het kan ook worden gebruikt om andere soorten resources te beheren, zoals DNS-records, databases, Kubernetes-clusters en meer.
Wat is CloudFormation?
CloudFormation is een service aangeboden door AWS. Met Cloudformation kan je specifiek je AWS-infrastructuur definiëren als code, aan de hand van YAML of JSON. Met CloudFormation kun je je infrastructuur beschrijven in een sjabloonbestand, dat vervolgens wordt toegepast op je AWS-account. CloudFormation ondersteunt alle AWS-services en -resources, en kan ook worden gebruikt om resources van derden te beheren via de AWS CloudFormation Registry.
Een vergelijking van de twee
Hoewel ze alle twee onder de noemer Infrastructure as code vallen, zijn er heel wat verschillen tussen de twee. De belangrijkste sommen we hier op.
1. Provider-afhankelijk vs. provider-onafhankelijk
Terraform is provider-onafhankelijk, ook wel cloud-agnostic genoemd, wat betekent dat je het kunt gebruiken om infrastructuur te deployen en te beheren op verschillende cloudplatforms. CloudFormation daarentegen is provider-afhankelijk, wat betekent dat je het alleen kunt gebruiken om infrastructuur te beheren en te deployen op AWS.
2. HCL vs. YAML en JSON
Hashicorp Configuration Language (HCL), een eigen taal die speciaal ontworpen is voor het beschrijven van infrastructuur, ligt aan de basis van Terraform. Het is expressief, leesbaar en ondersteunt variabelen, functies, modules en meer. CloudFormation gebruikt YAML of JSON, standaard gegevensformaten die ook gebruikt kunnen worden voor andere doeleinden. YAML en JSON zijn minder expressief, minder leesbaar en ondersteunen geen variabelen, functies of modules.
3. Locatie van de status
De status van je infrastructuur wordt in Terraform bijgehouden in een bestand genaamd terraform.tfstate. Dit bestand bevat informatie over de huidige toestand van de resources en de gewenste toestand die gedefinieerd is in het configuratiebestand. Daarmee kan Terraform wijzigingen aanbrengen aan je infrastructuur op een idempotente manier, wat betekent dat het alleen de resources aanmaakt, wijzigt of verwijdert die nodig zijn om de gewenste toestand te bereiken. CloudFormation houdt de status van je infrastructuur dan weer bij in een stack, een verzameling resources gedefinieerd in een sjabloonbestand. CloudFormation maakt ook gebruik van idempotentie om wijzigingen aan te brengen aan je infrastructuur.
4. Change simulations
Terraform biedt de mogelijkheid om change simulations uit te voeren voordat je ze daadwerkelijk toepast op je infrastructuur. Dit doe je met behulp van het terraform plan commando, dat laat zien welke resources zullen worden aangemaakt, gewijzigd of verwijderd worden als je je configuratiebestand toepast. Dit stelt je in staat om eventuele fouten of ongewenste effecten te detecteren en te corrigeren voordat je je infrastructuur wijzigt met terraform apply.
CloudFormation biedt ook de mogelijkheid om veranderingssimulaties uit te voeren, maar alleen voor bestaande stacks. Dit doe je met behulp van het AWS CloudFormation Change Sets feature, dat laat zien welke resources zullen aangemaakt, gewijzigd of verwijderd worden als je het sjabloonbestand bijwerkt. Dit stelt je ook in staat om eventuele fouten of ongewenste effecten te detecteren en te corrigeren voordat je de infrastructuur wijzigt.
Maak de keuze op basis van je voorkeur, project en cloudstrategie
Terraform en CloudFormation zijn beide krachtige tools voor het beheren van cloudinfrastructuur, maar ze hebben elk hun voor- en nadelen. De keuze tussen deze twee tools hangt af van je persoonlijke voorkeur, je projectvereisten en je cloudstrategie. Als je op zoek bent naar een tool die provider-onafhankelijk, expressief en herbruikbaar is, dan is Terraform wellicht de beste keuze. Ben je op zoek naar een tool specifiek voor AWS als provider, die ook nog eens consistent en geïntegreerd is, dan is CloudFormation mogelijk een betere optie.
Hosted Power: cloud-agnostic Managed Cloud Hosting Specialist
Omdat we bij Hosted Power cloud-agnostisch zijn, verkiezen we meestal Terraform. Het stelt ons in staat om op een geautomatiseerde manier infrastructuur te deployen naar eender welk cloudplatform, wat een enorme win is op vlak van flexibiliteit. Zelf proeven van die flexibiliteit? Geef ons een seintje en laat weten hoe we je kunnen helpen.