Bicep och Infrastructure as Code
Problemet med click-ops
Du konfigurerar VNet, NSG, storage account och App Service i Azure-portalen. Det tar timmar. Nästa vecka ska du sätta upp samma sak i en annan region — och du har bara skärmbilder att gå på.
Det är click-ops. Det skalar inte, det går inte att automatisera och det är omöjligt att verifiera.
Infrastructure as Code (IaC) löser det: du beskriver infrastrukturen i en textfil, versionshanterar den i git och reproducerar exakt samma miljö varje gång.
ARM vs Bicep
Azure använder ARM-templates (Azure Resource Manager JSON) under huven. De fungerar men är ordrika och svårlästa — en enkel App Service kan bli hundratals rader JSON.
Bicep är ett kortare, läsbart språk som kompileras till ARM. Du skriver Bicep, Azure kör ARM.
main.bicep → az deployment group create → ARM → Resurser i AzureVälj Bicep för all ny infrastruktur. Du stöter på ARM-templates i äldre projekt och dokumentation — bra att känna igen, men skriv inte nya.
Installera Bicep
Bicep CLI är ett tillägg till Azure CLI — ingen separat installation behövs.
az bicep installUppdatera vid behov:
az bicep upgradeaz bicep versionVS Code: installera tillägget Bicep (Microsoft) från Extensions-fliken för syntax-highlighting, autocomplete och inline-validering av resurstyper och API-versioner.
Grundstruktur
// Parametrar — input med valfria defaultvärdenparam location string = 'northeurope'param appName string
// Variabel — beräknat värdevar planName = '${appName}-plan'
// Resurs — en Azure-resursresource plan 'Microsoft.Web/serverfarms@2022-03-01' = { name: planName location: location sku: { name: 'B1' }}
// Output — returneras efter deployoutput url string = 'https://${app.properties.defaultHostName}'| Byggsten | Syfte |
|---|---|
param | Input utifrån — appnamn, region, miljö |
var | Beräknade värden inom filen |
resource | En Azure-resurs med typ och API-version |
output | Värden som returneras när deployn är klar |
Komplett exempel — App Service
param location string = 'northeurope'param appName string = 'app-iths-demo'
var planName = '${appName}-plan'
resource plan 'Microsoft.Web/serverfarms@2022-03-01' = { name: planName location: location kind: 'linux' sku: { name: 'B1' } properties: { reserved: true }}
resource app 'Microsoft.Web/sites@2022-03-01' = { name: appName location: location properties: { serverFarmId: plan.id siteConfig: { linuxFxVersion: 'DOTNETCORE|8.0' } }}
output url string = 'https://${app.properties.defaultHostName}'plan.id är en referens — Bicep löser beroendet och skapar App Service Plan före App Service automatiskt.
What-if
Förhandsgranska vad som händer utan att deploya:
az deployment group what-if \ --resource-group rg-iths \ --template-file main.bicep \ --parameters appName=min-appOutputen visar vad som skapas, ändras eller tas bort. Kör alltid what-if i produktion innan create.
Deploy
az deployment group create \ --resource-group rg-iths \ --template-file main.bicep \ --parameters appName=min-appIdempotens: kör samma kommando tio gånger — resultatet är identiskt. Resurser som redan är korrekt konfigurerade rörs inte. Det gör Bicep-deployer trygga att köra om.
Exportera befintlig infrastruktur
Du behöver inte börja från noll. Exportera resurser du redan har i portalen:
Portalen: Resurs (eller resource group) → Export template → ladda ner JSON.
# Konvertera ARM-JSON till Bicepaz bicep decompile --file main.json
# Eller exportera hela resource group direktaz group export --name rg-iths > main.jsonaz bicep decompile --file main.jsonFilen som genereras är en startpunkt — inte en färdig template. Hårdkodade värden och ingen struktur. Flytta unika värden till param, bygg ihop namn med var, ta bort det du inte behöver.
Exportera när du vill se hur en resurstyp ser ut i Bicep, eller när du behöver en startpunkt för något du aldrig skrivit förut.
Terraform — samma idé, alla moln
Terraform (från HashiCorp) är IaC som fungerar på alla moln: Azure, AWS, Google Cloud. Du skriver .tf-filer istället för .bicep.
| Bicep | Terraform | |
|---|---|---|
| Tillverkare | Microsoft | HashiCorp |
| Moln | Bara Azure | Alla moln |
| Filer | .bicep | .tf (HCL) |
Bicep är förstahandsvalet för Azure. Terraform används i team som hanterar infrastruktur på flera moln parallellt.