Guida introduttiva: Creare un cluster di macchine virtuali Windows in Azure con Terraform
Si applica a: ✔️ Macchine virtuali Windows
Questo articolo illustra come creare un cluster di macchine virtuali Windows (contenente tre istanze di macchine virtuali Windows) in Azure usando Terraform.
- Creare un valore casuale per il nome del gruppo di risorse di Azure usando random_pet.
- Creare un gruppo di risorse di Azure usando azurerm_resource_group.
- Creare un valore casuale per il nome host della macchina virtuale Windows random_string.
- Creare una password casuale per le macchine virtuali Windows usando random_password.
- Creare una macchina virtuale Windows usando il modulo di calcolo.
- Creare una rete virtuale insieme alla subnet usando il modulo di rete.
Prerequisiti
Implementare il codice Terraform
Nota
Il codice di esempio per questo articolo si trova nel repository GitHub di Azure Terraform. È possibile visualizzare il file di log contenente i risultati del test delle versioni correnti e precedenti di Terraform.
Vedere altri articoli e codice di esempio che illustrano come usare Terraform per gestire le risorse di Azure
Creare una directory in cui testare il codice Terraform di esempio e impostarla come directory corrente.
Creare un file denominato
providers.tf
e inserire il codice seguente:terraform { required_version = ">=1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }
Creare un file denominato
main.tf
e inserire il codice seguente:resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } resource "azurerm_resource_group" "rg" { name = random_pet.rg_name.id location = var.resource_group_location } resource "random_string" "windows_server_vm_hostname" { length = 8 lower = true upper = false special = false } resource "random_pet" "windows_server_public_ip_dns" { prefix = "dns" } resource "random_password" "password" { length = 16 special = true lower = true upper = true numeric = true } # The following module is a Terraform Verified Module. # For more information about Verified Modules, see # https://github.com/azure/terraform-azure-modules/ module "windows_server" { count = 3 # Define 3 Windows Server VMs source = "Azure/compute/azurerm" resource_group_name = azurerm_resource_group.rg.name vnet_subnet_id = module.network.vnet_subnets[0] is_windows_image = true vm_hostname = "vm-${random_string.windows_server_vm_hostname.result}-${count.index}" delete_os_disk_on_termination = true admin_password = random_password.password.result vm_os_simple = "WindowsServer" public_ip_dns = ["${random_pet.windows_server_public_ip_dns.id}-${count.index}"] } # The following module is a Terraform Verified Module. # For more information about Verified Modules, see # https://github.com/azure/terraform-azure-modules/ module "network" { source = "Azure/network/azurerm" resource_group_name = azurerm_resource_group.rg.name version = "5.2.0" subnet_prefixes = ["10.0.1.0/24"] subnet_names = ["subnet1"] use_for_each = true }
Creare un file denominato
variables.tf
e inserire il codice seguente:variable "resource_group_location" { type = string default = "eastus" description = "Location for all resources." } variable "resource_group_name_prefix" { type = string default = "rg" description = "Prefix of the resource group name that's combined with a random value so name is unique in your Azure subscription." }
Creare un file denominato
outputs.tf
e inserire il codice seguente:output "resource_group_name" { value = azurerm_resource_group.rg.name } output "windows_vm_public_names" { value = module.windows_server[*].public_ip_dns_name } output "vm_public_ip_addresses" { value = module.windows_server[*].public_ip_address } output "vm_private_ip_addresses" { value = module.windows_server[*].network_interface_private_ip } output "vm_hostnames" { value = module.windows_server[*].vm_names }
Inizializzare Terraform
Eseguire terraform init per inizializzare la distribuzione di Terraform. Questo comando scarica il provider di Azure necessario per gestire le risorse di Azure.
terraform init -upgrade
Punti principali:
- Il
-upgrade
parametro aggiorna i plug-in del provider necessari alla versione più recente conforme ai vincoli di versione della configurazione.
Creare un piano di esecuzione Terraform
Eseguire terraform plan per creare un piano di esecuzione.
terraform plan -out main.tfplan
Punti principali:
- Il comando
terraform plan
consente di creare un piano di esecuzione, ma non di eseguirlo. 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
-out
facoltativo consente di specificare un file di output per il piano. L'uso del parametro-out
garantisce che il piano esaminato sia esattamente quello che viene applicato. - Per altre informazioni su come rendere persistenti i piani di esecuzione e la sicurezza, vedere la sezione relativa agli avvisi di sicurezza.
Applicare un piano di esecuzione terraform
Eseguire terraform apply per applicare il piano di esecuzione all'infrastruttura cloud.
terraform apply main.tfplan
Punti principali:
- Il comando di esempio
terraform apply
presuppone che sia stato eseguitoterraform plan -out main.tfplan
in precedenza . - Se è stato specificato un nome file diverso per il
-out
parametro , usare lo stesso nome file nella chiamata aterraform apply
. - Se il parametro non è stato usato
-out
, chiamareterraform apply
senza parametri.
Le informazioni sui costi non vengono presentate durante il processo di creazione della macchina virtuale per Terraform, come per il portale di Azure. Per altre informazioni sul funzionamento dei costi per le macchine virtuali, vedere la pagina Panoramica sull'ottimizzazione dei costi.
Verificare i risultati
Ottenere il nome del gruppo di risorse di Azure.
resource_group_name=$(terraform output -raw resource_group_name)
Eseguire az vm list con una query JMESPath per visualizzare i nomi delle macchine virtuali create nel gruppo di risorse.
az vm list \ --resource-group $resource_group_name \ --query "[].{\"VM Name\":name}" -o table
Pulire le risorse
Quando le risorse create tramite Terraform non sono più necessarie, seguire questa procedura:
Eseguire terraform plan e specificare il
destroy
flag.terraform plan -destroy -out main.destroy.tfplan
Punti principali:
- Il comando
terraform plan
consente di creare un piano di esecuzione, ma non di eseguirlo. 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
-out
facoltativo consente di specificare un file di output per il piano. L'uso del parametro-out
garantisce che il piano esaminato sia esattamente quello che viene applicato. - Per altre informazioni su come rendere persistenti i piani di esecuzione e la sicurezza, vedere la sezione relativa agli avvisi di sicurezza.
- 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