Welke tool kies ik voor mijn Infrastructuur als code
Infrastructuur neerzetten en beheren is de laatste jaren drastisch veranderd. Er hoeft nu geen server meer gekocht, gemonteerd, in het rack geplaatst en bekabeld te worden. Nee, we kunnen nu gewoon een server bij elkaar klikken en dan wordt deze opgezet met het besturingssysteem naar keuze. Maar hoe zorg je voor een consistente opzet van je infrastructuur en dat niet elk onderdeel op een eigen wijze is aangemaakt. Hier komt Infrastructuur als code om de hoek kijken.
Wat is infrastructuur als code?
Infrastructuur als code (IaC) is het proces van het beheren en leveren van infrastructuur en de configuratie ervan met behulp van code. In plaats van fysieke hardware configuratie of interactieve configuratietools. De code wordt opgeslagen in bijvoorbeeld Azure DevOps, waar versiebeheer plaats vindt en deployments gestuurd kunnen worden.
De voordelen van infrastructuur als code
IaC biedt verschillende voordelen, waaronder:
Consistentie: IaC zorgt ervoor dat je infrastructuur consistent is in alle omgevingen, van ontwikkeling tot productie.
Herbruikbaarheid: IaC stelt je in staat om code en configuraties te hergebruiken over meerdere projecten.
Schaalbaarheid: IaC maakt het gemakkelijk om je infrastructuur op of terug te schalen indien nodig.
Efficiëntie: IaC automatiseert het proces van het leveren en beheren van infrastructuur, wat tijd bespaart en fouten vermindert.
Beschikbaarheid: IaC kan ervoor zorgen dat indien de infrastructuur weg is door een probleem, deze snel en eenvoudig weer opnieuw opgezet kan worden.
Wat zijn de verschillende tools voor IaC op Azure?
Er zijn binnen Azure diverse tools beschikbaar voor IaC, namelijk ARM templates, Bicep en Terraform. Hieronder bespreken we deze drie tools en benoemen de belangrijkste voor- en nadelen per tool.
ARM templates
Azure Resource Manager (ARM) is de implementatie- en beheerservice voor Azure. ARM biedt een manier om resources in Azure te implementeren en te beheren met behulp van JSON-templates, zogenoemde ARM templates. Deze templates definiëren de infrastructuur en configuratie van je Azure-resources.
Bicep templates
Bicep is een domein specifieke taal (DSL) voor het implementeren van Azure-resources. Het is een declaratieve taal die de code voor ARM-templates vereenvoudigt. De taal is ontworpen om gemakkelijker te lezen en te schrijven dan JSON-templates.
Terraform
Terraform is een open-source infrastructuur als code-tool, waarmee je infrastructuur kunt definiëren en deployen over meerdere Cloud providers. Terraform gebruikt een declaratieve taal genaamd HashiCorp Configuration Language (HCL) om infrastructuur te definiëren.
Wat zijn de voor en nadelen van ARM, Bicep en Terraform?
Voordelen van ARM templates:
- ARM is de native tool van Azure voor het definiëren en leveren van infrastructuur.
- ARM is goed geïntegreerd met andere Azure-services.
- ARM bestaat sinds 2014 en er is veel informatie over te vinden.
- De Azure Portal kan templates genereren op basis van geconfigureerde resources.
Nadelen van ARM templates:
- ARM gebruikt JSON-templates, die complex kunnen zijn om te lezen en te schrijven.
- ARM is specifiek voor Azure en kan niet worden gebruikt om infrastructuur te definiëren en te leveren over meerdere Cloud providers.
Voordelen van Bicep templates:
- Bicep is een vereenvoudigde DSL die is ontworpen om gemakkelijker te lezen en te schrijven dan JSON-templates.
- Bicep integreert goed met Azure CLI.
Nadelen van Bicep templates:
- Bicep is momenteel alleen beschikbaar voor Azure en kan niet worden gebruikt om infrastructuur te definiëren en te leveren over meerdere Cloud providers.
- Bicep is nog relatief nieuw en heeft mogelijk niet dezelfde mate van documentatie en ondersteuning als ARM-templates en Terraform.
Voordelen van Terraform:
- Terraform is een open-source tool die kan worden gebruikt om infrastructuur te definiëren en te leveren over meerdere Cloud providers.
- Terraform heeft een grote gemeenschap en een uitgebreide set documentatie en voorbeelden.
- Terraform houdt de gewenste staat apart bij in een state file. Bij het uitrollen wordt deze vergeleken met de huidige staat in Azure. Indien er verschillen zijn, brengt Terraform alleen de benodigde verschillen aan. Verschil met ARM/Bicep templates is dat er dus niet volledige deployments uitgevoerd worden, waarbij de resource manager zelf uitzoekt wat gewijzigd dient te worden. Terraform voert dus ook geen ARM deployments uit, maar roept de benodigde API's aan om de wijzigingen door te voeren. Dit kan betekenen dat er resources eerst verwijderd en dan weer aangemaakt worden.
- Terraform biedt een breed scala aan providers en modules die kunnen worden gebruikt om infrastructuur te definiëren en te leveren. Tevens zijn er modules om beheer te doen op bijvoorbeeld Kubernetes, Fortigate firewalls, (Azure) Active Directory)
Nadelen van Terraform:
- Terraform kan complex zijn om te leren en te gebruiken, vooral voor beginners.
- De ontwikkeling van nieuwe resources/features van Azure loopt bij Terraform altijd wat achter op de ontwikkelingen bij Microsoft voor Azure.
- Terraform heeft een opslaglocatie nodig waar de huidige staat van resources kan worden opgeslagen. De zogenoemde state file.
Wat moet ik nu kiezen?
Dit hangt natuurlijk helemaal af van de omgeving die je opgezet wilt hebben. Wij kunnen je zowel bij het maken van de juiste keuze als de daadwerkelijke implementatie helpen. We hebben met alledrie de tools bij meerdere klanten ingezet om hun IaC uit te rollen.
Kun je ondersteuning gebruiken bij het opzetten van Infrastructure as Code of heb je advies nodig voor de keuze van de juiste tool? Neem dan contact met ons op.