Introductie
Binnen de Azure omgeving is er veel mogelijk zoals bijvoorbeeld het runnen van pipelines en het creëren van infrastructuur. Maar om van deze mogelijkheden gebruik te kunnen maken zijn er uiteraard resources nodig. Deze resources zijn manueel via de portal aan te maken, maar ook door gebruik te maken van ARM (Azure Resource Manager) templates. Sinds kort is er nu ook een nieuwere manier om resources aan te maken: Bicep. Dit alles om infrastructure as code te implementeren. Naast dat Bicep voor een betere ontwerpervaring zorgt, biedt het ook extra scripting mogelijkheden.
Binnen PerformanceArchitecten hebben we eens per maand een kennissessie waar we onder andere nieuwe technieken en tools onder de loep nemen. Deze bijeenkomsten noemen we kennismiddagen. Tijdens de afgelopen Kennismiddag zijn wij gaan kijken naar de mogelijkheden van Bicep en hoe we dit kunnen toepassen. In deze blog zullen we onze bevindingen delen.
In de voorbereiding hebben wij een aantal bronnen gevonden die ons goed op weg konden helpen bij het gebruik van Bicep.
Introductie Bicep
Bicep is een domeinspecifieke taal (DSL) die gemaakt is om Azure-resources te implementeren. Deze DSL wordt gebruikt om de implementatie sneller, eenvoudiger en kwalitatief beter te doen door middel van het gebruik van een beknopte syntax. Het blijkt dat je zelfs met een beknopte syntax uiteindelijk een uitgebreid, en dus complex, document kunt krijgen. Dit document blijft echter nog wel redelijk leesbaar.
Bicep is in principe een tussentaal: in plaats van de complexe JSON kan er gebruik gemaakt worden van een meer volledige taal. Omdat het een tussentaal is wordt altijd naar de ARM JSON gecompileerd die dan in Azure kan worden gebruikt. Gelukkig zorgt de toolset van Bicep er voor de conversie onder water gebeurt, niet meer zichtbaar is en je er geen omkijken meer naar hebt.
Introductie Video
Bron: Understanding and Using Project BICEP – The NEW Azure Deployment Technology
John Savill’s Technical Training (https://youtu.be/_yvb6NVx61Y)
Dit is een prettige video waarin veel details worden gedeeld. Door de manier van presenteren (via een soort white board) wordt het goed duidelijk gemaakt. Er wordt een goede context gegeven, van installatie tot veel praktische voorbeelden in bijvoorbeeld Visual Studio Code.
In de video wordt stapsgewijs verteld hoe je een Bicep file kunt opmaken en hoe je deze vervolgens kan gebruiken. Ook de terminologie wordt goed uitgelegd met daarin de gebruikte Azure componenten. Al met al een goed verhaal waar we veel aan gehad hebben.
Tutorial
Bron: Getting started with Azure Bicep door Tobias Zimmergren (https://zimmergren.net/getting-started-azure-Bicep/)
Van deze pagina hadden we een volledige tutorial verwacht, maar het was meer een write-up van mogelijkheden. Dit was voor ons minder geschikt om te gebruiken.
Oefenen met een aantal voorbeelden
Op basis van de voorbeelden in de video en de voorbeelden die uit de officiële Microsoft GitHub kwamen (https://github.com/Azure/Bicep/tree/main/docs/examples) zijn we zelf gaan oefenen. Met behulp van deze voorbeelden hebben we praktisch gezien hoe Bicep op een simpele manier gebruikt kan worden om, via Infrastructure as code, resources in Azure aan te maken.
Zoals in de introductie is aangehaald, heeft Bicep de mogelijkheid tot “programmeren”. Dit is iets wat niet met de ARM template kan. Bicep heeft veel extra scripting mogelijkheden zoals loops, if’s, string manipulatie etc. Hiervan hebben we kort een aantal bekeken. Hier is nog zoveel in te ontdekken dat we besloten hebben om dit later zeker verder uit te zoeken.
Wel hebben we gemerkt dat het echt noodzakelijk is om kennis te hebben van de resources die je aanmaakt. Bijvoorbeeld het aanmaken van een virtuele machine heeft vele parameters nodig. Zonder kennis van de parameters van resources, wordt het lastig om met Bicep te werken. Het einddoel is om deze resources op een goede manier aan te maken, dus zijn de vele parameters wel nodig. Hierdoor kan het Bicep script er snel complex uit zien.
Vergeleken met ARM templates biedt Bicep een duidelijk betere en leesbare structuur. Vanuit een decompile actie kan je prima een Bicep aanmaken. Nadeel is dat alle parameters, ook default en genereerde parameters ook weer in de Bicep file gegenereerd worden. Hierdoor ontstaat een bestand dat, net als de ARM template, minder leesbaar is.
Advies is dus om na een decompile actie goed te kijken welke parameters echt noodzakelijk zijn en de rest weg te gooien. Hierdoor behoud je een leesbare Bicep file.
Pipelines
Bron: ‘Bicep in de pipeline’ door (Alex) Oleksandr Chzhen
Nadat we gezien hebben hoe we een Bicep file kunnen opmaken en builden om een ARM template te compileren, gaan we nu naar de toepassing hiervan.
De blog ‘Bicep in de pipeline’ (zie bron) geeft informatie hoe deze infrastructure-as-code gebruikt kan worden in een Azure DevOps pipeline. Naast een kleine introductie geeft de pagina ‘Bicep in de pipeline’ goede voorbeelden van een basis Bicep file en hoe deze in een pipeline ingebouwd kan worden.
Aan de hand van de voorbeelden hebben wij in onze eigen Azure DevOps omgeving een repository aangemaakt. Deze hebben we vervolgens met onze voorbeeld bestanden gevuld. Vervolgens hebben wij de pipeline opgezet en geprobeerd deze aan de praat te krijgen. Na wat issues (zoals het vullen van eigen variabelen) is dit ons gelukt en zijn de resources in Azure aangemaakt.
Conclusie
Bicep is een krachtig hulpmiddels voor het opzetten van resources in een Azure omgeving. Het is een taal die in goed leesbaar is. Echter, met Bicep kan het snel complex worden maar dat is vooral door de vele parameters en mogelijkheden van de resources. Als gebruiker moet je wel op de hoogte zijn van de parameters die bij elke resource in Azure nodig zijn.
De programeermogelijkheden van Bicep lijken potentie te hebben. We hebben hier nog weinig praktijkervaring mee opgedaan en is nog iets wat we verder kunnen uitzoeken.
We weten dat Bicep nog in een beginstadium zit (huidige versie 0.4.x), maar het gebruik voelt toch redelijk volledig aan. Qua documentatie kan het nog beter, dit is nog schaars. Maar we voor deze introductie wel voldoen bronnen gevonden om een start te maken.
Al met al hebben we een leuke en interessante kennismiddag gehad, waarin we veel kennis van Bicep en het alloceren van resources hebben opgedaan.
Voorbeeldcommando’s
bicep build “main.bicep”
bicep decompile “./virtualmachine.json”
New-AzResourceGroupDeployment -TemplateFile "storage.bicep" -ResourceGroupName RG-Bicep-KM
New-AzResourceGroupDeployment -TemplateFile "storage.bicep" -ResourceGroupName RG_Bicep_KM -Type 'Standard_LRS' -WhatIf
az deployment group what-if -f "storage.bicep" -g RG_Bicep_KM --parameters type=Standard_GRS
ความคิดเห็น