Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Terraform maakt de definitie, preview en implementatie van de cloudinfrastructuur mogelijk. Met Terraform maakt u configuratiebestanden met behulp van HCL-syntaxis. Met de HCL-syntaxis kunt u de cloudprovider opgeven, zoals Azure, en de elementen waaruit uw cloudinfrastructuur bestaat. Nadat u uw configuratiebestanden hebt gemaakt, maakt u een uitvoeringsplan waarmee u een voorbeeld van uw infrastructuurwijzigingen kunt bekijken voordat ze worden geïmplementeerd. Zodra u de wijzigingen hebt gecontroleerd, past u het uitvoeringsplan toe om de infrastructuur te implementeren.
AzAPI v2.0 en hoger bevat een set providerfuncties voor het maken en parseren van Azure resource-id's. Providerfuncties worden uitgevoerd op plantijd binnen de Terraform-configuratie en vereisen geen opzoekactie voor gegevensbronnen of een netwerkoproep. Ze verminderen de complexiteit van code wanneer uw configuratie resource-ID's moet maken of decomponeren.
Note
Voor providerfuncties is Terraform 1.8 of hoger vereist.
Beschikbare providerfuncties
| Function | Beschrijving |
|---|---|
build_resource_id |
Maakt een resource-ID van een ouder-ID, resourcetype en resourcenaam. Ondersteunt zowel toplevel- als geneste resources. |
extension_resource_id |
Maakt een extensieresource-id op basis van een basisresource-id, resourcetype en resourcenamen. |
management_group_resource_id |
Construeert een resource-ID binnen het bereik van een beheergroep. |
parse_resource_id |
Parseert een Azure resource-id in de onderdelen ervan (abonnements-id, resourcegroepnaam, providernaamruimte, resourcenaam en meer). |
resource_group_resource_id |
Hiermee wordt een resourcegroep-id gemaakt op basis van een abonnements-id, resourcegroepnaam, resourcetype en resourcenamen. |
subscription_resource_id |
Maakt een resource-id binnen het subscriptiebereik. |
tenant_resource_id |
Maakt een resource-ID met een tenant-bereik. |
Prerequisites
- Azure-abonnement: als u nog geen abonnement op Azure hebt, maakt u een gratis Azure-account aan voordat u begint.
Terraform configureren: Als u dit nog niet hebt gedaan, configureert u Terraform met een van de volgende opties:
Zorg ervoor dat uw configuratie AzAPI v2.0 of hoger en Terraform 1.8 of hoger declareert:
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" {}
Een resource-id parseren met parse_resource_id
Gebruik parse_resource_id om een bestaande Azure resource-id op te delen in de afzonderlijke onderdelen. De functie is handig wanneer u de abonnements-id, resourcegroepnaam of resourcenaam nodig hebt van een resource die elders in uw configuratie wordt beheerd of als variabele is doorgegeven.
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
}
De functie retourneert een object met deze velden:
-
id— de volledige resource-ID -
name— de resourcenaam -
parent_id— de resource-ID van de bovenliggende resource -
parts— een kaart van alle resource-id-segmenten -
provider_namespace(bijvoorbeeld,Microsoft.Storage) resource_group_nameresource_group_idsubscription_id-
type(bijvoorbeeld,Microsoft.Storage/storageAccounts)
Een resourcegroep-bereik-id maken met resource_group_resource_id
Gebruik resource_group_resource_id deze opdracht wanneer u naar een resource-id moet verwijzen voor een resource die u niet beheert in Terraform (bijvoorbeeld een bestaande resource die als variabele is doorgegeven), of wanneer u een voorspelbare id wilt maken voordat u resources maakt.
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"
}
}
De parameter resourcenamen accepteert een lijst ter ondersteuning van geneste resourcetypen. Als u bijvoorbeeld een subnet-id wilt maken:
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]
)
}
Een abonnementsbereik-ID maken met subscription_resource_id
Gebruiken subscription_resource_id voor resources binnen het bereik op abonnementsniveau, zoals resourcegroepen of beleidstoewijzingen:
locals {
resource_group_id = provider::azapi::subscription_resource_id(
var.subscription_id,
"Microsoft.Resources/resourceGroups",
[var.resource_group_name]
)
}
Maak een ID voor beheergroep-scoping met management_group_resource_id
Gebruiken management_group_resource_id voor beheergroepsbronnen, zoals beleidstoewijzingen en roltoewijzingen:
locals {
mg_policy_id = provider::azapi::management_group_resource_id(
var.management_group_name,
"Microsoft.Authorization/policyAssignments",
[var.policy_assignment_name]
)
}
Een extensie-resource-ID maken met extension_resource_id
Gebruiken extension_resource_id voor extensieresources die zijn gekoppeld aan een andere resource, zoals vergrendelingen of roltoewijzingen voor een specifieke resource:
locals {
lock_id = provider::azapi::extension_resource_id(
azurerm_storage_account.example.id,
"Microsoft.Authorization/locks",
[var.lock_name]
)
}
Een resource-id maken met build_resource_id
Gebruik build_resource_id wanneer een bovenliggende resource-ID het bereik bepaalt en u geen abonnement of resourcegroep afzonderlijk hoeft op te geven. Met deze functie wordt het bereik afgeleid van de parent-ID.
locals {
subnet_id = provider::azapi::build_resource_id(
azurerm_virtual_network.example.id,
"Microsoft.Network/virtualNetworks/subnets",
var.subnet_name
)
}
Vergelijken met benaderingen voor gegevensbronnen
Providerfuncties hebben de voorkeur boven gegevensbronnen voor het bouwen en parseren van id's, omdat ze:
- Voer volledig uit op plantijd zonder netwerkoproepen.
- Voeg geen resources toe aan de Terraform-state.
- Zijn deterministisch en vereisen geen
depends_onvolgorde.
Gebruik azapi_resource gegevensbron wanneer u live-eigenschappen van een resource moet lezen, niet alleen de id samenstellen of parseren.