Rychlý průvodce: Výpis prostředků Azure pomocí poskytovatele Terraformu AzAPI

Terraform umožňuje definovat, prohlížet a nasazovat cloudovou infrastrukturu. Pomocí Terraformu vytvoříte konfigurační soubory pomocí syntaxe HCL. Syntaxe seznamu HCL umožňuje zadat poskytovatele cloudu, například Azure, a prvky, které tvoří vaši cloudovou infrastrukturu. Po vytvoření konfiguračních souborů vytvoříte plán provádění , který vám umožní zobrazit náhled změn infrastruktury před jejich nasazením. Jakmile ověříte změny, použijete plán provádění k nasazení infrastruktury.

V tomto článku použijete zdroj dat azapi_resource_list k výpisu Azure prostředků a filtrování výsledků pomocí výrazů JMESPath. Vytvoříte dva účty úložiště a pak pomocí azapi_resource_list vypíšete a extrahujete jejich vlastnosti.

  • Vytvoření skupiny prostředků a dvou účtů úložiště pomocí poskytovatele AzureRM
  • Pomocí azapi_resource_list můžete vypsat účty úložiště a extrahovat jejich názvy a umístění pomocí JMESPath.

Předpoklady

  • Předplatné Azure: Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.

Když se přihlásíte k webu Azure Portal pomocí účtu Microsoft, použije se výchozí předplatné Azure pro tento účet.

Terraform se automaticky ověřuje pomocí informací z výchozího předplatného Azure.

Spuštěním příkazu az account show ověřte aktuální účet Microsoft a předplatné Azure.

az account show

Všechny změny, které provedete přes Terraform, se nacházejí v zobrazeném předplatném Azure. Pokud chcete, přeskočte zbytek tohoto článku.

Rozumět response_export_values

Atribut response_export_values určuje, které vlastnosti se extrahují z odpovědi rozhraní API a zpřístupní se v atributu output zdroje dat. Přijímá buď seznam, nebo mapu:

  • Seznam: Určuje cesty JSON k extrakci. Slouží ["*"] k exportu celého textu odpovědi.
  • Mapa: Používá výrazy JMESPath k filtrování a přetváření odpovědi. Klíč je název výsledku a hodnota je výraz JMESPath.

Formulář mapy je upřednostňovaný, pokud potřebujete extrahovat konkrétní pole nebo transformovat odpovědi seznamu, protože vytváří čistější a lépe použitelné výstupní hodnoty.

Implementace kódu Terraformu

  1. Vytvořte adresář, ve kterém otestujete ukázkový kód Terraformu a nastavíte ho jako aktuální adresář.

  2. Vytvořte soubor s názvem providers.tf a vložte následující kód:

    terraform {
      required_providers {
        azapi = {
          source  = "Azure/azapi"
          version = "~> 2.0"
        }
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~> 4.0"
        }
        random = {
          source  = "hashicorp/random"
          version = "~> 3.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
    provider "azapi" {}
    
  3. Vytvořte soubor s názvem variables.tf a vložte následující kód:

    variable "resource_group_location" {
      type        = string
      default     = "eastus"
      description = "Location of the resource group."
    }
    
    variable "resource_group_name_prefix" {
      type        = string
      default     = "rg"
      description = "Prefix of the resource group name that's combined with a random value to create a unique name."
    }
    
  4. Vytvořte soubor s názvem main.tf a vložte následující kód:

    resource "random_pet" "rg_name" {
      prefix = var.resource_group_name_prefix
    }
    
    resource "random_string" "storage_suffix" {
      length  = 8
      upper   = false
      special = false
    }
    
    resource "azurerm_resource_group" "example" {
      location = var.resource_group_location
      name     = random_pet.rg_name.id
    }
    
    resource "azurerm_storage_account" "example" {
      count                    = 2
      name                     = "st${random_string.storage_suffix.result}${count.index}"
      resource_group_name      = azurerm_resource_group.example.name
      location                 = azurerm_resource_group.example.location
      account_tier             = "Standard"
      account_replication_type = "LRS"
    }
    

Spusťte terraform init a inicializujte nasazení Terraformu. Tento příkaz stáhne poskytovatele Azure potřebného ke správě vašich Azure prostředků.

terraform init -upgrade

klíčové body:

  • Parametr -upgrade aktualizuje potřebné pluginy poskytovatele na nejnovější verzi, která odpovídá verzním omezením konfigurace.

Spusťte terraform plan pro vytvoření plánu provedení.

terraform plan -out main.tfplan

klíčové body:

  • Příkaz terraform plan vytvoří plán provádění, ale nespustí ho. Místo toho určuje, jaké akce jsou nezbytné k vytvoření konfigurace zadané v konfiguračních souborech. Tento model umožňuje ověřit, jestli plán provádění odpovídá vašim očekáváním, než provede jakékoli změny skutečných prostředků.
  • Volitelný -out parametr umožňuje zadat výstupní soubor pro plán. Použití parametru -out zajišťuje, že vámi zkontrolovaný plán je přesně tím, co bude aplikován.

Spusťte terraform apply a aplikujte plán provedení do vaší cloudové infrastruktury.

terraform apply main.tfplan

klíčové body:

  • terraform apply Ukázkový příkaz předpokládá, že jste dříve spustili terraform plan -out main.tfplan.
  • Pokud jste pro -out parametr zadali jiný název souboru, použijte stejný název souboru při volání terraform apply.
  • Pokud jste parametr nepoužíli -out , zavolejte terraform apply bez parametrů.

Výpis zdrojů pomocí azapi_resource_list

Teď, když jsou vytvořené účty úložiště, přidejte zdroj dat pro jejich zobrazení a k extrahování vlastností pomocí JMESPath.

  1. Vytvořte soubor s názvem list_resources.tf a vložte následující kód:

    data "azapi_resource_list" "storage_accounts" {
      type      = "Microsoft.Storage/storageAccounts@2023-01-01"
      parent_id = azurerm_resource_group.example.id
    
      # Use JMESPath expressions to extract specific fields from the response.
      # The API returns a list of resources in a top-level "value" array.
      response_export_values = {
        "names"     = "value[].name"
        "locations" = "value[].location"
        "skus"      = "value[].sku.name"
      }
    }
    
  2. Vytvořte soubor s názvem outputs.tf a vložte následující kód:

    output "resource_group_name" {
      value = azurerm_resource_group.example.name
    }
    
    output "storage_account_names" {
      value = data.azapi_resource_list.storage_accounts.output.names
    }
    
    output "storage_account_locations" {
      value = data.azapi_resource_list.storage_accounts.output.locations
    }
    
    output "storage_account_skus" {
      value = data.azapi_resource_list.storage_accounts.output.skus
    }
    
  3. Spusťte terraform apply znovu, abyste vytvořili zdroj dat a extrahovali výstupy:

    terraform apply
    

Klíčové body týkající se azapi_resource_list

  • Pole type identifikuje typ prostředku a verzi rozhraní API, které se mají zobrazit.
  • Pole parent_id nastaví obor: ID skupiny prostředků, které se má vypsat v rámci skupiny prostředků, ID předplatného, které se má vypsat v rámci předplatného, nebo nadřazené ID prostředku pro vypsání podřízených prostředků (například podsítě v rámci virtuální sítě).
  • response_export_values ve formě mapy používá výrazy JMESPath proti surové odpovědi API. Rozhraní API seznamu účtů úložiště vrátí výsledky v poli nejvyšší úrovně value, takže výrazy začínají na value[].

Výpis prostředků v různých oborech

parent_id určuje rozsah výpisu. Příklady:

# List all storage accounts in a subscription
data "azapi_resource_list" "all_storage" {
  type      = "Microsoft.Storage/storageAccounts@2023-01-01"
  parent_id = "/subscriptions/${var.subscription_id}"
  response_export_values = {
    "names" = "value[].name"
  }
}

# List subnets in a virtual network (child resource listing)
data "azapi_resource_list" "subnets" {
  type      = "Microsoft.Network/virtualNetworks/subnets@2023-11-01"
  parent_id = azurerm_virtual_network.example.id
  response_export_values = ["*"]
}

Vyčistěte zdroje

Pokud už prostředky vytvořené přes Terraform nepotřebujete, proveďte následující kroky:

  1. Spusťte terraform plan a zadejte parametr destroy.

    terraform plan -destroy -out main.destroy.tfplan
    

    klíčové body:

    • Příkaz terraform plan vytvoří plán provádění, ale nespustí ho. Místo toho určuje, jaké akce jsou nezbytné k vytvoření konfigurace zadané v konfiguračních souborech. Tento model umožňuje ověřit, jestli plán provádění odpovídá vašim očekáváním, než provede jakékoli změny skutečných prostředků.
    • Volitelný -out parametr umožňuje zadat výstupní soubor pro plán. Použití parametru -out zajišťuje, že vámi zkontrolovaný plán je přesně tím, co bude aplikován.
  2. Spusťte terraform apply pro aplikaci prováděcího plánu.

    terraform apply main.destroy.tfplan
    

Řešení potíží s Terraformem v Azure

Řešení běžných problémů při používání Terraformu v Azure

Další kroky