Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Terraform habilita la definición, la versión preliminar y la implementación de la infraestructura en la nube. Con Terraform, se crean archivos de configuración mediante la sintaxis de HCL. La sintaxis de HCL permite especificar el proveedor de la nube, como Azure, y los elementos que componen la infraestructura de la nube. Después de crear los archivos de configuración, se crea un plan de ejecución que permite obtener una vista previa de los cambios de infraestructura antes de implementarlos. Una vez que compruebe los cambios, aplique el plan de ejecución para implementar la infraestructura.
AzAPI v2.0 y versiones posteriores incluye un conjunto de funciones provider para construir y analizar identificadores de recursos Azure. Las funciones de proveedor se ejecutan en tiempo de plan dentro de la configuración de Terraform y no requieren una búsqueda de origen de datos ni una llamada de red. Reducen la complejidad del código cuando la configuración necesita construir o descomponer identificadores de recursos.
Note
Las funciones de proveedor requieren Terraform 1.8 o posterior.
Funciones de proveedor disponibles
| Function | Descripción |
|---|---|
build_resource_id |
Construye un identificador de recurso a partir de un identificador primario, un tipo de recurso y un nombre de recurso. Soporta tanto recursos de nivel superior como anidados. |
extension_resource_id |
Construye un identificador de recurso de extensión a partir de un identificador de recurso base, un tipo de recurso y nombres de recursos. |
management_group_resource_id |
Construye un identificador de recurso con un alcance específico para el grupo de administración. |
parse_resource_id |
Analiza un identificador de recurso de Azure en sus partes de componentes (identificador de suscripción, nombre del grupo de recursos, espacio de nombres del proveedor, nombre del recurso, etc.). |
resource_group_resource_id |
Construye un identificador de recurso con ámbito de grupo de recursos a partir de un identificador de suscripción, un nombre de grupo de recursos, un tipo de recurso y nombres de recursos. |
subscription_resource_id |
Construye un identificador de recurso con ámbito de suscripción. |
tenant_resource_id |
Construye un identificador de recurso con ámbito de inquilino. |
Prerequisites
- Suscripción de Azure: Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
Configurar Terraform: si aún no lo ha hecho, configure Terraform con una de las siguientes opciones:
Asegúrese de que la configuración declara AzAPI v2.0 o posterior y Terraform 1.8 o 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" {}
Análisis de un identificador de recurso con parse_resource_id
Use parse_resource_id para descomponer un identificador de recurso de Azure existente en sus componentes individuales. La función es útil cuando se necesita el identificador de suscripción, el nombre del grupo de recursos o el nombre de recurso de un recurso administrado en otra parte de la configuración o se pasa como una variable.
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
}
La función devuelve un objeto con estos campos:
-
id— el identificador completo del recurso. -
name: el nombre del recurso. -
parent_id: el identificador de recurso del recurso primario. -
parts: mapa de todos los segmentos de identificador de recurso -
provider_namespace(por ejemplo,Microsoft.Storage) resource_group_nameresource_group_idsubscription_id-
type(por ejemplo,Microsoft.Storage/storageAccounts)
Construir un identificador de ámbito para un grupo de recursos con resource_group_resource_id
Use resource_group_resource_id cuando necesite hacer referencia a un identificador de recurso para un recurso que no administre en Terraform (por ejemplo, un recurso existente pasado como una variable) o cuando desee construir un identificador de predicción antes de la creación de recursos.
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"
}
}
El parámetro de nombres de recursos acepta una lista para admitir tipos de recursos anidados. Por ejemplo, para construir un identificador de subred:
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]
)
}
Construcción de un identificador con ámbito de suscripción con subscription_resource_id
Utilice subscription_resource_id para los recursos definidos a nivel de suscripción, como grupos de recursos o asignaciones de directivas.
locals {
resource_group_id = provider::azapi::subscription_resource_id(
var.subscription_id,
"Microsoft.Resources/resourceGroups",
[var.resource_group_name]
)
}
Construir un identificador de ámbito de grupo de gestión con management_group_resource_id
Use management_group_resource_id para recursos de ámbito de grupo de administración, como asignaciones de directivas y asignaciones de roles:
locals {
mg_policy_id = provider::azapi::management_group_resource_id(
var.management_group_name,
"Microsoft.Authorization/policyAssignments",
[var.policy_assignment_name]
)
}
Construir un identificador de recurso de extensión con extension_resource_id
Use extension_resource_id para los recursos de extensión que están asociados a otro recurso, como bloqueos o asignaciones de roles en un recurso específico:
locals {
lock_id = provider::azapi::extension_resource_id(
azurerm_storage_account.example.id,
"Microsoft.Authorization/locks",
[var.lock_name]
)
}
Compilación de un identificador de recurso con build_resource_id
Se usa build_resource_id cuando un identificador de recurso primario determina el ámbito y no es necesario especificar la suscripción o el grupo de recursos por separado. Esta función deduce el ámbito del identificador primario:
locals {
subnet_id = provider::azapi::build_resource_id(
azurerm_virtual_network.example.id,
"Microsoft.Network/virtualNetworks/subnets",
var.subnet_name
)
}
Comparación con los enfoques del origen de datos
Las funciones de proveedor son preferibles a los orígenes de datos para la construcción y el análisis de identificadores porque:
- Funciona totalmente en tiempo de planificación sin llamadas de red.
- No agregue recursos al estado de Terraform.
- Son deterministas y no requieren
depends_onordenación.
Utilice azapi_resource como origen de datos cuando necesite leer las propiedades en tiempo real de un recurso, no solo construir o analizar su identificador.