Welke programmeertaal kies je voor Infrastructure-as-Code?

Blog

Laten we beginnen met een korte uitleg van het concept Infrastructure-as-Code (IaC). Zoals de naam al doet vermoeden, is IaC een proces van het beheren van infrastructuur door het in de code te beschrijven. Dit betekent dat je bijvoorbeeld in plaats van de Azure website te gebruiken en op knoppen te klikken om een virtuele machine uit te rollen, de eigenschappen van de virtuele machine in code beschrijft en deze uitvoert met een IaC-tool. Klinkt als meer werk dan het gebruik van een simpele knop? Nou ja, in eerste instantie wel. Het levert in het begin wat meer werk op, maar de voordelen op de lange termijn zijn zeker zichtbaar met meerdere omgevingen.

De voordelen van Infrastructure-as-Code

Stel je voor dat je meerdere virtuele machines, drie opslagaccounts en een virtueel netwerk moet implementeren. Vervolgens moet je de netwerkkoppelingen op dat netwerk configureren en schijven formatteren. "Slechts één klik" in de gebruikersinterface wordt urenlang klikken en het invullen van alle formulieren en eigenschappen.

Stel je nu voor dat er tegen het einde iets mis is gegaan en dat je helemaal opnieuw moet beginnen. Met het IaC-model kun je code schrijven om alle infrastructuurcomponenten te beschrijven en vervolgens de implementatie overlaten aan Terraform, Bicep of ARM. Mocht er in dit geval aan het einde iets misgaan, kun je een paar regels code wijzigen om het probleem op te lossen en de code opnieuw uit te voeren.

Een ander voordeel is de mogelijkheid om een broncodeversiesysteem zoals Azure DevOps of Github te gebruiken om je code op te slaan. Hierdoor heb je gelijk versiebeheer en dat maakt het mogelijk om eenvoudig alle wijzigingen in de infrastructuur te zien en beschikbaar te maken voor alle teamleden.

Welke taal gebruik je?

Wanneer je gebruik gaat maken van IaC, moet je nog een aantal keuzes maken. Hierbij is de belangrijkste keuze: welke taal ga je gebruiken? In principe heb je hierbij keuze uit drie talen.

  • ARM template (Json)
  • Bicep
  • Terraform

De drie talen maken allemaal gebruik van de Azure Resource Manager. Deze zorgt ervoor dat de code omgezet wordt naar resource die moet worden aangemaakt. Voor elke taal heb ik een voorbeeld gemaakt voor het aanmaken van een resource group binnen Azure, zodat er een goed verschil is te zien tussen de verschillende talen.

ARM Template

ARM templates was de enige manier om op basis van IaC resources in Azure aan te maken. Dit is ook de standaard ‘taal’ die de Azure Resource Manager gebruikt.

Voor het aanmaken van een resource group is de volgende code nodig:

{
 "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
 "contentVersion": "1.0.0.0",
 "parameters": {
   "rgName": {
     "type": "string"
   },
   "rgLocation": {
     "type": "string"
   }
 },
 "variables": {},
 "resources": [
   {
     "type": "Microsoft.Resources/resourceGroups",
     "apiVersion": "2021-04-01",
     "name": "[parameters('rgName')]",
     "location": "[parameters('rgLocation')]",
     "properties": {}
   }
 ],
 "outputs": {}
}

Bicep

Bicep is een taal die door Microsoft is ontwikkeld als vervanger van de ARM templates. Het voordeel van deze taal is dat het beter leesbaar is en dat je minder regels nodig hebt om hetzelfde te bereiken. Het nadeel van Bicep is, net zoals ARM templates, dat het alleen te gebruiken is op het Azure platform.
Zoals aangegeven heb je voor dezelfde handeling, het aanmaken van een resource group, minder code nodig.

targetScope = 'subscription'
resource rg 'Microsoft.Resources/resourceGroups@2021-01-01' = {
 name: 'rg-contoso'
 location: 'westeurope'
}

Terraform

Terraform is een taal die is ontwikkeld door het bedrijf Terracorp. Deze taal is te gebruiken voor alle cloud platforms, Google, AWS en Azure. Hierdoor is het een taal die veel gebruikt wordt door ontwikkelaars in de open-source community en bedrijven met een multi cloud omgeving.
Net zoals Bicep maakt Terraform gebruik van de Azure Resource Manager voor het aan maken van de resources. Doordat Terraform voor meerdere cloud omgevingen gebruikt kan worden, moet je hierbij aangeven dat je de Azure Resource Manager wil gebruiken. Voor het aanmaken van een resource group kan je de volgende code gebruiken:

resource "azurerm_resource_group" "example" {
 name     = "rg-contoso"
 location = "West Europe"
}

Door de opkomst van Bicep en Terraform wordt het eenvoudiger om resources op een eenduidige manier aan te maken. Doordat beide talen goed leesbaar zijn, heb je ook documentatie van de omgeving en in combinatie met Azure DevOps of Github een stukje geschiedenis voor wat betreft de wijzigingen.

Welke taal kan je het beste gebruiken?

Hier is niet echt een eenduidig antwoord op te geven en heeft heel erg te maken met welke cloud provider je gebruikt en de samenstelling van een team.

Wanneer je alleen gebruik maakt van Microsoft Azure, kan je het beste werken met Bicep omdat deze taal ontwikkeld is voor Microsoft Azure.

Mocht je in de omgeving gebruik maken van verschillende Cloud-omgevingen, bijvoorbeeld AWS en Azure, dan is het advies om juist Terraform te gebruiken omdat je dan met dezelfde taal beide omgevingen kan beheren.

Op dit moment maak ik het liefst gebruik van Terraform, omdat je hiermee de verschillende cloud-omgevingen kunt beheren met één taal. Daarbij is het sinds een paar maanden zo dat alle nieuwe resources ook met Terraform gelijk zijn aan te maken of te configureren.

In mijn volgende blog ga ik verder in op het gebruik van Terraform.

Meer weten?

Mocht je meer willen weten over Infrastructure as Code of hulp kunnen gebruiken bij het inrichten ervan, neem dan contact met ons op. We helpen graag!

Deel deze pagina:
Barry
Auteur
Barry
Consultant & Architect

Heb je vragen over dit onderwerp of zou je Barry willen inhuren voor een vergelijkbare opdracht?

Neem contact met ons op

Heb je een Azure expert nodig?

Neem contact met ons op

Lees de blogs die onze experts geschreven hebben

Lees ze hier
Cookies beheren