Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Terraform consente di definire, visualizzare in anteprima e distribuire l'infrastruttura cloud. Con Terraform è possibile creare file di configurazione usando la sintassi HCL. La sintassi HCL consente di specificare il provider di servizi cloud, ad esempio Azure, e gli elementi che costituiscono l'infrastruttura cloud. Dopo aver creato i file di configurazione, si crea un piano di esecuzione che consente di visualizzare in anteprima le modifiche dell'infrastruttura prima della distribuzione. Dopo aver verificato le modifiche, è possibile applicare il piano di esecuzione per distribuire l'infrastruttura.
In questo articolo si usa l'origine dati azapi_resource_list per elencare le risorse di Azure e filtrare i risultati con espressioni JMESPath. Si creano due account di archiviazione, quindi si usa azapi_resource_list per elencare ed estrarre le relative proprietà.
- Creare un gruppo di risorse e due account di archiviazione con il provider AzureRM
- Usare
azapi_resource_listper elencare gli account di archiviazione ed estrarre i nomi e le posizioni usando JMESPath
Prerequisiti
- Sottoscrizione di Azure: se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
Configurare Terraform: se non è già stato fatto, configurare Terraform usando una delle opzioni seguenti:
Quando si accede al portale di Azure con un account Microsoft, viene usata la sottoscrizione di Azure predefinita per tale account.
Terraform esegue automaticamente l'autenticazione usando le informazioni della sottoscrizione di Azure predefinita.
Eseguire az account show per verificare l'account Microsoft corrente e la sottoscrizione di Azure.
az account show
Tutte le modifiche apportate tramite Terraform si trovano nella sottoscrizione di Azure visualizzata. Se è questo che vuoi, salta il resto di questo articolo.
Informazioni su response_export_values
L'attributo response_export_values controlla quali proprietà vengono estratte dalla risposta dell'API e rese disponibili nell'attributo dell'origine output dati. Accetta un elenco o una mappa:
-
Elenco: specifica i percorsi JSON da estrarre. Usare
["*"]per esportare il corpo completo della risposta. - Mappa: usa espressioni JMESPath per filtrare e modellare la risposta. La chiave è il nome del risultato e il valore è l'espressione JMESPath.
Il modulo della mappa è preferibile quando è necessario estrarre campi specifici o trasformare le risposte dell'elenco, perché produce valori di output più puliti e utilizzabili.
Implementare il codice Terraform
Creare una directory in cui testare il codice Terraform di esempio e impostarla come directory corrente.
Creare un file denominato
providers.tfe inserire il codice seguente: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" {}Creare un file denominato
variables.tfe inserire il codice seguente: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." }Creare un file denominato
main.tfe inserire il codice seguente: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" }
Per inizializzare la distribuzione di Terraform, eseguire terraform init. Questo comando scarica il provider di Azure necessario per gestire le risorse Azure.
terraform init -upgrade
Punti principali:
- Il parametro
-upgradeaggiorna i plug-in del provider necessari alla versione più recente conforme ai vincoli di versione della configurazione.
Eseguire terraform plan per creare un piano di esecuzione.
terraform plan -out main.tfplan
Punti principali:
- Il comando
terraform plancrea un piano di esecuzione, ma non lo esegue. Determina invece le azioni necessarie per creare la configurazione specificata nei file di configurazione. Questo modello consente di verificare se il piano di esecuzione corrisponde alle aspettative prima di apportare modifiche alle risorse effettive. - Il parametro facoltativo
-outconsente di specificare un file di output per il piano. L'uso del-outparametro garantisce che il piano esaminato sia esattamente quello applicato.
Esegui terraform apply per applicare il piano di esecuzione all'infrastruttura cloud.
terraform apply main.tfplan
Punti principali:
- Il comando
terraform applydi esempio presuppone che in precedenza sia stato eseguitoterraform plan -out main.tfplan. - Se è stato specificato un nome file diverso per il parametro
-out, usare lo stesso nome file nella chiamata aterraform apply. - Se non è stato usato il parametro
-out, chiamareterraform applysenza parametri.
Elencare le risorse con azapi_resource_list
Dopo aver creato gli account di archiviazione, aggiungere un'origine dati per elencarli ed estrarre le proprietà usando JMESPath.
Creare un file denominato
list_resources.tfe inserire il codice seguente: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" } }Creare un file denominato
outputs.tfe inserire il codice seguente: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 }Eseguire
terraform applydi nuovo per creare l'origine dati ed estrarre gli output:terraform apply
Punti chiave su azapi_resource_list
- Il
typecampo identifica il tipo di risorsa e la versione dell'API da elencare. - Il
parent_idcampo imposta l'ambito: un ID del gruppo di risorse da elencare all'interno di un gruppo di risorse, un ID abbonamento da elencare attraverso un abbonamento, o un ID risorsa padre per elencare le risorse figlie, ad esempio le subnet all'interno di una rete virtuale (VNet). - Il formato mappa di
response_export_valuesusa espressioni JMESPath rispetto alla risposta dell'API non elaborata. L'API dell'elenco di account di archiviazione restituisce i risultati in una matrice di livellovaluesuperiore, quindi le espressioni iniziano convalue[].
Elencare le risorse in ambiti diversi
Determina parent_id l'ambito dell'elenco. Esempi:
# 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 = ["*"]
}
Pulire le risorse
Quando le risorse create tramite Terraform non sono più necessarie, seguire questa procedura:
Esegui terraform plan e specifica il flag
destroy.terraform plan -destroy -out main.destroy.tfplanPunti principali:
- Il comando
terraform plancrea un piano di esecuzione, ma non lo esegue. Determina invece le azioni necessarie per creare la configurazione specificata nei file di configurazione. Questo modello consente di verificare se il piano di esecuzione corrisponde alle aspettative prima di apportare modifiche alle risorse effettive. - Il parametro facoltativo
-outconsente di specificare un file di output per il piano. L'uso del-outparametro garantisce che il piano esaminato sia esattamente quello applicato.
- Il comando
Eseguire terraform apply per applicare il piano di esecuzione.
terraform apply main.destroy.tfplan
Risolvere i problemi di Terraform in Azure
Risolvere i problemi comuni relativi all'uso di Terraform in Azure