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.

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

  1. Creare una directory in cui testare il codice Terraform di esempio e impostarla come directory corrente.

  2. 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 {}
    }
    
  3. 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
    }
    
  4. 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."
    }
    
  5. 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 eseguito terraform plan -out main.tfplanin precedenza .
  • Se è stato specificato un nome file diverso per il -out parametro , usare lo stesso nome file nella chiamata a terraform apply.
  • Se il parametro non è stato usato -out , chiamare terraform 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

  1. Ottenere il nome del gruppo di risorse di Azure.

    resource_group_name=$(terraform output -raw resource_group_name)
    
  2. 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:

  1. 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.
  2. 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

Passaggi successivi