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:
- Crear un nombre de mascota aleatorio para el nombre del grupo de recursos de Azure mediante random_pet
- Creación de un grupo de recursos de Azure mediante azurerm_resource_group
- Crear una contraseña aleatoria mediante random_password
- Crear un laboratorio en Azure DevTest Labs mediante azurerm_dev_test_lab
- Crear una red virtual en Azure DevTest Labs mediante azurerm_dev_test_virtual_network
- Crear una máquina virtual Windows en Azure DevTest Labs mediante azurerm_dev_test_windows_virtual_machine
Requisitos previos
Implementación del código de Terraform
Nota
El código de ejemplo de este artículo se encuentra en el repositorio de GitHub de Azure Terraform. Puedes ver el archivo de registro que contiene los resultados de las pruebas de las versiones actuales y anteriores de Terraform.
Consulte más artículos y código de ejemplo sobre el uso Terraform para administrar recursos de Azure.
Cree un directorio en el que probar y ejecutar el código de ejemplo de Terraform y conviértalo en el directorio actual.
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" } }
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 }
Cree un archivo denominado
providers.tf
e inserte el siguiente código:terraform { required_version = ">=0.12" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }
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 aterraform apply
. - Si no ha utilizado el parámetro
-out
, llame aterraform apply
sin ningún parámetro.
Verificación de los resultados
Obtén el nombre del recurso de Azure en el que se creó el laboratorio.
resource_group_name=$(terraform output -raw resource_group_name)
Obtén el nombre del laboratorio.
lab_name=$(terraform output -raw lab_name)
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:
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.
- El comando
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