Terraform su Azure
Configuri il provider AzureRM di Terraform, scriva un piano di infrastruttura di base e comprenda quando preferire Terraform agli strumenti ARM/Bicep nativi.
Terraform su Azure è una lezione Azure Fundamentals gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Azure Fundamentals, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Azure Fundamentals include 4 lezioni in totale.
Che cos'è Terraform e perché Azure?
Terraform è uno strumento open source di Infrastructure as Code sviluppato da HashiCorp. A differenza di Bicep, Terraform è indipendente dal cloud: una singola codebase Terraform può gestire contemporaneamente risorse in Azure, AWS, GCP e molti altri provider. In Azure, Terraform usa il provider AzureRM per interagire con l'API ARM, rappresentando una scelta diffusa per le organizzazioni multi-cloud.
Il provider Terraform AzureRM
Il provider AzureRM è un plugin che Terraform scarica e utilizza per tradurre la configurazione Terraform in chiamate all'API ARM. È gestito da HashiCorp e Microsoft ed è il metodo ufficiale per gestire le risorse Azure con Terraform. Configuri il provider con l'ID della sottoscrizione e il metodo di autenticazione, quindi esegua terraform init per scaricarlo.
# main.tf — configure the AzureRM provider
terraform {
required_providers {
azurerm = {
source = 'hashicorp/azurerm'
version = '~> 3.0'
}
}
}
provider 'azurerm' {
features {}
subscription_id = var.subscription_id
}Struttura dei file Terraform
Un tipico progetto Terraform per Azure è suddiviso in diversi file .tf: main.tf contiene le dichiarazioni delle risorse, variables.tf definisce le variabili di input, outputs.tf definisce i valori di output e terraform.tfvars fornisce i valori delle variabili per un ambiente specifico. Terraform carica automaticamente tutti i file .tf nella directory corrente, quindi la suddivisione in più file serve esclusivamente a migliorare la leggibilità.
# variables.tf
variable 'resource_group_name' {
description = 'Name of the resource group'
type = string
default = 'my-rg'
}
variable 'location' {
description = 'Azure region'
type = string
default = 'eastus'
}Dichiarazione delle risorse Azure
In Terraform, le risorse Azure vengono dichiarate usando blocchi resource. Il tipo di blocco è resource, seguito dal tipo di risorsa AzureRM, ad esempio 'azurerm_resource_group', e da un nome locale usato per farvi riferimento nella configurazione. I nomi delle proprietà in Terraform usano snake_case anziché camelCase o PascalCase, utilizzati nel JSON ARM.
# main.tf — create a resource group and storage account
resource 'azurerm_resource_group' 'main' {
name = var.resource_group_name
location = var.location
}
resource 'azurerm_storage_account' 'storage' {
name = 'mystorageaccount'
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
account_tier = 'Standard'
account_replication_type = 'LRS'
tags = {
environment = 'dev'
}
}Il flusso di lavoro Terraform: Init, Plan, Apply
Il flusso di lavoro principale di Terraform prevede tre passaggi. terraform init scarica il provider AzureRM e configura il backend. terraform plan confronta la configurazione con lo stato corrente e mostra un diff di ciò che verrà creato, modificato o eliminato, in modo simile al comando what-if di ARM. terraform apply esegue il piano e aggiorna Azure affinché corrisponda alla configurazione.
# Step 1: Initialise the project and download providers
terraform init
# Step 2: Preview changes (shows + create, ~ update, - destroy)
terraform plan -out=tfplan
# Step 3: Apply the plan
terraform apply tfplan
# Destroy all managed resources
terraform destroyStato di Terraform
Terraform mantiene un file di stato (terraform.tfstate) che registra lo stato corrente di tutte le risorse gestite e le associa alla configurazione. Questo file consente a Terraform di rilevare la divergenza tra ciò che è configurato e ciò che esiste in Azure. Negli ambienti di team, archivi lo stato in remoto in un Azure Storage Account (un backend Terraform), in modo che tutti i membri del team condividano lo stesso file di stato.
# Configure remote state in Azure Blob Storage
terraform {
backend 'azurerm' {
resource_group_name = 'tfstate-rg'
storage_account_name = 'tfstateaccount'
container_name = 'tfstate'
key = 'prod.terraform.tfstate'
}
}Autenticazione ad Azure in Terraform
Terraform supporta diversi metodi di autenticazione per Azure. Durante lo sviluppo locale, usi az login (autenticazione tramite Azure CLI): Terraform rileva automaticamente le credenziali. Nelle pipeline CI/CD, usi un Service Principal con un segreto client o un certificato, passato tramite variabili d'ambiente. Per agenti o macchine virtuali ospitati in Azure, usi una Managed Identity per ottenere l'autenticazione più sicura e senza segreti.
# Option 1: Azure CLI (local dev)
az login
terraform plan
# Option 2: Service principal via environment variables
export ARM_CLIENT_ID='00000000-0000-0000-0000-000000000000'
export ARM_CLIENT_SECRET='your-client-secret'
export ARM_SUBSCRIPTION_ID='00000000-0000-0000-0000-000000000000'
export ARM_TENANT_ID='00000000-0000-0000-0000-000000000000'
terraform planModuli Terraform per il riutilizzo
Come i moduli Bicep, i moduli Terraform consentono di raggruppare e riutilizzare pattern d'infrastruttura. Un modulo è una directory contenente file .tf. È possibile farvi riferimento con un blocco module, passare gli input tramite variables e utilizzare gli output. Il Terraform Registry ospita centinaia di moduli Azure della community e verificati che può usare direttamente, ad esempio il modulo di rete AzureRM.
# Use a module from the Terraform Registry
module 'vnet' {
source = 'Azure/vnet/azurerm'
version = '4.0.0'
resource_group_name = azurerm_resource_group.main.name
vnet_location = azurerm_resource_group.main.location
use_for_each = true
address_space = ['10.0.0.0/16']
subnet_prefixes = ['10.0.1.0/24', '10.0.2.0/24']
subnet_names = ['web', 'app']
}Quando scegliere Terraform o Bicep
Scelga Bicep quando la sua organizzazione usa esclusivamente Azure e desidera la massima integrazione con le nuove funzionalità di Azure (Bicep supporta i nuovi tipi di risorsa fin dal primo giorno). Scelga Terraform quando gestisce risorse su più provider cloud, ha bisogno del vasto ecosistema di moduli della community o preferisce la sintassi HCL e la toolchain HashiCorp. Entrambi sono validi per distribuzioni esclusivamente in Azure: spesso è la preferenza dell'organizzazione a determinare la scelta.
Importazione delle risorse esistenti
Se le risorse esistevano già in Azure prima che iniziasse a usare Terraform, può portarle sotto la gestione di Terraform usando terraform import. Questo comando recupera lo stato corrente della risorsa e lo aggiunge al file di stato di Terraform. Dopo l'importazione, deve scrivere manualmente il blocco di configurazione corrispondente in modo che corrisponda alla risorsa importata, quindi eseguire terraform plan per verificare che non vi siano differenze.
# Import an existing resource group into Terraform state
terraform import \
azurerm_resource_group.main \
'/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/existing-rg'
# Terraform 1.5+ supports import blocks in configuration
import {
to = azurerm_resource_group.main
id = '/subscriptions/00000000.../resourceGroups/existing-rg'
}Best practice di Terraform in Azure
Segua queste best practice per Terraform in Azure: archivi lo stato in remoto in Azure Blob Storage con il blocco dello stato abilitato, usi workspace o file di stato separati per ambienti diversi, non esegua mai il commit dei segreti nel controllo del codice sorgente: usi invece le origini dati di Azure Key Vault, fissi le versioni del provider per evitare modifiche incompatibili e esegua Terraform in una pipeline CI/CD (Azure Pipelines o GitHub Actions) con passaggi di approvazione del piano.
Verifica rapida
Verifichi la comprensione dei concetti di Microsoft Azure Fundamentals (AZ-900) trattati in questa lezione.
Riepilogo della lezione
In questa lezione ha imparato che Terraform è uno strumento IaC indipendente dal cloud che usa il provider AzureRM per gestire le risorse Azure; il flusso di lavoro init, plan, apply consente distribuzioni sicure e prevedibili; inoltre, lo stato remoto in Azure Blob Storage è essenziale per la collaborazione tra team. Prossimamente esploreremo la creazione di piani App Service e Web App.
Impara Azure Fundamentals con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 30
- Lezioni
- 120
Domande Frequenti
La lezione «Terraform su Azure» è gratuita?
Sì — il testo completo di «Terraform su Azure» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Azure Fundamentals, passa a CoddyKit PRO. Il corso Azure Fundamentals include 4 lezioni in totale.
Cosa imparerò in «Terraform su Azure»?
Configuri il provider AzureRM di Terraform, scriva un piano di infrastruttura di base e comprenda quando preferire Terraform agli strumenti ARM/Bicep nativi. Eserciti Azure Fundamentals con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Azure Fundamentals?
Non è richiesta alcuna esperienza precedente. Azure Fundamentals su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Terraform su Azure»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Azure Fundamentals?
Sì. Ogni lezione Azure Fundamentals include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Come funziona Azure Resource Manager
- Scrittura di template ARM
- Bicep: IaC moderno per Azure
- Terraform su Azure