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.
I den här artikeln använder du datakällan azapi_resource_list för att lista Azure resurser och filtrera resultat med JMESPath uttryck. Du skapar två lagringskonton och använder azapi_resource_list sedan för att lista och extrahera deras egenskaper.
- Skapa en resursgrupp och två lagringskonton med AzureRM-providern
- Använd
azapi_resource_listför att lista lagringskonton och extrahera deras namn och platser med JMESPath
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:
När du loggar in på Azure-portalen med ett Microsoft-konto används standardprenumerationen för det kontot.
Terraform autentiserar automatiskt med hjälp av information från standardprenumerationen i Azure.
Kör az account show för att verifiera det aktuella Microsoft-kontot och Azure-prenumerationen.
az account show
Alla ändringar du gör via Terraform finns i den azure-prenumeration som visas. Om det är vad du vill kan du hoppa över resten av den här artikeln.
Förstå response_export_values
Attributet response_export_values styr vilka egenskaper som extraheras från API-svaret och görs tillgängliga i output datakällans attribut. Den accepterar antingen en lista eller en karta:
-
Lista: Anger JSON-sökvägar som ska extraheras. Använd
["*"]för att exportera hela svarstexten. - Karta: Använder JMESPath-uttryck för att filtrera och omforma svaret. Nyckeln är namnet på resultatet och värdet är JMESPath-uttrycket.
Kartformuläret rekommenderas när du behöver extrahera specifika fält eller transformera listsvar, eftersom det ger renare, mer användbara utdatavärden.
Utför implementeringen av Terraform-koden
Skapa en katalog där du kan testa Terraform-exempelkoden och göra den till den aktuella katalogen.
Skapa en fil med namnet
providers.tfoch infoga följande kod: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" {}Skapa en fil med namnet
variables.tfoch infoga följande kod: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." }Skapa en fil med namnet
main.tfoch infoga följande kod: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" }
Kör terraform init för att initiera Terraform-distributionen. Det här kommandot laddar ned den Azure-provider som krävs för att hantera dina Azure-resurser.
terraform init -upgrade
Viktiga punkter:
- Parametern
-upgradeuppgraderar nödvändiga provider-plugin-program till den senaste versionen som uppfyller konfigurationens versionsbegränsningar.
Kör terraform plan för att skapa en utförandeplan.
terraform plan -out main.tfplan
Viktiga punkter:
- Kommandot
terraform planskapar en utförandeplan, men utför den inte. I stället avgör den vilka åtgärder som krävs för att skapa den konfiguration som anges i konfigurationsfilerna. Med det här mönstret kan du kontrollera om åtgärdsplanen stämmer överens med dina förväntningar innan du gör några ändringar i faktiska resurser. - Med den valfria parametern
-outkan du ange en utdatafil för planen. Med hjälp av parametern-outser du till att den plan som du har granskat är exakt vad som tillämpas.
Kör terraform apply för att applicera genomförandeplanen på din molninfrastruktur.
terraform apply main.tfplan
Viktiga punkter:
-
terraform applyExempelkommandot förutsätter att du tidigare kördeterraform plan -out main.tfplan. - Om du har angett ett annat filnamn för parametern
-outanvänder du samma filnamn i anropet tillterraform apply. - Om du inte använde parametern
-outanropar duterraform applyutan några parametrar.
Lista resurser med azapi_resource_list
Nu när lagringskontona har skapats lägger du till en datakälla för att visa dem och extrahera egenskaper med hjälp av JMESPath.
Skapa en fil med namnet
list_resources.tfoch infoga följande kod: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" } }Skapa en fil med namnet
outputs.tfoch infoga följande kod: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 }Kör
terraform applyigen för att skapa datakällan och extrahera utdata:terraform apply
Viktiga punkter om azapi_resource_list
- Fältet
typeidentifierar resurstypen och API-versionen som ska listas. - Fältet
parent_idanger omfånget: ett resursgrupps-ID som ska listas i en resursgrupp, ett prenumerations-ID som ska listas över en prenumeration eller ett överordnat resurs-ID för att visa underordnade resurser (till exempel undernät under ett virtuellt nätverk). - Mappningsformen
response_export_valuesanvänder JMESPath-uttryck mot api-råsvaret. API:et för lagringskontolistan returnerar resultat i en matris på den översta nivånvalue, så uttryck börjar medvalue[].
Visa en lista över resurser i olika omfång
parent_id avgör listomfånget. Examples:
# 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 = ["*"]
}
Rensa resurser
Gör följande när du inte längre behöver de resurser som skapats via Terraform:
Kör terraform plan och specificera flaggan
destroy.terraform plan -destroy -out main.destroy.tfplanViktiga punkter:
- Kommandot
terraform planskapar en utförandeplan, men utför den inte. I stället avgör den vilka åtgärder som krävs för att skapa den konfiguration som anges i konfigurationsfilerna. Med det här mönstret kan du kontrollera om åtgärdsplanen stämmer överens med dina förväntningar innan du gör några ändringar i faktiska resurser. - Med den valfria parametern
-outkan du ange en utdatafil för planen. Med hjälp av parametern-outser du till att den plan som du har granskat är exakt vad som tillämpas.
- Kommandot
Kör terraform apply för att tillämpa genomförandeplanen.
terraform apply main.destroy.tfplan
Felsöka Terraform på Azure
Felsök vanliga problem när du använder Terraform på Azure