Share via


Inicio rápido: crear un laboratorio en Azure DevTest Labs mediante Terraform

En este artículo se muestra cómo usar Terraform para crear una máquina virtual de Windows Server 2019 Datacenter en un laboratorio dentro de Azure DevTest Labs mediante Terraform.

En este artículo aprenderá a:

Requisitos previos

Implementación del código de Terraform

  1. Cree un directorio en el que probar y ejecutar el código de ejemplo de Terraform y conviértalo en el directorio actual.

  2. Cree un archivo denominado main.tf e inserte el siguiente código:

    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. Cree un archivo denominado outputs.tf e inserte el siguiente código:

    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. Cree un archivo denominado providers.tf e inserte el siguiente código:

    terraform {
      required_version = ">=0.12"
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~>2.0"
        }
        random = {
          source  = "hashicorp/random"
          version = "~>3.0"
        }
      }
    }
    provider "azurerm" {
      features {}
    }
    
  5. Cree un archivo denominado variables.tf e inserte el siguiente código:

    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
    }
    

Inicialización de Terraform

Para inicializar la implementación de Terraform, ejecute terraform init. Este comando descarga el proveedor de Azure necesario para administrar los recursos de Azure.

terraform init -upgrade

Puntos clave:

  • El parámetro -upgrade actualiza los complementos de proveedor necesarios a la versión más reciente que cumpla con las restricciones de versión de la configuración.

Creación de un plan de ejecución de Terraform

Ejecute terraform plan para crear un plan de ejecución.

terraform plan -out main.tfplan

Puntos clave:

  • El comando terraform plan crea un plan de ejecución, pero no lo ejecuta. En su lugar, determina qué acciones son necesarias para crear la configuración especificada en los archivos de configuración. Este patrón le permite comprobar si el plan de ejecución coincide con sus expectativas antes de realizar cambios en los recursos reales.
  • El parámetro -out opcional permite especificar un archivo de salida para el plan. El uso del parámetro -out garantiza que el plan que ha revisado es exactamente lo que se aplica.

Aplicación de un plan de ejecución de Terraform

Ejecute terraform apply para aplicar el plan de ejecución a su infraestructura en la nube.

terraform apply main.tfplan

Puntos clave:

  • El comando terraform apply de ejemplo asume que ejecutó terraform plan -out main.tfplan previamente.
  • Si especificó un nombre de archivo diferente para el parámetro -out, use ese mismo nombre de archivo en la llamada a terraform apply.
  • Si no ha utilizado el parámetro -out, llame a terraform apply sin ningún parámetro.

Verificación de los resultados

  1. Obtén el nombre del recurso de Azure en el que se creó el laboratorio.

    resource_group_name=$(terraform output -raw resource_group_name)
    
  2. Obtén el nombre del laboratorio.

    lab_name=$(terraform output -raw lab_name)
    
  3. Ejecuta az lab vm list para enumerar las máquinas virtuales del laboratorio que creaste en este artículo.

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

Limpieza de recursos

Cuando ya no necesite los recursos creados a través de Terraform, realice los pasos siguientes:

  1. Ejecute el comando terraform plan y especifique la marca destroy.

    terraform plan -destroy -out main.destroy.tfplan
    

    Puntos clave:

    • El comando terraform plan crea un plan de ejecución, pero no lo ejecuta. En su lugar, determina qué acciones son necesarias para crear la configuración especificada en los archivos de configuración. Este patrón le permite comprobar si el plan de ejecución coincide con sus expectativas antes de realizar cambios en los recursos reales.
    • El parámetro -out opcional permite especificar un archivo de salida para el plan. El uso del parámetro -out garantiza que el plan que ha revisado es exactamente lo que se aplica.
  2. Ejecute terraform apply para aplicar el plan de ejecución.

    terraform apply main.destroy.tfplan
    

Solución de problemas de Terraform en Azure

Solución de problemas comunes al usar Terraform en Azure

Pasos siguientes