Escolher entre os provedores de Terraform AzureRM e AzAPI

Azure tem dois provedores oficiais do Terraform: AzureRM e AzAPI. Ambos os provedores gerenciam Azure recursos por meio do Terraform, mas usam abordagens diferentes. Entender essas diferenças ajuda você a escolher o provedor certo ou a combinação de provedores para seu projeto.

Visão geral de cada provedor

AzureRM é o provedor padrão para gerenciar recursos Azure com o Terraform. Ele fornece blocos de recursos coletados e tipados com validação integrada, comportamento consistente e ampla documentação da comunidade. No entanto, o AzureRM dá suporte apenas a um subconjunto de tipos de recursos do Azure e versões de API, e os novos recursos geralmente ficam para trás nos lançamentos do Azure.

AzAPI é uma camada fina sobre as APIs REST do Azure Resource Manager (ARM). Ele dá suporte a qualquer tipo de recurso Azure em qualquer versão da API, incluindo recursos de visualização e serviços ainda não compatíveis com o AzureRM. A AzAPI fornece acesso direto à API do ARM sem esperar por atualizações do provedor.

Quando usar o AzureRM

Use o AzureRM como seu provedor primário quando:

  • Os recursos que você está gerenciando têm suporte total no AzureRM com versões de API estáveis.
  • Você deseja esquemas de recursos curados com validação embutida e bom suporte a IDEs.
  • Sua equipe valoriza recursos amplos da comunidade, exemplos e disponibilidade do módulo.
  • Você está gerenciando serviços de Azure bem estabelecidos que não exigem acesso aos recursos de visualização.

O AzureRM é o padrão certo para a maioria das equipes que se baseiam em Azure. Comece com o AzureRM e complemente-o com a AzAPI somente quando necessário.

Quando usar a AzAPI

Use a AzAPI como seu provedor primário ou para complementar o AzureRM quando:

  • Você precisa gerenciar os recursos do Azure que ainda não têm suporte no AzureRM.
  • Você precisa usar uma versão específica da API, incluindo versões prévias, que o AzureRM não expõe.
  • Você precisa de acesso às propriedades de recurso que o AzureRM não apresenta.
  • Você deseja ter controle total sobre a versão da API por motivos de conformidade ou reprodutibilidade.
  • Você está gerenciando recursos imediatamente após o lançamento do Azure, antes que o AzureRM adicione suporte.

Quando usar ambos os provedores juntos

O AzureRM e a AzAPI foram projetados para funcionar lado a lado. Um padrão comum é usar o AzureRM para a maior parte da sua infraestrutura ao usar a AzAPI para acesso direto à API do ARM, quando necessário:

  • Use azapi_update_resource para definir propriedades em recursos gerenciados pelo AzureRM que o AzureRM não expõe.
  • Use azapi_resource para gerenciar um novo serviço ou recurso de visualização enquanto o restante da pilha usa o AzureRM.
  • Use azapi_resource_action para executar operações em recursos gerenciados pelo AzureRM que não se ajustam a um ciclo de vida padrão de criação/leitura/atualização/exclusão.
# 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"
      }
    }
  }
}

Escolhendo uma estratégia de longo prazo

AzureRM-primary: gerencie todos os recursos no AzureRM e use a AzAPI apenas como uma ponte temporária para recursos ainda não compatíveis. Migre recursos da AzAPI para o AzureRM à medida que o suporte fica disponível, usando a aztfmigrate ferramenta.

AzAPI-primary: gerencie todos os recursos por meio da AzAPI para controle de versão de API consistente e acesso antecipado a novos recursos. Essa abordagem requer mais configuração, mas fornece controle total sobre a versão da API de cada recurso.

A maioria das equipes deve começar com uma estratégia primária do AzureRM e adotar a AzAPI conforme necessário.

Comparação de funcionalidades

Característica AzureRM AzAPI
Dá suporte a todos os tipos de recursos Azure Não: subconjunto curado Sim
Dá suporte a versões prévias da API No Sim
Esquemas de recursos coletados Sim No
Validação de propriedade interna Sim Parcial (via pré-voo)
Preenchimento automático no IDE para propriedades Sim Sim (com extensão do VS Code)
Exportação de resposta/filtragem JMESPath No Sim
Gerenciamento de recursos do plano de dados Sim Sim (tipos de recursos selecionados)
Funções do provedor para construção de ID No Sim (v2.0 e posterior)
Validação de pré-voo no tempo de planejamento Sim (tipos de recursos selecionados) Sim — Habilitar a validação de pré-vôo

Próximas Etapas