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.
Terraform permite a definição, visualização e implantação de infraestrutura em nuvem. Usando Terraform, você cria arquivos de configuração usando a sintaxe HCL. A sintaxe HCL permite especificar o provedor de nuvem - como o Azure - e os elementos que compõem sua infraestrutura de nuvem. Depois de criares os ficheiros de configuração, crias um plano de execução que te permite pré-visualizar as alterações da infraestrutura antes de serem implementadas. Depois de verificares as alterações, aplicas o plano de execução para implementar a infraestrutura.
AzAPI v2.0 e posteriores incluem um conjunto de funções provider para construir e analisar IDs de Azure recursos. As funções do provedor funcionam durante o tempo de planeamento dentro da configuração do Terraform e não requerem consulta a uma fonte de dados nem uma chamada de rede. Reduzem a complexidade do código quando a sua configuração precisa de construir ou decompor IDs de recursos.
Note
As funções do fornecedor requerem Terraform 1.8 ou posterior.
Funções disponíveis do fornecedor
| Function | Descrição |
|---|---|
build_resource_id |
Constrói um ID de recurso a partir de um ID de progenitor, de um tipo de recurso e de um nome de recurso. Suporta tanto recursos de topo como aninhados. |
extension_resource_id |
Constrói um ID de recurso de extensão a partir de um ID de recurso base, tipo de recurso e nomes de recursos. |
management_group_resource_id |
Constrói um ID de recurso com âmbito de grupo gestor. |
parse_resource_id |
Analisa um ID de recurso do Azure nas suas partes componentes (ID de subscrição, nome do grupo de recursos, espaço de nomes do fornecedor, nome do recurso e mais). |
resource_group_resource_id |
Constrói um ID de recurso com âmbito de grupo de recursos a partir de um ID de subscrição, nome do grupo de recursos, tipo de recurso e nomes de recursos. |
subscription_resource_id |
Constrói um ID de recurso com âmbito de subscrição. |
tenant_resource_id |
Constrói um ID de recurso com âmbito de inquilino. |
Pré-requisitos
- Subscrição do Azure: Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
Configurar o Terraform: Se você ainda não tiver feito isso, configure o Terraform usando uma das seguintes opções:
Certifique-se de que a sua configuração declara AzAPI v2.0 ou posterior e Terraform 1.8 ou posterior:
terraform {
required_version = ">= 1.8"
required_providers {
azapi = {
source = "Azure/azapi"
version = "~> 2.0"
}
azurerm = {
source = "hashicorp/azurerm"
version = "~> 4.0"
}
}
}
provider "azurerm" {
features {}
}
provider "azapi" {}
Analise um ID de recurso com parse_resource_id
Use parse_resource_id para decompor um ID de recurso de Azure existente nos seus componentes individuais. A função é útil quando precisa do ID de subscrição, nome do grupo de recursos ou nome de recurso proveniente de um recurso gerido noutra parte da sua configuração ou passado como variável.
locals {
storage_id_parts = provider::azapi::parse_resource_id(
"Microsoft.Storage/storageAccounts",
azurerm_storage_account.example.id
)
}
output "subscription_id" {
value = local.storage_id_parts.subscription_id
}
output "resource_group_name" {
value = local.storage_id_parts.resource_group_name
}
output "storage_account_name" {
value = local.storage_id_parts.name
}
A função devolve um objeto com estes campos:
-
id— o ID completo do recurso -
name— o nome do recurso -
parent_id— o identificador de recurso do recurso pai -
parts— um mapa de todos os segmentos de identificação de recursos -
provider_namespace(por exemplo,Microsoft.Storage) resource_group_nameresource_group_idsubscription_id-
type(por exemplo,Microsoft.Storage/storageAccounts)
Constrói um ID com âmbito de grupo de recursos com resource_group_resource_id
Use resource_group_resource_id quando precisar de referenciar um ID de recurso para um recurso que não gere no Terraform (por exemplo, um recurso existente passado como variável), ou quando quiser construir um ID previsível antes da criação do recurso.
variable "subscription_id" {
type = string
}
variable "existing_resource_group" {
type = string
}
variable "existing_storage_account" {
type = string
}
locals {
storage_account_id = provider::azapi::resource_group_resource_id(
var.subscription_id,
var.existing_resource_group,
"Microsoft.Storage/storageAccounts",
[var.existing_storage_account]
)
}
# Reference the pre-existing storage account without a data source lookup
resource "azapi_resource_action" "regenerate_key" {
type = "Microsoft.Storage/storageAccounts@2023-01-01"
resource_id = local.storage_account_id
action = "regenerateKey"
method = "POST"
body = {
keyName = "key1"
}
}
O parâmetro de nomes de recursos aceita uma lista para suportar tipos de recursos aninhados. Por exemplo, para construir um ID de sub-rede:
locals {
subnet_id = provider::azapi::resource_group_resource_id(
var.subscription_id,
var.resource_group_name,
"Microsoft.Network/virtualNetworks/subnets",
[var.vnet_name, var.subnet_name]
)
}
Construa um ID com âmbito de subscrição com subscription_resource_id
Utilização subscription_resource_id para recursos com âmbito ao nível da subscrição, como grupos de recursos ou atribuições de políticas:
locals {
resource_group_id = provider::azapi::subscription_resource_id(
var.subscription_id,
"Microsoft.Resources/resourceGroups",
[var.resource_group_name]
)
}
Construa um ID no âmbito de um grupo de gestão com management_group_resource_id
Utilização management_group_resource_id para recursos com âmbito de grupos de gestão, como atribuições de políticas e atribuições de funções:
locals {
mg_policy_id = provider::azapi::management_group_resource_id(
var.management_group_name,
"Microsoft.Authorization/policyAssignments",
[var.policy_assignment_name]
)
}
Constrói um ID de recurso de extensão com extension_resource_id
Use extension_resource_id para recursos de extensão que estejam ligados a outro recurso, como bloqueios ou atribuições de funções a um recurso específico:
locals {
lock_id = provider::azapi::extension_resource_id(
azurerm_storage_account.example.id,
"Microsoft.Authorization/locks",
[var.lock_name]
)
}
Crie um ID de recurso com build_resource_id
Utilize build_resource_id quando um ID de recurso principal determina o âmbito, e não é necessário especificar a subscrição ou o grupo de recursos separadamente. Esta função infere o âmbito a partir do ID pai:
locals {
subnet_id = provider::azapi::build_resource_id(
azurerm_virtual_network.example.id,
"Microsoft.Network/virtualNetworks/subnets",
var.subnet_name
)
}
Comparar com abordagens relacionadas a fontes de dados
As funções do fornecedor são preferíveis em relação às fontes de dados para construção e análise de ID porque:
- Executar inteiramente no tempo de planeamento, sem chamadas de rede.
- Não adicione recursos ao estado do Terraform.
- São deterministas e não exigem
depends_onordenação.
Use azapi_resource a fonte de dados quando precisar de ler propriedades ativas de um recurso, não apenas construir ou analisar o seu ID.