Snabbstart: Skapa ett Windows VM-kluster i Azure med Terraform

Gäller för: ✔️ Virtuella Windows-datorer

Den här artikeln visar hur du skapar ett kluster för virtuella Windows-datorer (som innehåller tre instanser av virtuella Windows-datorer) i Azure med Terraform.

Förutsättningar

Implementera Terraform-koden

Kommentar

Exempelkoden för den här artikeln finns på Azure Terraform GitHub-lagringsplatsen. Du kan visa loggfilen som innehåller testresultaten från aktuella och tidigare versioner av Terraform.

Se fler artiklar och exempelkod som visar hur du använder Terraform för att hantera Azure-resurser

  1. Skapa en katalog där du kan testa Terraform-exempelkoden och göra den till den aktuella katalogen.

  2. Skapa en fil med namnet providers.tf och infoga följande kod:

    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. Skapa en fil med namnet main.tf och infoga följande kod:

    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. Skapa en fil med namnet variables.tf och infoga följande kod:

    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. Skapa en fil med namnet outputs.tf och infoga följande kod:

    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
    }
    

Initiera Terraform

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 -upgrade uppgraderar nödvändiga provider-plugin-program till den senaste versionen som uppfyller konfigurationens versionsbegränsningar.

Skapa en Terraform-körningsplan

Kör terraform-planen för att skapa en körningsplan.

terraform plan -out main.tfplan

Viktiga punkter:

  • Kommandot terraform plan skapar en körningsplan, men kö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 körningsplanen matchar dina förväntningar innan du gör några ändringar i faktiska resurser.
  • Med den valfria -out parametern kan du ange en utdatafil för planen. Med hjälp av parametern -out ser du till att planen du granskade är exakt vad som tillämpas.
  • Mer information om hur du bevarar körningsplaner och säkerhet finns i avsnittet säkerhetsvarning.

Tillämpa en Terraform-körningsplan

Kör terraform gäller för att tillämpa körningsplanen på din molninfrastruktur.

terraform apply main.tfplan

Viktiga punkter:

  • terraform apply Exempelkommandot förutsätter att du tidigare körde terraform plan -out main.tfplan.
  • Om du har angett ett annat filnamn för parametern -out använder du samma filnamn i anropet till terraform apply.
  • Om du inte använde parametern -out anropar terraform apply du utan några parametrar.

Kostnadsinformation visas inte under processen för att skapa virtuella datorer för Terraform som för Azure-portalen. Mer information om hur kostnaden fungerar för virtuella datorer finns på sidan Översikt över kostnadsoptimering.

Verifiera resultatet

  1. Hämta namnet på Azure-resursgruppen.

    resource_group_name=$(terraform output -raw resource_group_name)
    
  2. Kör az vm list med en JMESPath-fråga för att visa namnen på de virtuella datorer som skapats i resursgruppen.

    az vm list \
      --resource-group $resource_group_name \
      --query "[].{\"VM Name\":name}" -o table
    

Rensa resurser

Gör följande när du inte längre behöver de resurser som skapats via Terraform:

  1. Kör terraform-plan och ange destroy flaggan.

    terraform plan -destroy -out main.destroy.tfplan
    

    Viktiga punkter:

    • Kommandot terraform plan skapar en körningsplan, men kö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 körningsplanen matchar dina förväntningar innan du gör några ändringar i faktiska resurser.
    • Med den valfria -out parametern kan du ange en utdatafil för planen. Med hjälp av parametern -out ser du till att planen du granskade är exakt vad som tillämpas.
    • Mer information om hur du bevarar körningsplaner och säkerhet finns i avsnittet säkerhetsvarning.
  2. Kör terraform tillämpa för att tillämpa körningsplanen.

    terraform apply main.destroy.tfplan
    

Felsöka Terraform i Azure

Felsöka vanliga problem när du använder Terraform i Azure

Nästa steg