Choisir entre les fournisseurs AzureRM et AzAPI Terraform

Azure a deux fournisseurs Terraform officiels : AzureRM et AzAPI. Les deux fournisseurs gèrent Azure ressources via Terraform, mais ils utilisent différentes approches. La compréhension de ces différences vous permet de choisir le fournisseur approprié ou la combinaison de fournisseurs pour votre projet.

Vue d’ensemble de chaque fournisseur

AzureRM est le fournisseur standard de gestion des ressources Azure avec Terraform. Il fournit des blocs de ressources organisés et typés avec une validation intégrée, un comportement cohérent et une documentation globale de la communauté. Toutefois, AzureRM ne prend en charge qu’un sous-ensemble de types de ressources et de versions d’API Azure, et les nouvelles fonctionnalités sont souvent en retard par rapport aux versions de Azure.

AzAPI est une couche mince sur les API REST Azure Resource Manager (ARM). Il prend en charge n’importe quel type de ressource Azure à n’importe quelle version de l’API, y compris les fonctionnalités et services en préversion non encore pris en charge dans AzureRM. AzAPI vous donne un accès direct à l’API ARM sans attendre les mises à jour du fournisseur.

Quand utiliser AzureRM

Utilisez AzureRM comme fournisseur principal quand :

  • Les ressources que vous gérez sont entièrement prises en charge dans AzureRM avec des versions d’API stables.
  • Vous souhaitez organiser des schémas de ressources avec une validation intégrée et une bonne prise en charge de l’IDE.
  • Votre équipe accorde de l'importance aux larges ressources communautaires, aux exemples et à la disponibilité des modules.
  • Vous gérez des services Azure bien établis qui n'ont pas besoin d'accéder aux fonctionnalités en préversion.

AzureRM est la bonne valeur par défaut pour la plupart des équipes qui s’appuient sur Azure. Commencez par AzureRM et ajoutez-le à AzAPI uniquement si nécessaire.

Quand utiliser AzAPI

Utilisez AzAPI comme fournisseur principal, ou pour compléter AzureRM, quand :

  • Vous devez gérer les ressources Azure qui ne sont pas encore supportées dans AzureRM.
  • Vous devez utiliser une version d’API spécifique, y compris les versions préliminaires, qu’AzureRM n’expose pas.
  • Vous avez besoin d’accéder aux propriétés de ressources qu’AzureRM ne surface pas.
  • Vous souhaitez contrôler entièrement la version de l’API pour des raisons de conformité ou de reproductibilité.
  • Vous gérez les ressources immédiatement après la publication d'Azure, avant qu'AzureRM n'ajoute la prise en charge.

Quand utiliser les deux fournisseurs ensemble

AzureRM et AzAPI sont conçus pour fonctionner côte à côte. Un modèle courant consiste à utiliser AzureRM pour la plupart de votre infrastructure lors de l’utilisation d’AzAPI pour l’accès direct à l’API ARM si nécessaire :

  • Permet azapi_update_resource de définir des propriétés sur des ressources gérées par AzureRM qu’AzureRM n’expose pas.
  • Utilisez azapi_resource pour gérer un nouveau service ou une fonctionnalité de prévisualisation pendant que le reste de votre pile utilise AzureRM.
  • Permet azapi_resource_action d’effectuer des opérations sur des ressources gérées par AzureRM qui ne correspondent pas à un cycle de vie de création/lecture/mise à jour/suppression standard.
# 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"
      }
    }
  }
}

Choix d’une stratégie à long terme

AzureRM-primary : gérez toutes les ressources dans AzureRM et utilisez AzAPI uniquement comme pont temporaire pour les fonctionnalités non encore prises en charge. Migrez les ressources AzAPI vers AzureRM au fur et à mesure que la prise en charge devient disponible à l’aide de l’outilaztfmigrate.

AzAPI-primary : gérez toutes les ressources via AzAPI pour un contrôle de version d’API cohérent et un accès anticipé aux nouvelles fonctionnalités. Cette approche nécessite davantage de configuration, mais vous offre un contrôle total sur la version de l’API de chaque ressource.

La plupart des équipes doivent commencer par une stratégie AzureRM-primary et adopter AzAPI si nécessaire.

Comparaison des fonctionnalités

Caractéristique AzureRM AzAPI
Prend en charge tous les types de ressources Azure Non : sous-ensemble organisé Oui
Prend en charge les versions d’API en préversion Non Oui
Schémas de ressources organisés Oui Non
Validation de propriété intégrée Oui Partiel (via validation préliminaire)
Complétion automatique de l’IDE pour les propriétés Oui Oui (avec l’extension VS Code)
Exportation de réponse / filtrage JMESPath Non Oui
Gestion des ressources du plan de données Oui Oui (types de ressources sélectionnés)
Fonctions de fournisseurs pour la création d’ID Non Oui (v2.0 et versions ultérieures)
Validation préliminaire lors de la planification Oui (types de ressources sélectionnés) Oui : activer la validation préliminaire

Étapes suivantes