Escolha entre fornecedores AzureRM e AzAPI Terraform

Azure tem dois fornecedores oficiais de Terraform: AzureRM e AzAPI. Ambos os fornecedores gerem recursos do Azure através do Terraform, mas usam abordagens diferentes. Compreender estas diferenças ajuda-o a escolher o fornecedor certo — ou a combinação de fornecedores — para o seu projeto.

Visão geral de cada prestador

AzureRM é o fornecedor padrão para gerir recursos Azure com Terraform. Fornece blocos de recursos curados e tipados com validação integrada, comportamento consistente e documentação ampla da comunidade. No entanto, o AzureRM suporta apenas um subconjunto dos tipos de recursos do Azure e versões da API, e as novas funcionalidades frequentemente ficam atrás das versões do Azure.

AzAPI é uma camada fina sobre as APIs REST do Azure Resource Manager (ARM). Suporta qualquer tipo de recurso Azure em qualquer versão da API, incluindo funcionalidades de pré-visualização e serviços ainda não suportados no AzureRM. O AzAPI dá-lhe acesso direto à API ARM sem esperar por atualizações do fornecedor.

Quando usar o AzureRM

Use o AzureRM como seu fornecedor principal quando:

  • Os recursos que gere são totalmente suportados no AzureRM com versões estáveis da API.
  • Queres esquemas de recursos curados com validação incorporada e bom suporte ao IDE.
  • A sua equipa valoriza recursos comunitários amplos, exemplos e disponibilidade de módulos.
  • Está a gerir serviços Azure bem estabelecidos que não precisam de acesso a funcionalidades de pré-visualização.

O AzureRM é o padrão correto para a maior parte das equipas que constroem no Azure. Começa com o AzureRM e complementa com AzAPI apenas quando necessário.

Quando usar o AzAPI

Use o AzAPI como seu fornecedor principal — ou para complementar o AzureRM — quando:

  • Precisas de gerir recursos do Azure que ainda não são suportados no AzureRM.
  • Precisas de usar uma versão específica da API, incluindo versões de pré-visualização, que o AzureRM não expõe.
  • Precisas de acesso a propriedades de recursos que o AzureRM não apresenta.
  • Queres controlo total sobre a versão da API por razões de conformidade ou reprodutibilidade.
  • Estás a gerir os recursos imediatamente após o lançamento do Azure, antes do AzureRM adicionar suporte.

Quando usar ambos os fornecedores em conjunto

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

  • Use azapi_update_resource para definir propriedades em recursos geridos pelo AzureRM que o AzureRM não expõe.
  • Utilize azapi_resource para gerir um novo serviço ou recurso de pré-visualização enquanto o resto da sua pilha utiliza AzureRM.
  • Use azapi_resource_action para realizar operações em recursos geridos pelo AzureRM que não se enquadram num ciclo de vida padrão de criar/ler/atualizar/eliminar.
# 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"
      }
    }
  }
}

Escolher uma estratégia de longo prazo

AzureRM-primary: Gerir todos os recursos no AzureRM e usar o AzAPI apenas como ponte temporária para funcionalidades ainda não suportadas. Migre recursos AzAPI para AzureRM assim que o suporte estiver disponível, utilizando a aztfmigrate ferramenta.

AzAPI-primário: Gerir todos os recursos através do AzAPI para controlo consistente de versões da API e acesso antecipado a novas funcionalidades. Esta abordagem requer mais configuração, mas dá-lhe controlo total sobre a versão da API de cada recurso.

A maioria das equipas deve começar com uma estratégia AzureRM-primary e adotar o AzAPI conforme necessário.

Comparação de funcionalidades

Feature AzureRM AzAPI
Suporta todos os tipos de recursos do Azure Não—subconjunto curado Yes
Suporta versões pré-visualizadas da API No Yes
Esquemas de recursos curados Yes No
Validação de propriedades incorporada Yes Parcial (via pré-voo)
IDE autocomplete para propriedades Yes Sim (com extensão do VS Code)
Exportação da resposta / Filtragem JMESPath No Yes
Gestão de recursos no plano de dados Yes Sim (tipos de recursos selecionados)
Funções de provedor para construção de ID No Sim (v2.0 e posteriores)
Validação antes do voo no momento de planeamento Sim (tipos de recursos selecionados) Sim — Ativar a validação pré-voo

Passos seguintes