Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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_listmůž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.
Nakonfigurujte Terraform: Pokud jste to ještě neudělali, nakonfigurujte Terraform pomocí jedné z následujících možností:
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
Vytvořte adresář, ve kterém otestujete ukázkový kód Terraformu a nastavíte ho jako aktuální adresář.
Vytvořte soubor s názvem
providers.tfa 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" {}Vytvořte soubor s názvem
variables.tfa 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." }Vytvořte soubor s názvem
main.tfa 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
-upgradeaktualizuje 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 planvytvoří 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ý
-outparametr umožňuje zadat výstupní soubor pro plán. Použití parametru-outzajišť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 applyUkázkový příkaz předpokládá, že jste dříve spustiliterraform plan -out main.tfplan. - Pokud jste pro
-outparametr zadali jiný název souboru, použijte stejný název souboru při voláníterraform apply. - Pokud jste parametr nepoužíli
-out, zavolejteterraform applybez 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.
Vytvořte soubor s názvem
list_resources.tfa 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" } }Vytvořte soubor s názvem
outputs.tfa 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 }Spusťte
terraform applyznovu, abyste vytvořili zdroj dat a extrahovali výstupy:terraform apply
Klíčové body týkající se azapi_resource_list
- Pole
typeidentifikuje typ prostředku a verzi rozhraní API, které se mají zobrazit. - Pole
parent_idnastaví 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_valuesve 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í navalue[].
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:
Spusťte terraform plan a zadejte parametr
destroy.terraform plan -destroy -out main.destroy.tfplanklíčové body:
- Příkaz
terraform planvytvoří 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ý
-outparametr umožňuje zadat výstupní soubor pro plán. Použití parametru-outzajišťuje, že vámi zkontrolovaný plán je přesně tím, co bude aplikován.
- Příkaz
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