Terraform e AzureRM 5.0

Il rilascio di AzureRM 5.0 rappresenta una major release fondamentale per il provider Terraform. L’obiettivo principale di questa versione è migliorare il controllo sui permessi di Azure, velocizzare i tempi di pianificazione/inizializzazione, introdurre validazioni preventive e rimuovere tutto il debito tecnico (risorse e parametri deprecati nelle versioni 4.x).

Ecco un riassunto dei cambiamenti e dei miglioramenti principali:

1. Cambio nel comportamento dei Resource Provider

Nelle versioni precedenti (3.x e 4.x), all’avvio il provider AzureRM tentava automaticamente di verificare e registrare una lista legacy di circa 60 Resource Provider Azure nella sottoscrizione. Questo causava spesso rallentamenti e generava errori di permessi per gli utenti con ruoli RBAC restrittivi.

  • Cosa cambia in v5.0: Il parametro resource_provider_registrations ora è impostato di default su none (anziché legacy), ed è stato rimosso skip_provider_registration.

  • Vantaggio: Il provider non richiede più permessi elevati a livello di sottoscrizione solo per inizializzarsi. È possibile registrare esclusivamente i servizi necessari direttamente nel blocco provider o gestirli esternamente tramite la pipeline.

2. Validazione preventiva con Azure Preflight Validation (Opt-in)

La versione 5.0 integra il supporto facoltativo per la Azure Preflight Validation API.

  • Come funziona: Se abilitata, durante l’esecuzione di terraform plan, il provider effettua una chiamata live alle API di Azure per verificare se la configurazione pianificata rispetta le Azure Policy, le quote di sottoscrizione e le regole di convalida lato Azure.

  • Vantaggio: Gli errori di quota, i blocchi dovuti a policy o i valori di proprietà non validi vengono intercettati in anticipo nel plan, senza dover attendere il fallimento durante il terraform apply.

Esempio Terraform

provider "azurerm" {
  features {
    enhanced_validation {
      preflight_enabled = true
    }
  }
}

3. Standardizzazione della nomenclatura (Breaking Changes)

Per rendere le configurazioni più omogenee e allineate alle linee guida di HashiCorp, molte proprietà sono state rinominate e i vecchi formati sono stati completamente rimossi:

  • Proprietà booleane: Sostituite le vecchie proprietà enable_* con il suffisso *_enabled.

    • Esempio: enable_rbac_authorization è stato sostituito da rbac_authorization_enabled (es. in azurerm_key_vault).

    • Esempio: enable_http2 è diventato http2_enabled (es. in azurerm_application_gateway).

  • Uso uniforme degli ID di risorsa: Molti campi che prima richiedevano separatamente il nome della risorsa e il nome del Resource Group ora richiedono direttamente l’ID completo.

    • Esempio: In azurerm_eventhub, la combinazione namespace_name e resource_group_name è stata sostituita da namespace_id.