Dela via


Snabbstart: Skapa ett labb i Azure DevTest Labs med Terraform

Den här artikeln visar hur du använder Terraform för att skapa en virtuell Windows Server 2019 Datacenter-dator i ett labb i Azure DevTest Labs med Terraform.

I den här artikeln kan du se hur du:

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 och köra Terraform-exempelkoden och göra den till den aktuella katalogen.

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

    resource "random_pet" "rg_name" {
      prefix = var.resource_group_name_prefix
    }
    
    resource "random_string" "vm_suffix" {
      length  = 5
      upper   = false
      special = false
      numeric = false
    }
    
    resource "azurerm_resource_group" "rg" {
      name     = random_pet.rg_name.id
      location = var.resource_group_location
    }
    
    resource "random_password" "password" {
      count       = var.password == null ? 1 : 0
      length      = 20
      special     = true
      min_numeric = 1
      min_upper   = 1
      min_lower   = 1
      min_special = 1
    }
    
    locals {
      password = try(random_password.password[0].result, var.password)
    }
    
    resource "azurerm_dev_test_lab" "lab" {
      name                = var.lab_name
      location            = azurerm_resource_group.rg.location
      resource_group_name = azurerm_resource_group.rg.name
    }
    
    resource "azurerm_dev_test_virtual_network" "vnet" {
      name                = "Dtl${var.lab_name}"
      lab_name            = azurerm_dev_test_lab.lab.name
      resource_group_name = azurerm_resource_group.rg.name
    }
    
    resource "azurerm_dev_test_windows_virtual_machine" "vm" {
      name                   = "ExampleVM-${random_string.vm_suffix.result}"
      lab_name               = azurerm_dev_test_lab.lab.name
      lab_subnet_name        = "Dtl${var.lab_name}Subnet"
      resource_group_name    = azurerm_resource_group.rg.name
      location               = azurerm_resource_group.rg.location
      storage_type           = "Standard"
      size                   = var.vm_size
      username               = var.user_name
      password               = local.password
      allow_claim            = false
      lab_virtual_network_id = azurerm_dev_test_virtual_network.vnet.id
    
      gallery_image_reference {
        offer     = "WindowsServer"
        publisher = "MicrosoftWindowsServer"
        sku       = "2019-Datacenter"
        version   = "latest"
      }
    }
    
  3. Skapa en fil med namnet outputs.tf och infoga följande kod:

    output "resource_group_name" {
      value = azurerm_resource_group.rg.name
    }
    
    output "lab_name" {
      value = azurerm_dev_test_lab.lab.name
    }
    
    output "vm_name" {
      value = azurerm_dev_test_windows_virtual_machine.vm.name
    }
    
    output "password" {
      sensitive = true
      value     = local.password
    }
    
  4. Skapa en fil med namnet providers.tf och infoga följande kod:

    terraform {
      required_version = ">=0.12"
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~>3.0"
        }
        random = {
          source  = "hashicorp/random"
          version = "~>3.0"
        }
      }
    }
    provider "azurerm" {
      features {}
    }
    
  5. 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 ID so name is unique in your Azure subscription."
    }
    
    variable "lab_name" {
      type        = string
      description = "The name of the new lab instance to be created"
      default     = "ExampleLab"
    }
    
    variable "vm_size" {
      type        = string
      description = "The size of the vm to be created."
      default     = "Standard_D4_v3"
    }
    
    variable "user_name" {
      type        = string
      description = "The username for the local account that will be created on the new vm."
      default     = "exampleuser"
    }
    
    variable "password" {
      type        = string
      description = "The password for the local account that will be created on the new vm."
      sensitive   = true
      default     = null
    }
    

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.

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.

Verifiera resultatet

  1. Hämta azure-resursnamnet där labbet skapades.

    resource_group_name=$(terraform output -raw resource_group_name)
    
  2. Hämta labbnamnet.

    lab_name=$(terraform output -raw lab_name)
    
  3. Kör listan az lab vm för att lista de virtuella datorerna för labbet som du skapade i den här artikeln.

    az lab vm list --resource-group $resource_group_name \
                   --lab-name $lab_name
    

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