Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Terraform möjliggör definition, förhandsversion och distribution av molninfrastruktur. Med Terraform skapar du konfigurationsfiler med hjälp av HCL-syntax. Med HCL-syntaxen kan du ange molnleverantören – till exempel Azure – och de element som utgör din molninfrastruktur. När du har skapat konfigurationsfilerna skapar du en körningsplan som gör att du kan förhandsgranska ändringarna i infrastrukturen innan de distribueras. När du har verifierat ändringarna tillämpar du genomförandeplanen för att implementera infrastrukturen.
AzAPI v2.0 och senare innehåller en uppsättning provider-funktioner för att konstruera och parsa Azure resurs-ID:er. Leverantörsfunktioner körs under planeringsfasen i Terraform-konfigurationen och kräver inte någon sökning efter datakälla eller ett nätverksanrop. De minskar kodkomplexiteten när konfigurationen behöver konstruera eller dela upp resurs-ID:t.
Anmärkning
Providerfunktioner kräver Terraform 1.8 eller senare.
Tillgängliga providerfunktioner
| Function | Beskrivning |
|---|---|
build_resource_id |
Konstruerar ett resurs-ID från ett överordnat ID, resurstyp och resursnamn. Stödjer både resurser på toppnivå och kapslade resurser. |
extension_resource_id |
Konstruerar ett tilläggsresurs-ID från ett basresurs-ID, resurstyp och resursnamn. |
management_group_resource_id |
Konstruerar ett resurs-ID för hanteringsgruppsomfång. |
parse_resource_id |
Parsar ett Azure resurs-ID i dess komponentdelar (prenumerations-ID, resursgruppsnamn, providernamnområde, resursnamn med mera). |
resource_group_resource_id |
Konstruerar ett resursgruppsomfångsbegränsat resurs-ID från ett prenumerations-ID, resursgruppsnamn, resurstyp och resursnamn. |
subscription_resource_id |
Konstruerar ett resurs-ID med prenumerationsomfång. |
tenant_resource_id |
Konstruerar ett hyresgästspecificerat resurs-ID. |
Förutsättningar
- Azure-prenumeration: Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.
Konfigurera Terraform: Om du inte redan har gjort det konfigurerar du Terraform med något av följande alternativ:
Se till att konfigurationen deklarerar AzAPI v2.0 eller senare och Terraform 1.8 eller senare:
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" {}
Parsa ett resurs-ID med parse_resource_id
Använd parse_resource_id för att dela upp ett befintligt Azure resurs-ID i dess enskilda komponenter. Funktionen är användbar när du behöver prenumerations-ID, resursgruppsnamn eller resursnamn från en resurs som hanteras någon annanstans i konfigurationen eller skickas som en variabel.
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
}
Funktionen returnerar ett objekt med följande fält:
-
id— det fullständiga resurs-ID:t -
name— resursnamnet -
parent_id– resurs-ID för den överordnade resursen -
parts— en karta över alla resurs-ID-segment -
provider_namespace(till exempelMicrosoft.Storage) resource_group_nameresource_group_idsubscription_id-
type(till exempelMicrosoft.Storage/storageAccounts)
Skapa ett resursgruppsomfångs-ID med resource_group_resource_id
Använd resource_group_resource_id när du behöver referera till ett resurs-ID för en resurs som du inte hanterar i Terraform (till exempel en befintlig resurs som skickas som en variabel) eller när du vill skapa ett förutsägbart ID innan resursen skapas.
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"
}
}
Parametern resursnamn accepterar en lista som stöder kapslade resurstyper. Om du till exempel vill skapa ett undernäts-ID:
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]
)
}
Skapa ett prenumerationsomfångs-ID med subscription_resource_id
Använd subscription_resource_id för resurser som är begränsade på prenumerationsnivå, till exempel resursgrupper eller principtilldelningar:
locals {
resource_group_id = provider::azapi::subscription_resource_id(
var.subscription_id,
"Microsoft.Resources/resourceGroups",
[var.resource_group_name]
)
}
Skapa ett hanteringsgruppsomfångs-ID med management_group_resource_id
Använd management_group_resource_id för resurser inom hanteringsgruppen, till exempel principtilldelningar och rolltilldelningar:
locals {
mg_policy_id = provider::azapi::management_group_resource_id(
var.management_group_name,
"Microsoft.Authorization/policyAssignments",
[var.policy_assignment_name]
)
}
Skapa ett tilläggsresurs-ID med extension_resource_id
Används extension_resource_id för tilläggsresurser som är kopplade till en annan resurs, till exempel lås eller rolltilldelningar på en specifik resurs:
locals {
lock_id = provider::azapi::extension_resource_id(
azurerm_storage_account.example.id,
"Microsoft.Authorization/locks",
[var.lock_name]
)
}
Skapa ett resurs-ID med build_resource_id
Använd build_resource_id när ett överordnat resurs-ID avgör omfånget och du inte behöver ange prenumeration eller resursgrupp separat. Den här funktionen härleder omfånget från det överordnade ID:t:
locals {
subnet_id = provider::azapi::build_resource_id(
azurerm_virtual_network.example.id,
"Microsoft.Network/virtualNetworks/subnets",
var.subnet_name
)
}
Jämför med datakällans metoder
Providerfunktioner är att föredra framför datakällor för ID-konstruktion och parsning eftersom de:
- Kör helt under planeringstiden utan nätverksanrop.
- Lägg inte till resurser i Terraform-tillstånd.
- Är deterministiska och kräver inte
depends_onordning.
Använd azapi_resource datakälla när du behöver läsa liveegenskaper för en resurs, inte bara skapa eller parsa dess ID.