Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O provedor AzAPI é uma camada fina sobre as APIs REST do Azure ARM. Permite-lhe gerir qualquer tipo de recurso do Azure usando qualquer versão da API, permitindo-lhe utilizar a funcionalidade mais recente dentro do Azure. AzAPI é um provedor de primeira classe projetado para ser usado sozinho ou em conjunto com o provedor AzureRM.
Benefícios de usar o provedor AzAPI
O provedor AzAPI apresenta os seguintes benefícios:
- Suporta todos os serviços de plano de controlo do Azure:
- Pré-visualizar serviços e funcionalidades
- Todas as versões da API
- Fidelidade total do ficheiro de estado do Terraform
- As propriedades e os valores são guardados no estado
- Sem dependência do Swagger
- Autenticação comum e consistente do Azure
- Validação pré-verificação integrada
- Controle granular sobre o desenvolvimento da infraestrutura
- Extensão do Microsoft Terraform para Visual Studio Code
Recursos
Para permitir que você gerencie todos os recursos e recursos do Azure sem exigir atualizações, o provedor AzAPI inclui os seguintes recursos genéricos:
| Nome do Recurso | Descrição |
|---|---|
azapi_resource |
Usado para gerenciar totalmente qualquer recurso (API) do Azure (plano de controle) com CRUD completo. Exemplos de casos de uso: Novo serviço de pré-visualização Novo recurso adicionado ao serviço existente Qualquer recurso Azure acessível através da API ARM |
azapi_update_resource |
Usado para gerenciar recursos ou partes de recursos que não têm CRUD completo Exemplos de casos de uso: Atualizar novas propriedades em um serviço existente Atualizar recurso secundário pré-criado - como o registo DNS SOA. |
azapi_resource_action |
Usado para executar uma única operação em um recurso sem gerenciar o ciclo de vida dele Exemplos de casos de uso: Desligar uma máquina virtual Adicionar um segredo a um Cofre de Chaves |
azapi_data_plane_resource |
Usado para gerenciar um subconjunto específico de recursos do plano de dados do Azure Exemplos de casos de uso: Contatos do certificado KeyVault Bibliotecas de espaço de trabalho Synapse |
Para uma explicação detalhada de como funciona a estrutura do plano de dados e em que parent_id difere dos recursos do plano de controlo, veja Compreender a estrutura do plano de dados AzAPI.
Hierarquia de uso
No geral, o uso deve seguir estas etapas:
- Comece por realizar o maior número possível de operações dentro de
azapi_resource. - Se o tipo de recurso não existir em
azapi_resource, mas se enquadrar num dos tipos suportados porazapi_data_plane_resource, utilize esse tipo. - Se o recurso já existir no AzureRM ou tiver uma propriedade que não pode ser acessada no
azapi_resource, useazapi_update_resourcepara acessar essas propriedades específicas. Recursos queazapi_resourceouazapi_data_plane_resourcenão suportam não podem ser atualizados através deste recurso. - Se estiveres a tentar executar uma ação que não se baseia num recurso compatível com CRUD do Azure,
azapi_resource_actioné menos simples, masazapi_update_resourceé mais flexível.
Exemplos de configuração de recursos
O seguinte excerto de código configura um recurso Azure diretamente através da API ARM:
resource "azapi_resource" "publicip" {
type = "Microsoft.Network/Customipprefixes@2021-03-01"
name = "exfullrange"
parent_id = azurerm_resource_group.example.id
location = "westus2"
body = {
properties = {
cidr = "10.0.0.0/24"
signedMessage = "Sample Message for WAN"
}
}
}
O trecho de código a seguir configura uma propriedade de visualização para um recurso existente do AzureRM:
resource "azapi_update_resource" "test" {
type = "Microsoft.ContainerRegistry/registries@2020-11-01-preview"
resource_id = azurerm_container_registry.acr.id
body = {
properties = {
anonymousPullEnabled = var.bool_anonymous_pull
}
}
}
O trecho de código a seguir configura uma ação de recurso em um recurso existente do AzureRM:
resource "azapi_resource_action" "vm_shutdown" {
type = "Microsoft.Compute/virtualMachines@2023-07-01"
resource_id = azurerm_linux_virtual_machine.example.id
action = "powerOff”
}
O trecho de código a seguir configura um recurso que não existe atualmente no provedor AzureRM devido a ser provisionado no plano de dados:
resource "azapi_data_plane_resource" "dataset" {
type = "Microsoft.Synapse/workspaces/datasets@2020-12-01"
parent_id = trimprefix(data.azurerm_synapse_workspace.example.connectivity_endpoints.dev, "https://")
name = "example-dataset"
body = {
properties = {
type = "AzureBlob",
typeProperties = {
folderPath = {
value = "@dataset().MyFolderPath"
type = "Expression"
}
fileName = {
value = "@dataset().MyFileName"
type = "Expression"
}
format = {
type = "TextFormat"
}
}
parameters = {
MyFolderPath = {
type = "String"
}
MyFileName = {
type = "String"
}
}
}
}
}
Exemplo de uso de pré-voo
Os seguintes erros no snippet de código ocorrem durante a fase terraform plan devido à validação interna prévia da AzAPI:
provider "azapi" {
enable_preflight = true
}
resource "azapi_resource" "vnet" {
type = "Microsoft.Network/virtualNetworks@2024-01-01"
parent_id = azapi_resource.resourceGroup.id
name = "example-vnet"
location = "westus"
body = {
properties = {
addressSpace = {
addressPrefixes = [
"10.0.0.0/160", # preflight will throw an error here
]
}
}
}
}
Quando ativado, o pré-voo revela erros de configuração durante terraform plan em vez de apenas no momento da aplicação.
Fontes de dados
O fornecedor AzAPI suporta várias fontes de dados úteis:
| Nome da fonte de dados | Descrição |
|---|---|
azapi_resource |
Usado para ler informações de qualquer recurso (API) do Azure (plano de controle). Exemplos de casos de uso: Novo serviço de pré-visualização Novo recurso adicionado ao serviço existente Qualquer recurso Azure acessível através da API ARM |
azapi_client_config |
Acesse informações do cliente, como ID de assinatura e ID de locatário. |
azapi_resource_action |
Usado para executar uma única operação de leitura em um recurso sem gerenciar o ciclo de vida dele Exemplos de casos de uso: Listar chaves Ler o status da VM |
azapi_data_plane_resource |
Usado para acessar um subconjunto específico de recursos do plano de dados do Azure Exemplos de casos de uso: Contatos do certificado KeyVault Bibliotecas de espaço de trabalho Synapse |
azapi_resource_id |
Acesse a ID de um recurso, com a capacidade de apresentar informações como ID de assinatura, ID pai, nome do grupo de recursos e nome do recurso. |
azapi_resource_list |
Liste todos os recursos com um ID de recurso pai específico. Exemplos de casos de uso: Recursos de uma assinatura / grupo de recursos Sub-redes sob uma rede virtual |
Para um exemplo prático usando azapi_resource_list com filtragem JMESPath, veja Listar recursos do Azure com o AzAPI Terraform provider.
Leia um recurso existente com azapi_resource fonte de dados
A fonte de dados azapi_resource lê o estado atual de qualquer recurso Azure e expõe as suas propriedades através do atributo output. Use-o quando precisar de uma propriedade que o fornecedor AzureRM não expõe:
data "azapi_resource" "aks" {
type = "Microsoft.ContainerService/managedClusters@2024-02-01"
resource_id = azurerm_kubernetes_cluster.example.id
# Extract the OIDC issuer URL, not exposed by azurerm_kubernetes_cluster
response_export_values = ["properties.oidcIssuerProfile.issuerURL"]
}
output "oidc_issuer_url" {
value = data.azapi_resource.aks.output.properties.oidcIssuerProfile.issuerURL
}
usar response_export_values e JMESPath
response_export_values controla quais propriedades são extraídas da resposta bruta da API ARM e disponibilizadas no atributo output. Aceita uma lista ou um mapa:
-
Lista: Especifique caminhos de propriedades JSON a extrair. Use
["*"]para exportar o corpo completo da resposta. - Mapa: Use expressões JMESPath para filtrar e remodelar a resposta. A chave é o nome do campo de saída; o valor é a consulta JMESPath.
A forma de mapa é preferida para respostas de listas e casos em que é necessário transformar a saída:
data "azapi_resource_list" "storage_accounts" {
type = "Microsoft.Storage/storageAccounts@2023-01-01"
parent_id = azurerm_resource_group.example.id
response_export_values = {
"names" = "value[].name"
"locations" = "value[].location"
}
}
Para uma orientação completa, consulte Listar recursos Azure com o AzAPI Terraform provider.
Autenticação usando o provedor AzAPI
O provedor AzAPI habilita os mesmos métodos de autenticação que o provedor AzureRM. Para obter mais informações sobre opções de autenticação, consulte Autenticar Terraform no Azure.
Experiência e ciclo de vida do fornecedor AzAPI
Esta seção descreve algumas ferramentas para ajudá-lo a usar o provedor AzAPI.
Extensão VS Code e Language Server
A extensão Microsoft Terraform VS Code proporciona uma experiência de autoria rica tanto para os fornecedores AzureRM como AzAPI, incluindo:
- Liste todos os tipos de recursos e versões de API disponíveis.
- Autocompletar as propriedades permitidas e os respetivos valores para qualquer recurso.
- Mostrar dicas ao passar o mouse sobre um estabelecimento.
- Validação de sintaxe

- Autocompletação com exemplos de código.
A extensão também suporta paste-as-AzAPI (converte JSON ARM em blocos azapi_resource), exportação de recursos Azure via aztfexport, migração de AzureRM para AzAPI e validação pré-voo. Para um guia completo, consulte Use a extensão Microsoft Terraform VS Code.
aztfmigrate ferramenta de migração
A ferramenta aztfmigrate foi projetada para ajudar a migrar recursos existentes entre os provedores AzAPI e AzureRM.
aztfmigrate tem dois modos: planejar e migrar:
- Plan exibe os recursos AzAPI que podem ser migrados.
- Migrar migra os recursos AzAPI para recursos do AzureRM nos arquivos HCL e no estado.
aztfmigrate garante após a migração que a configuração e o estado do Terraform estejam alinhados com o seu estado real. Pode validar a atualização do estado executando terraform plan após completar a migração para confirmar que não houve alterações.
Para um guia passo a passo, consulte Migrar recursos do AzAPI para o AzureRM.
Importar recursos Azure existentes
Para colocar um recurso de Azure existente sob gestão AzAPI sem o recriar, use o bloco import (Terraform 1.5 e posteriores) ou o comando terraform import. O ID do recurso deve incluir a versão da API como parâmetro de consulta:
import {
to = azapi_resource.example
id = "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/example-rg/providers/Microsoft.Network/virtualNetworks/example-vnet?api-version=2023-11-01"
}
resource "azapi_resource" "example" {
type = "Microsoft.Network/virtualNetworks@2023-11-01"
name = "example-vnet"
parent_id = "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/example-rg"
location = "westus"
body = {
properties = {
addressSpace = {
addressPrefixes = ["10.0.0.0/16"]
}
}
}
}
Para importar múltiplos recursos ao mesmo tempo da infraestrutura de Azure existente, use Azure Export for Terraform (aztfexport), que gera automaticamente tanto a configuração HCL como os blocos de importação.
Controles granulares sobre a infraestrutura
Um grande benefício do AzAPI é através de sua capacidade de ajustar sua configuração para corresponder aos padrões de design certos. Há várias maneiras de fazer isso:
Opções de configuração do fornecedor
O bloco de fornecedores AzAPI aceita várias definições que se aplicam globalmente a todos os recursos da configuração:
| Option | Descrição |
|---|---|
enable_preflight |
Permite a validação pré-voo na altura do planeamento. O valor padrão é false. Consulte Habilitar validação pré-voo no fornecedor AzAPI Terraform para mais detalhes. |
ignore_no_op_changes |
Suprime o ruído durante a execução do plano devido a diferenças de operações não efetivas entre a configuração e as respostas normalizadas da API. O valor padrão é true. |
disable_default_output |
Quando definido como true, impede a emissão automática de propriedades de leitura apenas quando response_export_values não está especificado. O valor padrão é false. |
default_location |
Define um padrão location para todos os recursos que não especificam explicitamente um. |
default_tags |
Define etiquetas padrão aplicadas a todos os recursos. O nível tags de recurso sobrepõe-se a estes predefinidos. |
skip_provider_registration |
Ignora o registo automático do fornecedor de recursos. Definido para true em ambientes restritos. |
Para uma lista completa das opções de configuração do fornecedor, consulte o esquema do fornecedor AzAPI.
Para uma explicação de como ativar o pré-voo, veja Ativar validação pré-voo no fornecedor AzAPI Terraform.
Funções do provedor
AzAPI v2.0 e posteriores incluem várias funções de fornecedor:
| Nome da função | Descrição |
|---|---|
build_resource_id |
Constrói um ID de recurso do Azure dado o ID pai, o tipo de recurso e o nome do recurso. Útil para criar IDs de recursos para recursos aninhados e de nível superior dentro de um escopo específico. |
extension_resource_id |
Constrói um ID de recurso de extensão Azure dado o ID de recurso base, o tipo de recurso e mais nomes de recursos. |
management_group_resource_id |
Constrói uma ID de recurso do escopo do grupo de gerenciamento do Azure com o nome do grupo de gerenciamento, o tipo de recurso e os nomes dos recursos. |
parse_resource_id |
Essa função usa uma ID de recurso do Azure e um tipo de recurso e analisa a ID em seus componentes individuais, como ID de assinatura, nome do grupo de recursos, namespace do provedor e outras partes. |
resource_group_resource_id |
Constrói uma ID de recurso do escopo do grupo de recursos do Azure dada a ID da assinatura, o nome do grupo de recursos, o tipo de recurso e os nomes dos recursos. |
subscription_resource_id |
Constrói uma ID de recurso do escopo da assinatura do Azure dada a ID da assinatura, o tipo de recurso e os nomes dos recursos. |
tenant_resource_id |
Constrói uma ID de recurso de escopo de locatário do Azure de acordo com o tipo de recurso e os nomes de recursos. |
Erros que podem ser retomados definidos pelo usuário com o bloco retry
O fornecedor AzAPI trata os erros esperados através do retry bloco. Por exemplo, use a seguinte configuração para repetir quando um recurso encontrar um tempo limite de criação.
resource "azapi_resource" "example" {
# usual properties
retry {
interval_seconds = 5
randomization_factor = 0.5 # adds randomization to retry pattern
multiplier = 2 # if try fails, multiplies time between next try by this much
error_message_regex = ["ResourceNotFound"]
}
timeouts {
create = "10m"
}
O retry bloco aceita estes atributos:
| Attribute | Descrição |
|---|---|
error_message_regex |
Required. Uma lista de expressões regulares comparadas com mensagens de erro. O pedido é retentado quando qualquer expressão coincide. |
interval_seconds |
Tempo base de espera entre tentativas. O valor padrão é 10. |
max_interval_seconds |
Tempo máximo de espera entre tentativas. O valor padrão é 180. |
multiplier |
Multiplicador aplicado ao intervalo após cada tentativa falhada. O valor padrão é 1.5. |
randomization_factor |
Adiciona tremor ao intervalo de retentativas para evitar padrões de rebanho trovejante. O valor padrão é 0.5. |
Combine retry com o timeouts bloco para definir um limite superior para a duração total de tentativas:
timeouts {
create = "10m"
}
Recursos efémeros e propriedades de escrita única
AzAPI v2.x suporta argumentos apenas de escrita (Terraform 1.11 e posteriores) através do sensitive_body atributo em azapi_resource. Propriedades apenas de escrita são enviadas para a API ARM mas não são armazenadas no estado Terraform, o que é útil para segredos e credenciais:
resource "azapi_resource" "example" {
type = "Microsoft.SomeService/resources@2024-01-01"
name = "example"
parent_id = azurerm_resource_group.example.id
body = {
properties = {
name = "example"
}
}
# Write-only — not stored in state
sensitive_body = {
properties = {
adminPassword = var.admin_password
}
}
}
Use sensitive_body_version para controlar quando propriedades apenas de escrita são reenviadas para a API (por exemplo, ao alterar credenciais).
Gatilhos para substituição de recursos
O provedor de AzAPI permite configurar parâmetros para substituição de recursos:
replace_triggers_external_values
Substitui o recurso caso um valor seja modificado. Por exemplo, se as variáveis SKU ou zones fossem modificadas, esse recurso seria recriado:
resource "azapi_resource" "example" {
name = var.name
type = "Microsoft.Network/publicIPAddresses@2023-11-01"
parent_id = "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/example"
body = properties = {
sku = var.sku
zones = var.zones
}
replace_triggers_external_values = [
var.sku,
var.zones,
]
}
Este gatilho funciona num conjunto amplo de recursos — por exemplo, na atribuição de uma política quando as propriedades da definição mudam.
replace_triggers_refs
Substitui o recurso se o valor referenciado mudar. Por exemplo, se o nome ou a camada da SKU fosse modificada, esse recurso seria recriado:
resource "azapi_resource" "example" {
type = "Microsoft.Relay/namespaces@2021-11-01"
parent_id = azurerm_resource_group.example.id
name = "xxx"
location = "westus"
body = {
properties = {
}
sku = {
name = "Standard"
tier = "Standard"
}
}
replace_triggers_refs = ["sku"]
}
Isto não desencadearia uma substituição se o SKU de um recurso diferente mudar.
Próximos passos
- Escolha entre fornecedores AzureRM e AzAPI Terraform
- Compreender a estrutura do plano de dados AzAPI
- Implante seu primeiro recurso com o provedor AzAPI
- Implante seu primeiro recurso de atualização com o provedor AzAPI
- Implante sua primeira ação de recurso com o provedor AzAPI
- Realizar ações de recursos com o fornecedor AzAPI
- Gerir recursos do plano de dados do Azure com AzAPI
- Liste os recursos do Azure com o fornecedor AzAPI
- Ativar a validação pré-voo
- Utilizar as funções do fornecedor AzAPI
- Caminhos de migração entre Azure, AzureRM e AzAPI
- Visite o registro do provedor