Scegliere tra i provider AzureRM e AzAPI Terraform

Azure dispone di due provider Terraform ufficiali: AzureRM e AzAPI. Entrambi i provider gestiscono Azure risorse tramite Terraform, ma usano approcci diversi. La comprensione di queste differenze consente di scegliere il provider corretto, o la combinazione di provider, per il progetto.

Panoramica di ogni provider

AzureRM è il provider standard per la gestione delle risorse Azure con Terraform. Fornisce blocchi di risorse curati e tipizzato con convalida integrata, comportamento coerente e ampia documentazione della community. AzureRM supporta, tuttavia, solo un sottoinsieme dei tipi di risorse di Azure e delle versioni delle API, e le nuove funzionalità sono spesso in ritardo rispetto alle nuove versioni di Azure.

AzAPI è un livello sottile sopra le API REST Azure Resource Manager (ARM). Supporta qualsiasi tipo di risorsa Azure in qualsiasi versione dell'API, incluse le funzionalità di anteprima e i servizi non ancora supportati in AzureRM. AzAPI consente di accedere direttamente all'API ARM senza attendere gli aggiornamenti del provider.

Quando usare AzureRM

Usare AzureRM come provider primario quando:

  • Le risorse gestite sono completamente supportate in AzureRM con versioni dell'API stabili.
  • Si vogliono gestire schemi di risorse curati con la convalida predefinita e un buon supporto per l'IDE.
  • Il tuo team apprezza le ampie risorse della comunità, gli esempi e la disponibilità dei moduli.
  • Si gestiscono servizi Azure ben consolidati che non richiedono l'accesso alle funzionalità di anteprima.

AzureRM è l'impostazione predefinita corretta per la maggior parte dei team che si basa su Azure. Iniziare con AzureRM e integrarlo con AzAPI solo quando necessario.

Quando usare AzAPI

Usare AzAPI come provider primario o integrare AzureRM quando:

  • È necessario gestire risorse Azure non ancora supportate in AzureRM.
  • È necessario usare una versione api specifica, incluse le versioni di anteprima, che AzureRM non espone.
  • È necessario accedere alle proprietà delle risorse non visualizzate da AzureRM.
  • Si vuole avere il controllo completo sulla versione dell'API per motivi di conformità o riproducibilità.
  • Gestisci le risorse immediatamente dopo che il rilascio di Azure, prima che AzureRM aggiunga il supporto.

Quando usare entrambi i provider insieme

AzureRM e AzAPI sono progettati per funzionare side-by-side. Un modello comune consiste nell'usare AzureRM per la maggior parte dell'infrastruttura durante l'uso di AzAPI per l'accesso diretto all'API ARM, se necessario:

  • Usare azapi_update_resource per impostare le proprietà nelle risorse gestite da AzureRM che AzureRM non espone.
  • Usare azapi_resource per gestire una nuova funzionalità di servizio o anteprima mentre il resto dello stack usa AzureRM.
  • Usare azapi_resource_action per eseguire operazioni sulle risorse gestite da AzureRM che non soddisfano un ciclo di vita standard di creazione/lettura/aggiornamento/eliminazione.
# Manage the primary resource with AzureRM
resource "azurerm_kubernetes_cluster" "example" {
  name                = "my-aks"
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
  dns_prefix          = "myaks"
  default_node_pool {
    name       = "default"
    node_count = 1
    vm_size    = "Standard_DS2_v2"
  }
  identity {
    type = "SystemAssigned"
  }
}

# Use AzAPI to set a property not exposed by AzureRM
resource "azapi_update_resource" "aks_preview_feature" {
  type        = "Microsoft.ContainerService/managedClusters@2024-02-01"
  resource_id = azurerm_kubernetes_cluster.example.id

  body = {
    properties = {
      networkProfile = {
        networkDataplane = "cilium"
      }
    }
  }
}

Scelta di una strategia a lungo termine

AzureRM-primary: gestire tutte le risorse in AzureRM e usare AzAPI solo come bridge temporaneo per le funzionalità non ancora supportate. Eseguire la migrazione delle risorse AzAPI ad AzureRM man mano che il supporto diventa disponibile usando il aztfmigrate strumento.

AzAPI-primary: gestire tutte le risorse tramite AzAPI per il controllo coerente della versione dell'API e l'accesso anticipato alle nuove funzionalità. Questo approccio richiede più configurazione, ma offre il controllo completo sulla versione dell'API di ogni risorsa.

La maggior parte dei team deve iniziare con una strategia primaria di AzureRM e adottare AzAPI in base alle esigenze.

Confronto delle funzionalità

Feature AzureRM AzAPI
Supporta tutti i tipi di risorse Azure No: subset curato Yes
Supporta le versioni dell'API di anteprima No Yes
Schemi di risorse curati Yes No
Convalida delle proprietà predefinite Yes Parziale (tramite preliminare)
Completamento automatico dell'IDE per le proprietà Yes Sì (con estensione VS Code)
Esportazione delle risposte/filtro JMESPath No Yes
Gestione delle risorse del piano dati No Sì (tipi di risorse selezionati)
Funzioni del provider per la costruzione di ID No Sì (v2.0 e versioni successive)
Convalida prevolo durante la pianificazione No Sì: abilitare la convalida preliminare

Passaggi successivi