Verwenden Sie Provider-Funktionen im AzAPI Terraform-Anbieter

Terraform ermöglicht die Definition, Vorschau und Bereitstellung der Cloudinfrastruktur. Mithilfe von Terraform erstellen Sie Konfigurationsdateien mit der HCL-Syntax. Mit der HCL-Syntax können Sie den Cloudanbieter ( z. B. Azure ) und die Elemente angeben, aus denen Ihre Cloudinfrastruktur besteht. Nach der Erstellung Ihrer Konfigurationsdateien erstellen Sie einen Ausführungsplan, mit dem Sie eine Vorschau Ihrer Infrastrukturänderungen anzeigen können, bevor diese bereitgestellt werden. Nachdem Sie die Änderungen überprüft haben, wenden Sie den Ausführungsplan an, um die Infrastruktur bereitzustellen.

AzAPI v2.0 und höher enthält eine Reihe von providerfunktionen zum Erstellen und Analysieren Azure Ressourcen-IDs. Anbieterfunktionen werden zur Planzeit innerhalb der Terraform-Konfiguration ausgeführt und benötigen keine Datenquellensuche oder einen Netzwerkanruf. Sie reduzieren die Codekomplexität, wenn Ihre Konfiguration Ressourcen-IDs erstellen oder dekompilieren muss.

Note

Anbieterfunktionen erfordern Terraform 1.8 oder höher.

Verfügbare Anbieterfunktionen

Function Beschreibung
build_resource_id Erstellt eine Ressourcen-ID aus einer übergeordneten ID, einem Ressourcentyp und einem Ressourcennamen. Unterstützt sowohl Top-Level- als auch geschachtelte Ressourcen.
extension_resource_id Erstellt eine Erweiterungsressourcen-ID aus einer Basisressourcen-ID, einem Ressourcentyp und Ressourcennamen.
management_group_resource_id Erstellt eine Ressourcen-ID im Bereich der Verwaltungsgruppe.
parse_resource_id Analysiert eine Azure Ressourcen-ID in die Komponententeile (Abonnement-ID, Ressourcengruppenname, Anbieternamespace, Ressourcenname usw.).
resource_group_resource_id Erstellt eine ressourcengruppenbezogene Ressourcen-ID aus einer Abonnement-ID, ressourcengruppennamen, Ressourcentyp und Ressourcennamen.
subscription_resource_id Erstellt eine ressourcenspezifische Abonnement-ID.
tenant_resource_id Erstellt eine Mandanten-spezifische Ressourcen-ID.

Voraussetzungen

  • Azure-Abonnement: Wenn Sie nicht über ein Azure-Abonnement verfügen, erstellen Sie ein kostenloses Konto , bevor Sie beginnen.

Stellen Sie sicher, dass Ihre Konfiguration AzAPI v2.0 oder höher und Terraform 1.8 oder höher deklariert:

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" {}

Analysieren einer Ressourcen-ID mit parse_resource_id

Verwenden Sie parse_resource_id, um eine vorhandene Azure Ressourcen-ID in die einzelnen Komponenten zu dekompilieren. Die Funktion ist nützlich, wenn Sie die Abonnement-ID, den Ressourcengruppennamen oder den Ressourcennamen aus einer ressource benötigen, die an anderer Stelle in Ihrer Konfiguration verwaltet oder als Variable übergeben wird.

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
}

Die Funktion gibt ein Objekt mit den folgenden Feldern zurück:

  • id — die vollständige Ressourcen-ID
  • name — der Ressourcenname
  • parent_id — die Ressourcen-ID der übergeordneten Ressource
  • parts — eine Abbildung aller Ressourcen-ID-Segmente
  • provider_namespace (z. B. Microsoft.Storage)
  • resource_group_name
  • resource_group_id
  • subscription_id
  • type (z. B. Microsoft.Storage/storageAccounts)

Erstellen einer ressourcengruppenbezogenen ID mit resource_group_resource_id

Verwenden Sie diese Option resource_group_resource_id , wenn Sie auf eine Ressourcen-ID für eine Ressource verweisen müssen, die Sie nicht in Terraform verwalten (z. B. eine vorhandene Ressource, die als Variable übergeben wurde), oder wenn Sie eine vorhersagbare ID vor der Ressourcenerstellung erstellen möchten.

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"
  }
}

Der Parameter "Ressourcennamen" akzeptiert eine Liste zur Unterstützung geschachtelter Ressourcentypen. So erstellen Sie beispielsweise eine Subnetz-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]
  )
}

Erstellen Sie eine ID, die auf das Abonnement beschränkt ist, mit subscription_resource_id

Verwenden Sie subscription_resource_id für Ressourcen auf Abonnementebene, wie Ressourcengruppen oder Richtlinienzuweisungen.

locals {
  resource_group_id = provider::azapi::subscription_resource_id(
    var.subscription_id,
    "Microsoft.Resources/resourceGroups",
    [var.resource_group_name]
  )
}

Erstellen einer verwaltungsgruppenbezogenen ID mit management_group_resource_id

Verwenden Sie management_group_resource_id für Ressourcen, die im Verwaltungsbereich von Gruppen liegen, wie Richtlinienzuweisungen und Rollenzuweisungen.

locals {
  mg_policy_id = provider::azapi::management_group_resource_id(
    var.management_group_name,
    "Microsoft.Authorization/policyAssignments",
    [var.policy_assignment_name]
  )
}

Erstellen einer Erweiterungsressourcen-ID mit extension_resource_id

Verwenden Sie extension_resource_id, um Erweiterungsressourcen anzugeben, die an eine andere Ressource angefügt sind, z. B. Sperren oder Rollenzuweisungen für eine bestimmte Ressource:

locals {
  lock_id = provider::azapi::extension_resource_id(
    azurerm_storage_account.example.id,
    "Microsoft.Authorization/locks",
    [var.lock_name]
  )
}

Erstellen einer Ressourcen-ID mit build_resource_id

Verwenden Sie diese Option build_resource_id , wenn eine übergeordnete Ressourcen-ID den Bereich bestimmt und Sie kein Abonnement oder eine Ressourcengruppe separat angeben müssen. Diese Funktion leitet den Gültigkeitsbereich von der übergeordneten ID ab:

locals {
  subnet_id = provider::azapi::build_resource_id(
    azurerm_virtual_network.example.id,
    "Microsoft.Network/virtualNetworks/subnets",
    var.subnet_name
  )
}

Vergleich mit Datenquellenansätzen

Anbieterfunktionen sind für die ID-Konstruktion und das Parsing vorzuziehen, da sie:

  • Läuft vollständig zur geplanten Zeit ohne Netzwerkanrufe.
  • Fügen Sie keine Ressourcen zum Terraform-Zustand hinzu.
  • Sind deterministisch und erfordern depends_on keine Sortierung.

Verwenden Sie azapi_resource als Datenquelle, wenn Sie die Live-Eigenschaften einer Ressource lesen müssen, nicht nur die ID erstellen oder analysieren.

Nächste Schritte