/
/
Een kennismaking met Bicep

Een kennismaking met Bicep

In deze blog ga ik uitleggen wat Bicep is, welke voordelen Bicep geeft en waarom je het moet gebruiken om je infrastructuur in Azure mee uit te rollen.

Achtergrond van Bicep

Wanneer we infrastructuur uitrollen in Azure, kan dat via de Azure Portal worden gedaan. De Azure Portal is een mooie manier om nieuwe dingen in Azure te ontdekken en op een interactieve manier infrastructuur in Azure aan te maken. Of het nu een virtuele machine is, een webapplicatie, of een complete VDI-omgeving, via de Portal krijg je precies te zien welke configuratie mogelijkheden en keuzes er zijn en vaak met toelichtingen en verwijzingen naar de juiste documentatie.

Maar, handmatig via de portal al je infrastructuur aanmaken en beheren heeft een aantal nadelen. Een virtuele machine bestaat uit een aantal componenten en keuzes zoals naam, locatie, image, type (grootte), disk(en), netwerkadapter en IP-configuratie.
Als je drie virtuele machines wilt aanmaken, zul je al deze keuzes drie keer moeten doorlopen en invullen. Dit geeft kans op inconsistenties en fouten. Misschien is er wel een naamgevingsconventie afgesproken, maar via de portal word je daar standaard niet aan gehouden.

Ook heeft deze manier van uitrollen nadelen in een team. Wellicht bij jij degene die normaal gesproken de virtuele machines voor de ontwikkelafdeling aanmaakt. Wat gebeurt er als jij op vakantie bent en een collega dit moet doen? Hoe weet jouw collega welke stappen jij altijd doorloopt om virtuele machines aan te maken? Heb je dit proces gedocumenteerd?
De kans is aanwezig dat jouw collega een andere naamgeving gebruikt of een afwijkende configuratie als er handmatig via de Azure Portal wordt uitgerold. Gelukkig zijn dit zaken waar wat aan gedaan kan worden met behulp van Infrastructuur als Code, beter bekend als Infrastructure as Code.

Wat is Infrastructure as Code (IaC)

Infrastructure as Code (IaC) is een belangrijke DevOps methode waarbij infrastructuur, zoals netwerken, apps, containers, databases, opslag en netwerktopologie, in een beschrijvend model worden beheerd. Met IaC kunnen teams wijzigingen sneller en met meer vertrouwen ontwikkelen en vrijgeven. In code definieer je de infrastructuur die moet worden geïmplementeerd. De code maakt deel uit van je project. Net als bij sourcecode sla je de infrastructuur code op in een opslag met versiebeheer. Iedereen in het team kan de code uitvoeren en vergelijkbare omgevingen uitrollen.

Voordelen van IaC zijn onder andere:

  • Meer vertrouwen in implementaties
  • Consistent en geautomatiseerd uitrollen van infrastructuur
  • Mogelijkheid om de naamgevingsconventie van resources vast te leggen in de code
  • Mogelijkheid om meerdere omgevingen te beheren met dezelfde code en omgeving specifieke parameters. (bijvoorbeeld een ontwikkel-, test en productieomgeving)
  • Beter inzicht in de status van de infrastructuur
  • Integratie met versiebeheer systeem en tooling

In Azure bestond de mogelijkheid om infrastructuur als code uit te rollen al heel lang door middel van zogenaamde ARM-templates die door de Azure Resource Manager geïnterpreteerd worden. Deze werken op basis van code in JSON-formaat.

Wat is Bicep?

Begin 2021 is Bicep officieel geïntroduceerd door Microsoft. Bicep geeft dezelfde mogelijkheden als ARM-templates, maar met een syntaxis die gemakkelijker te gebruiken is. Elk Bicep-bestand wordt tijdens de implementatie automatisch geconverteerd naar een ARM-template. Je kunt dit Bicep bestand tijdens de levenscyclus van je omgeving uitbreiden en aanpassen. Deze wijzigingen en toevoegingen worden dan incrementeel doorgevoerd: de componenten die niet gewijzigd zijn worden niet opnieuw uitgerold. Het geldt alleen voor de aanpassingen en toevoegingen.

Voordelen van Bicep t.o.v. ARM-templates

Bicep biedt de volgende voordelen ten opzichte van de ARM-templates:

  • Eenvoudige syntaxis: In vergelijking met andere IaC-talen is Bicep eenvoudig te lezen en te schrijven. Misschien heb je ooit wel eens met ARM-templates gewerkt in JSON-format om in Azure infrastructuur uit te rollen. Bicep is een stuk eenvoudiger; de hoeveelheid regels code is dan ook aanzienlijk korter in Bicep formaat dan in JSON-formaat.
  • Uitstekende ondersteuning in VSCode: Met de VSCode-extensie voor Bicep krijg je een geweldige ontwerpervaring in deze editor. Intelligence zorgt voor een auto complete, je kunt de syntax valideren, en zelfs een visualisatie laten zien van wat het Bicep bestand voor resources gaat aanmaken.
  • Schaalbaar: Bicep kan er voor zorgen dat je met één druk op de knop op grote schaal infrastructuur kunt uitrollen met relatief weinig regels code, doordat je in Bicep kunt werken met zogenaamde loops en variabelen. Bij ARM-templates kon dit niet en moest je hetzelfde codeblok steeds opnieuw kopiëren en voorzien van de unieke waarden.
  • Indeling: Je hoeft je geen zorgen te maken in welke volgorde de resources in je Bicep bestand worden uitgerold. Azure Resource Manager organiseert het aanmaken van de resources op basis van afhankelijkheid. Daarnaast kunnen onafhankelijke resources in je Bicep bestand parallel uitgerold worden, wat enorm kan schelen in de doorlooptijd.
  • Modulariteit: Je kunt in Bicep modules schrijven voor soortgelijke resources en deze module vervolgens aanspreken vanuit je hoofd Bicep bestand. Op die manier kun je code hergebruiken en hoef je zo min mogelijk nieuwe code te schrijven voor een nieuwe uitrol.
  • Open Source: Bicep is open source en iedereen kan de broncode bekijken op GitHub en hieraan bijdragen.

Bicep code – Voorbeeld

Hieronder is een voorbeeld van een stukje Bicep code voor het uitrollen van een Azure SQL server en meerdere databases die via een loop worden uitgerold om de code zo compact mogelijk te houden:

@description('The region where to deploy the resources, default uses the region of the resource group referenced during deployment')
param location string = resourceGroup().location

@description('The user name of the SQL server administrator')
param sqlServerAdminUserName string = 'sqlAdmin'

@description('The password of the SQL administrator account. This should always be a secure parameter and never be a fixed value in your bicep file')
@secure()
param sqlServerAdminPassword string

@description('List of database names to deploy')
param sqlDatabases array = [
  'db1'
  'db2'
  'db3'
  'db4'
  'db5'
]

resource sqlServer 'Microsoft.Sql/servers@2021-11-01' = {
  name: 'sql-3fifty'
  location: location
  properties: {
    administratorLogin: sqlServerAdminUserName
    administratorLoginPassword: sqlServerAdminPassword
  }
}

resource sqlDatabase 'Microsoft.Sql/servers/databases@2021-11-01' = [for sqlDatabase in sqlDatabases: {
  location: location
  name: sqlDatabase
  sku: {
    name: 'Standard'
  }
  properties: {
    collation: 'SQL_Latin1_General_CP1_CI_AS'
  }
  parent: sqlServer
}]

Dit stukje code bestaat uit 39 regels en rolt een Azure SQL server uit met 5 databases in een bestaande resource group. Om hetzelfde uit te rollen met een ARM-template is de code 76 regels lang en is de Bicep code duidelijk leesbaarder.
Je kunt zo’n Bicep bestand uitvoeren met behulp van de Azure CLI of PowerShell, afhankelijk van je eigen voorkeur. Als je voor PowerShell kiest, moet je wel zelf de Bicep client nog installeren.

3fifty en Bicep

Bij 3fifty zijn wij groot fan van Bicep en Infrastructure As Code. Wij adviseren en helpen klanten dan ook regelmatig – en met veel plezier – om hun manier van uitrollen te automatiseren en te standaardiseren met behulp van Bicep.
Mochten je hierover in gesprek met ons willen gaan of vragen hebben, neem dan vrijblijvend contact met ons op door te mailen naar marco@3fifty.eu.

Bicep leren

Meer leren over Bicep? Zie onderstaande links:

Of lees meer over Bicep Documentatie op Microsoft Learn als een goed startpunt voor alle Bicep gerelateerde zaken.


Auteur

Marco

9 maart 2023

Bekijk ook