Infrastructure as Code: Bicep i Terraform (azurerm)

Klikanie w portalu nie skaluje się i nie jest audytowalne. Infrastructure as Code (IaC) opisuje infrastrukturę w plikach tekstowych w repozytorium — co daje wersjonowanie, code review i powtarzalność. W Azure rządzą dwa narzędzia: Bicep i Terraform.

Bicep — natywny język Azure

Bicep to deklaratywny DSL od Microsoftu, kompilowany do szablonów ARM. Zaletą jest natywne wsparcie nowych usług w dniu premiery i brak osobnego stanu (state) — źródłem prawdy jest sam Azure.

param location string = resourceGroup().location

resource storage 'Microsoft.Storage/storageAccounts@2023-01-01' = {
  name: 'stzeusiac01'
  location: location
  sku: { name: 'Standard_LRS' }
  kind: 'StorageV2'
  properties: {
    minimumTlsVersion: 'TLS1_2'
    allowBlobPublicAccess: false
  }
}

Wdrożenie:

az deployment group create \
  --resource-group rg-zeus-iac \
  --template-file main.bicep \
  --parameters location=westeurope

Terraform — wieloplatformowy standard

Terraform (HashiCorp) używa providera azurerm. Jest wyborem, gdy zarządzasz wieloma chmurami (Azure + AWS + GCP) jednym narzędziem i jednym językiem (HCL). Wymaga zarządzania plikiem stanu (state) — najlepiej zdalnie, np. w koncie storage.

terraform {
  required_providers {
    azurerm = { source = "hashicorp/azurerm", version = "~> 3.0" }
  }
}

provider "azurerm" {
  features {}
}

resource "azurerm_storage_account" "zeus" {
  name                            = "stzeusiac02"
  resource_group_name             = azurerm_resource_group.zeus.name
  location                        = "westeurope"
  account_tier                    = "Standard"
  account_replication_type        = "LRS"
  min_tls_version                 = "TLS1_2"
  allow_nested_items_to_be_public = false
}
terraform init
terraform plan -out tfplan
terraform apply tfplan

Które wybrać?

KryteriumBicepTerraform
Zasięgtylko Azuremulti-cloud
Zarządzanie stanembrak (ARM)wymagane (state)
Nowe usługi Azurenatychmiastz opóźnieniem
JęzykBicep DSLHCL
Ekosystem modułówrosnącybardzo duży

Wskazówka: w ProfessNet stosujemy zasadę "Bicep dla projektów czysto Azure, Terraform gdy w grze jest więcej niż jedna chmura". Niezależnie od wyboru — IaC zawsze przez pipeline z code review, nigdy apply z laptopa.

Jak to widzi ZEUS

ZEUS skanuje repozytoria IaC (Bicep, Terraform) jeszcze przed wdrożeniem — to shift-left. Wykrywa misconfigi w kodzie (np. allowBlobPublicAccess: true, otwarte NSG) zanim trafią do produkcji. Po wdrożeniu ZEUS porównuje stan rzeczywisty z deklarowanym w IaC i raportuje drift — rozjazd między kodem a tym, co faktycznie działa w chmurze.

W kolejnej lekcji: bezpieczeństwo i Microsoft Defender for Cloud.