Elección entre los proveedores de AzureRM y AzAPI Terraform

Azure tiene dos proveedores oficiales de Terraform: AzureRM y AzAPI. Ambos proveedores administran Azure recursos a través de Terraform, pero usan enfoques diferentes. Comprender estas diferencias le ayuda a elegir el proveedor adecuado (o combinación de proveedores) para el proyecto.

Información general de cada proveedor

AzureRM es el proveedor estándar para administrar recursos de Azure con Terraform. Proporciona bloques de recursos seleccionados y tipados con validación integrada, comportamiento coherente y documentación amplia de la comunidad. Sin embargo, AzureRM solo admite un subconjunto de tipos de recursos de Azure y versiones de API, y las nuevas características a menudo van con retraso respecto a las versiones de Azure.

AzAPI es una capa delgada sobre las API REST de Azure Resource Manager (ARM). Admite cualquier tipo de recurso de Azure en cualquier versión de API, incluidas las características y servicios en versión preliminar que aún no se admiten en AzureRM. AzAPI proporciona acceso directo a la API de ARM sin esperar a actualizaciones del proveedor.

Cuándo usar AzureRM

Use AzureRM como proveedor principal cuando:

  • Los recursos que administra son totalmente compatibles con AzureRM con versiones de API estables.
  • Quiere esquemas de recursos mantenidos con validación integrada y una buena compatibilidad con IDE.
  • El equipo valora la amplia disponibilidad de los recursos de la comunidad, ejemplos y módulos.
  • Está administrando servicios de Azure bien establecidos que no requieren acceso a características en versión preliminar.

AzureRM es el valor predeterminado adecuado para la mayoría de los equipos que se basan en Azure. Comience con AzureRM y complemente con AzAPI solo cuando sea necesario.

Cuándo usar AzAPI

Use AzAPI como proveedor principal (o para complementar AzureRM) cuando:

  • Necesita administrar los recursos de Azure que aún no se admiten en AzureRM.
  • Debe usar una versión de API específica, incluidas las versiones preliminares, que AzureRM no expone.
  • Necesita acceso a las propiedades de recursos que AzureRM no expone.
  • Quiere tener control total sobre la versión de la API por motivos de cumplimiento o reproducibilidad.
  • Está administrando los recursos inmediatamente después del lanzamiento de Azure, antes de que AzureRM agregue soporte.

Cuándo usar ambos proveedores juntos

AzureRM y AzAPI están diseñados para trabajar en paralelo. Un patrón común es usar AzureRM para la mayoría de la infraestructura mientras usa AzAPI para el acceso directo a la API de ARM cuando sea necesario:

  • Use azapi_update_resource para establecer propiedades en recursos administrados por AzureRM que AzureRM no expone.
  • Use azapi_resource para administrar un nuevo servicio o una característica en vista previa (GB) mientras que el resto de la pila usa AzureRM.
  • Use azapi_resource_action para realizar operaciones en recursos administrados por AzureRM que no se ajusten a un ciclo de vida estándar de creación, lectura, actualización y eliminación.
# 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"
      }
    }
  }
}

Elección de una estrategia a largo plazo

AzureRM-primary: administre todos los recursos de AzureRM y use AzAPI solo como puente temporal para las características que aún no se admiten. Migre los recursos de AzAPI a AzureRM a medida que la compatibilidad esté disponible mediante la aztfmigrate herramienta .

AzAPI-primary: administre todos los recursos a través de AzAPI para el control de versiones de API coherente y el acceso anticipado a las nuevas características. Este enfoque requiere más configuración, pero proporciona control total sobre la versión de API de cada recurso.

La mayoría de los equipos deben empezar con una estrategia principal de AzureRM y adoptar AzAPI según sea necesario.

Comparación de características

Característica AzureRM AzAPI
Admite todos los tipos de recursos Azure No: subconjunto curado
Admite versiones preliminares de la API No
Esquemas de recursos curados No
Validación de propiedades integrada Parcial (a través de preflight)
Autocompletado del IDE para propiedades Sí (con la extensión de VS Code)
Exportación de respuesta/filtrado de JMESPath No
Administración de recursos del plano de datos Sí (tipos de recursos seleccionados)
Funciones de proveedor para la construcción de identificadores No Sí (v2.0 y versiones posteriores)
Validación previa en el momento del plan Sí (tipos de recursos seleccionados) Sí—Habilitar la validación previa

Pasos siguientes