Поделиться через


Краткое руководство. Создание лаборатории в Azure DevTest Labs с помощью Terraform

В этой статье показано, как использовать Terraform для создания виртуальной машины Центра обработки данных Windows Server 2019 в лаборатории в Azure DevTest Labs с помощью Terraform.

Вы узнаете, как выполнять следующие задачи:

  • Создание случайного имени домашних животных для имени группы ресурсов Azure с помощью random_pet
  • Создание группы ресурсов Azure с помощью azurerm_resource_group
  • Создание случайного пароля с помощью random_password
  • Создание лаборатории в Azure DevTest Labs с помощью azurerm_dev_test_lab
  • Создание виртуальной сети в Azure DevTest Labs с помощью azurerm_dev_test_virtual_network
  • Создание виртуальной машины Windows в Azure DevTest Labs с помощью azurerm_dev_test_windows_virtual_machine

Необходимые компоненты

Реализация кода Terraform

Примечание.

Пример кода для этой статьи находится в репозитории Azure Terraform GitHub. Вы можете просмотреть файл журнала, содержащий результаты теста из текущих и предыдущих версий Terraform.

См. другие статьи и примеры кода, в которых показано, как использовать Terraform для управления ресурсами Azure.

  1. Создайте каталог для тестирования и выполнения примера кода Terraform и сделайте его текущим каталогом.

  2. Создайте файл с именем main.tf и вставьте следующий код:

    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. Создайте файл с именем outputs.tf и вставьте следующий код:

    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. Создайте файл с именем providers.tf и вставьте следующий код:

    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. Создайте файл с именем variables.tf и вставьте следующий код:

    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
    }
    

Инициализация Terraform

Запустите terraform init, чтобы инициализировать развертывание Terraform. Эта команда скачивает поставщик Azure, необходимый для управления ресурсами Azure.

terraform init -upgrade

Основные моменты:

  • Параметр -upgrade обновляет необходимые подключаемые модули поставщика до последней версии, которая соответствует ограничениям версии конфигурации.

Создание плана выполнения Terraform

Чтобы создать план выполнения, выполните terraform plan.

terraform plan -out main.tfplan

Основные моменты:

  • Команда terraform plan создает план выполнения, но не выполняет его. Вместо этого она определяет, какие действия необходимы для создания конфигурации, заданной в файлах конфигурации. Этот шаблон позволяет проверить, соответствует ли план выполнения вашим ожиданиям, прежде чем вы начнете вносить изменения в фактические ресурсы.
  • Необязательный параметр -out позволяет указать выходной файл для плана. Использование параметра -out гарантирует, что проверяемый план полностью соответствует применяемому.

Применение плана выполнения Terraform

Выполните terraform apply, чтобы применить план выполнения к вашей облачной инфраструктуре.

terraform apply main.tfplan

Основные моменты:

  • В примере terraform apply команды предполагается, что вы ранее выполнили.terraform plan -out main.tfplan
  • Если для параметра -out указано другое имя файла, используйте то же имя в вызове к terraform apply.
  • Если вы не использовали параметр -out, вызовите terraform apply без параметров.

Проверка результатов

  1. Получите имя ресурса Azure, в котором была создана лаборатория.

    resource_group_name=$(terraform output -raw resource_group_name)
    
  2. Получите имя лаборатории.

    lab_name=$(terraform output -raw lab_name)
    
  3. Запустите az lab vm list , чтобы перечислить виртуальные машины для лаборатории, созданной в этой статье.

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

Очистка ресурсов

Если вам больше не нужны ресурсы, созданные через Terraform, выполните следующие действия:

  1. Выполните команду terraform plan и укажите флаг destroy.

    terraform plan -destroy -out main.destroy.tfplan
    

    Основные моменты:

    • Команда terraform plan создает план выполнения, но не выполняет его. Вместо этого она определяет, какие действия необходимы для создания конфигурации, заданной в файлах конфигурации. Этот шаблон позволяет проверить, соответствует ли план выполнения вашим ожиданиям, прежде чем вы начнете вносить изменения в фактические ресурсы.
    • Необязательный параметр -out позволяет указать выходной файл для плана. Использование параметра -out гарантирует, что проверяемый план полностью соответствует применяемому.
  2. Выполните команду terraform apply, чтобы применить план выполнения.

    terraform apply main.destroy.tfplan
    

Устранение неполадок с Terraform в Azure

Устранение распространенных проблем при использовании Terraform в Azure

Следующие шаги