Begrip van IaC-tools: CloudFormation vs. Terraform

AWS CloudFormation en Terraform — niet zeker welke te kiezen? Dit artikel helpt je om een intelligente beslissing te nemen.

Cloud computing heeft de wereld van DevOps revolutionair veranderd. Het is niet langer alleen een modewoord; het is hier om de manier waarop we onze applicaties ontwikkelen en onderhouden te veranderen. Hoewel er talloze redenen zijn waarom je cloud computing zou moeten gebruiken voor bedrijven van elke omvang, is er een kleine beperking: je moet je infrastructuur handmatig inrichten.

Je moet naar de consoles van je cloudproviders gaan en ze precies vertellen wat je wilt. Dit werkt goed voor kleine gebruikssituaties, maar wat als verschillende mensen configuratiewijzigingen in de console aanbrengen? Je zou uiteindelijk kunnen eindigen met een super ingewikkelde infrastructuur die steeds moeilijker te onderhouden wordt. Er is geen efficiënte manier om samen te werken of wijzigingen in de cloudinfrastructuur bij te houden. Nou, er is Infrastructure as a Code.

Infrastructure as a Code (IaC) is een trendy term in cloud computing. Het is het proces van het beheren van je IT IaC. Ja, dat klopt. In plaats van naar de console te gaan en alles handmatig te doen, stelt IaC je in staat om configuratiebestanden te schrijven om je cloudinfrastructuur in te richten. IaC biedt ons voordelen zoals consistentie, gemakkelijke en snelle onderhoud, en geen ruimte voor menselijke fouten.

IaC gebruiken met Amazon Web Services

AWS is de toonaangevende cloud computing service ter wereld, met twee keer het marktaandeel van de volgende cloudaanbieder. Het biedt meer dan 200 services die kunnen voldoen aan honderden en duizenden use cases.

Als je begint met het gebruik van IaC met AWS, zul je vaak je keuzes beperken tot AWS CloudFormation en de open-source tool Terraform. Als je moet kiezen tussen de twee, kan het overweldigend zijn om de veelheid aan functies die beide tools bieden te begrijpen. In dit artikel zullen we de verschillen tussen AWS CloudFormation en Terraform onderzoeken om je te helpen beslissen welke tool beter geschikt is voor jouw behoeften.

Terraform vs. AWS CloudFormation: Verschillen

Modulariteit

Bij het gebruik van IaC in grote organisaties kan modulariteit een belangrijke factor zijn bij het kiezen van de juiste tool.

CloudFormation

CloudFormation heeft geen native ondersteuning voor modules. In plaats daarvan kun je iets gebruiken dat nested stacks heet als modules.

Bijvoorbeeld kunt u een standaard CloudFormation-sjabloon maken voor het voorzien van een S3-bucket in uw organisatie. Wanneer eindgebruikers een S3-bucket willen maken, kunnen ze deze CloudFormation-sjabloon gebruiken als een geneste stack om de standaard S3-bucket te voorzien.

Er is ook een AWS-service, de AWS Service Catalog, die kan helpen bij modulariteit voor CloudFormation. De AWS Service Catalog is ontworpen voor organisaties die de reikwijdte van AWS-services moeten beperken om te voldoen aan nalevings-, beveiligings-, kost- of prestatievereisten. Het maakt gebruik van CloudFormation-sjablonen aan de backend.

Laten we dit snel begrijpen aan de hand van een voorbeeld. Als het niet goed wordt gebruikt, kunnen S3-buckets al snel catastrofaal zijn voor uw vertrouwelijke gegevens. Laten we hetzelfde voorbeeld nemen. U wilt een standaard manier hebben om S3 te gebruiken in uw organisatie. De eerste optie is om de geneste stack-sjabloon te maken, die kan worden gebruikt binnen andere CloudFormation-stacks en even goed is.

Als alternatief kunt u de AWS Service Catalog gebruiken, waarmee gebruikers deze standaardsjabloon vanuit de console-UI kunnen gebruiken en enkele parameters kunnen specificeren voor lichte aanpassingen. Dit stelt u in staat om te bepalen hoe infrastructuur wordt voorzien in uw AWS-accounts en ongewenste scenario’s te voorkomen.

Het gebruik van geneste stacks en AWS Service Catalog van CloudFormation kan ook standaardconfiguraties ondersteunen in grote organisaties, hoewel het mogelijk meer handmatige configuratie vereist.

Terraform

Terraform heeft native ondersteuning voor modules. Het stelt u in staat om standaardconfiguraties te maken die vergelijkbaar zijn met AWS CloudFormation en deze te gebruiken in andere Terraform-configuraties.

Aangezien Terraform een open-source tool is, kunt u ook enkele vooraf gemaakte open-source modules vinden en gebruiken in de Terraform Registry. U kunt ook uw eigen modules maken met uw eigen configuraties en deze hosten op een privé-module-register.

De native ondersteuning van Terraform voor modules biedt een eenvoudige benadering van modulariteit. Het beheren van modules over een groot team kan echter extra governance vereisen om correct gebruik te garanderen.

Het gebruik van een geneste stack in CloudFormation is niet zo eenvoudig als het gebruik van modules in Terraform. Het belangrijkste punt is dat het doorgeven van gegevens van een CFN-sjabloon naar de geneste stack ingewikkeld kan zijn.

CloudFormation heeft geen gecentraliseerd repository voor het delen van sjablonen. De AWS Service Catalog stelt u in staat dit proces te beheren, maar past voornamelijk regels toe via de console. Hoewel CloudFormation-sjablonen complexe taken kunnen bevatten, zouden gebruikers nog steeds parameters moeten specificeren bij het maken van resources.

Aan de andere kant heeft Terraform een vaststaande methode voor het maken, onderhouden en delen van modules. U kunt de exacte vereisten van de modules zien in de Terraform Module Registry en deze eenvoudig gebruiken in uw Terraform-bestanden.

Controle en governance over infrastructuur

Als u wilt beperken welke resources uw mensen kunnen maken in uw AWS-accounts, bieden AWS CloudFormation en Terraform u de middelen om dit te doen.

CloudFormation

CloudFormation biedt controle via IAM-beleid, waardoor u de toegang van gebruikers tot resources kunt beheren. Deze controle is echter specifiek voor AWS, wat ideaal kan zijn als uw infrastructuur volledig op AWS is gericht.

In ons S3-bucketvoorbeeld wilt u mogelijk alle “S3 Create”-machtigingen voor gebruikers beperken en hen alleen toestaan S3-buckets te maken vanuit AWS Service Catalog of Nested Stacks.

Terraform

Terraform stelt u in staat te bepalen welke resources uw gebruikers kunnen maken met behulp van een beleid als code-tool, Sentinel. Sentinel stelt u in staat om fijnmazige, op logica gebaseerde beleidsregels af te dwingen om gebruikersacties via Terraform toe te staan of te weigeren. Zo kunt u bijvoorbeeld alle resources die S3-buckets maken weigeren en gebruikers alleen toestaan S3-buckets te maken vanuit een standaardmodule.

State Management

AWS CloudFormation en Terraform moeten bijhouden welke resources ze onderhouden.

Terraform

Terraform slaat de status van uw infrastructuur op in een statusbestand. Dit bestand wordt standaard lokaal opgeslagen; u kunt het echter op externe back-ends zoals S3 opslaan en meerdere gebruikers wijzigingen laten aanbrengen in dezelfde set infrastructuur.

CloudFormation

CloudFormation doet intern het onderhoud van de status in de achtergrond, zodat gebruikers zich geen zorgen hoeven te maken over het handmatig beheren van een statusbestand. Dit is handig voor degenen die een volledig beheerde service willen.

Zowel AWS CloudFormation als Terraform stellen u in staat om te controleren welke wijzigingen zullen worden aangebracht in uw infrastructuur. In Terraform kunt u het commando “terraform plan” uitvoeren om te zien hoe Terraform van plan is uw configuratiewijzigingen toe te passen. In CloudFormation kunnen gebruikers deze informatie zien via Change Sets.

Taal

Terraform

Terraform maakt gebruik van de HashiCorp Configuration Language, HCL, een taal gemaakt door HashiCorp. Het lijkt erg op JSON, met extra ingebouwde functies en mogelijkheden.

CloudFormation

CloudFormation-templates zijn geschreven in YAML- of JSON-indeling.

Logging en Terugdraaien

Zowel AWS CloudFormation als Terraform hebben goede loggingmogelijkheden. In mijn ervaring waren de fouten en problemen duidelijk (voor het grootste deel).

CloudFormation

Standaard draait CloudFormation alle wijzigingen terug in geval van een mislukte stapelwijziging. Dit is een goede functie, maar kan worden uitgeschakeld voor debugdoeleinden.

Terraform

Terraform zal uw wijzigingen niet automatisch terugdraaien als het mislukt. Dit is geen probleem, want u kunt altijd het Terraform destroy-commando uitvoeren om de half-geprovisioneerde configuratie te verwijderen en opnieuw een Terraform-run te starten.

Bereik

Terraform

De multi-cloudondersteuning van Terraform stelt u in staat om infrastructuur in te zetten op AWS, Azure, Google Cloud en andere platforms en biedt flexibiliteit als u werkt in een multi-cloudomgeving.

CloudFormation

CloudFormation is nauw geïntegreerd met AWS, waardoor het een goede optie is voor alleen AWS-infrastructuur, maar beperkt voor multi-cloud opstellingen.

Functionaliteitsondersteuning

CloudFormation

AWS CloudFormation ontvangt doorgaans als eerste updates voor nieuwe services en functies, gezien de nauwe integratie met AWS.

Terraform

In gevallen waarin Terraform bepaalde AWS-functies mist, kun je CloudFormation-stacks direct integreren in je Terraform-code als tijdelijke oplossing.

Technische ondersteuning

CloudFormation

Het betaalde AWS-technische ondersteuningsplan omvat ook CloudFormation-ondersteuning.

Terraform

HashiCorp heeft ook betaalde ondersteuningsplannen voor technische ondersteuning op Terraform.

Conclusie

Zowel AWS CloudFormation als Terraform zijn robuuste en volledig ontwikkelde tools, elk met zijn eigen voordelen. De bovenstaande verschillen kunnen je helpen bepalen welke tool het beste aansluit bij jouw behoeften. Als je van plan bent om meerdere cloudplatforms te gebruiken, biedt Terraform ondersteuning voor multi-cloud, terwijl AWS CloudFormation een uitstekende keuze is voor AWS-specifieke omgevingen. Uiteindelijk zijn beide tools geschikt en kunnen ze effectief IaC beheren. De juiste keuze hangt af van je eisen, of je nu alleen op AWS focust of met meerdere cloudproviders werkt.

Source:
https://dzone.com/articles/understanding-iac-tools-cloudformation-vs-terraform