Martin Rylko
  • Služby
  • Blog
  • O mně
  • Kontakt
  • Spolupráce
Martin Rylko

Senior Cloud Architect & DevOps Engineer. Specializace na Microsoft Azure, IaC, Cloud Security a AI.

Navigace

  • Služby
  • Blog
  • O mně
  • Kontakt

Spolupráce

Hledáte zkušeného architekta pro Váš Azure projekt? Ozvěte se.

rylko@cloudmasters.cz

© 2026 Martin Rylko. Všechna práva vyhrazena.

Buduji v cloudu. Nasazuji přes Azure Static Web Apps.

Domů/Blog/Terraform Azure: Best practices pro produkci
Všechny článkyRead in English

Terraform Azure: Best practices pro produkci

1. 6. 2025 2 min
#Terraform#Azure#IaC#DevOps

Po třech letech intenzivní práce s Terraformem v enterprise prostředích (od H&M Group po menší FinTech firmy) jsem si vytipoval pět klíčových pravidel, která oddělují amatérský IaC kód od produkčně-odolné infrastruktury.

1. Remote State s locking – žádné výjimky

Nikdy, opravdu nikdy, nepoužívejte lokální terraform.tfstate v týmu. Azure Storage Account s blob containerem a state locking je základ:

terraform {
  backend "azurerm" {
    resource_group_name  = "rg-terraform-state"
    storage_account_name = "stterraformstprod"
    container_name       = "tfstate"
    key                  = "landing-zone/prod.tfstate"
    use_oidc             = true
  }
}

Proč use_oidc = true? Protože Managed Identity + OIDC federace eliminuje nutnost ukládat service principal secrets do pipeline proměnných. Bezpečnější, jednodušší.

2. Modularizace od prvního dne

Největší chyba, kterou vidím u klientů: obří monolitický main.tf s 2000+ řádky. Řešení? Terraform moduly:

infrastructure/
├── modules/
│   ├── networking/          # VNet, NSG, Route Tables
│   │   ├── main.tf
│   │   ├── variables.tf
│   │   └── outputs.tf
│   ├── compute/             # VM, VMSS, AKS
│   ├── security/            # Key Vault, Defender
│   └── monitoring/          # Log Analytics, Alerts
├── environments/
│   ├── dev/
│   │   └── main.tf          # Volá moduly s dev parametry
│   ├── staging/
│   └── prod/
└── shared/
    └── backend.tf

Každý modul má jasnou odpovědnost. Změna v networking modulu neovlivní compute. Testujete izolovaně, nasazujete bezpečně.

3. Drift Detection v CI/CD pipeline

Infrastruktura se v čase mění – někdo klikne v portálu, někdo spustí skript. Drift je tichý zabiják IaC konzistence. Řešení:

# Azure DevOps pipeline - noční drift check
schedules:
  - cron: "0 3 * * *"
    displayName: "Noční drift detection"
 
steps:
  - task: TerraformCLI@2
    inputs:
      command: 'plan'
      workingDirectory: 'infrastructure/environments/prod'
      commandOptions: '-detailed-exitcode'
    continueOnError: true
 
  - script: |
      if [ $TERRAFORM_EXITCODE -eq 2 ]; then
        echo "##vso[task.logissue type=warning]DRIFT DETECTED!"
        # Pošli notifikaci do Teams/Slack
      fi
    displayName: 'Evaluate drift'

4. Pojmenování zdrojů pomocí naming convention modulu

Konzistentní pojmenování je SEO infrastruktury – bez něj se ztratíte:

module "naming" {
  source = "Azure/naming/azurerm"
  suffix = [var.environment, var.location_short]
}
 
resource "azurerm_resource_group" "main" {
  name     = module.naming.resource_group.name
  location = var.location
}
 
resource "azurerm_virtual_network" "hub" {
  name                = module.naming.virtual_network.name
  resource_group_name = azurerm_resource_group.main.name
  location            = azurerm_resource_group.main.location
  address_space       = ["10.0.0.0/16"]
}

5. Testy infrastruktury – Terratest nebo terraform validate

Ano, infrastrukturu je potřeba testovat. Minimálně:

  • terraform validate – syntaktická kontrola
  • terraform plan v PR pipeline – review změn před merge
  • tflint – statická analýza best practices
  • Terratest (Go) – integrační testy pro kritické moduly

Závěr

Terraform je mocný nástroj, ale bez disciplíny se z něj stane noční můra. Začněte s remote state a modularizací, přidejte drift detection a naming conventions. Vaše budoucí já vám poděkuje. Pokud používáte Bicep místo Terraformu, podívejte se na náš průvodce Bicep CI/CD pipeline.

Zajímá vás jak nastavit kompletní Terraform CI/CD pipeline v Azure DevOps? Připravuji na to detailní návod. Zjistěte více o našem Infrastructure as Code poradenství.

Tagy:#Terraform#Azure#IaC#DevOps
LinkedInX / Twitter

O autorovi

Martin Rylko

Martin Rylko

Senior Cloud Architect & DevOps Engineer

Více než 14 let v IT – od on-premises datacenter a Hyper-V clusteringu po cloudovou infrastrukturu v Microsoft Azure. Specializuji se na Landing Zones, IaC automatizaci, Kubernetes a bezpečnostní compliance.

Email LinkedInCelý profil

Nejcastejsi dotazy

Jak zabezpečit Terraform state soubory v Azure?▾
Ukládejte state v Azure Storage Account s blob versioning, RBAC na úrovni kontejneru (ne klíče storage accountu) a zamykacím mechanismem přes Azure Blob lease. Povolte soft delete s 30denní retencí. Storage account by měl být v dedikované management subskripci se síťovými pravidly omezujícími přístup pouze na IP rozsahy vašich CI/CD runnerů.
Kdy zvolit Terraform a kdy Bicep pro Azure infrastrukturu?▾
Terraform volte při správě multi-cloud zdrojů (Azure + AWS/GCP), když tým už má Terraform zkušenosti, nebo když potřebujete zralý ekosystém modulů z Terraform Registry. Bicep volte pro čistě Azure prostředí, kde chcete nulovou režii state managementu a nativní ARM integraci. V praxi mnoho enterprise firem používá obojí -- Bicep pro Landing Zone platformu a Terraform pro aplikační workloady.
Jak verzovat Terraform moduly v produkci?▾
Používejte sémantické verzování (semver) s Git tagy -- v1.0.0 pro stabilní release, v1.1.0 pro zpětně kompatibilní funkce, v2.0.0 pro breaking changes. V root konfiguracích připínejte verze modulů přesnými verzemi (version = "1.2.3") místo rozsahů. V produkčním kódu nikdy nepoužívejte neverzované reference modulů (source = "git::...").
Co je drift detection a jak ho implementovat?▾
Drift detection identifikuje rozdíly mezi Terraform state a skutečnou Azure infrastrukturou -- například když někdo ručně změnil pravidlo firewallu v portálu. Implementujte ho plánováním terraform plan ve vašem CI/CD pipeline (např. denní cron job) a alertingem na neprázdný plan výstup. Nástroje jako Spacelift a env0 mají vestavěné drift detection dashboardy.

Mohlo by vás zajímat

Terraform Azure moduly: Privátní registr a testování

Znovupoužitelné Terraform moduly pro Azure s publikací do privátního registru, automatizované testování Terratest a verzovaná spotřeba modulů v produkci.

Číst

Bicep CI/CD: GitHub Actions pipeline pro Azure

Produkční deployment pipeline pro Bicep v GitHub Actions. What-if náhledy, schvalování prostředí, OIDC autentizace a rollback strategie.

Číst

AKS Breaking Changes: Co se ruší v březnu 2026 a jak migrovat

Windows Server 2019, Azure Linux 2.0 a kubelet certificate rotation – tři AKS retirements s deadline v březnu 2026. Praktický migrační návod s CLI příkazy a Bicep šablonami.

Číst