Azure Virtual Desktop Network-Instellingen configureren met Terraform

Artikel getest met de volgende versies van Terraform en Terraform-providers:

Terraform maakt de definitie, preview en implementatie van de cloudinfrastructuur mogelijk. Met Behulp van Terraform maakt u configuratiebestanden met behulp van de HCL-syntaxis. Met de HCL-syntaxis kunt u de cloudprovider opgeven, zoals Azure, en de elementen waaruit uw cloudinfrastructuur bestaat. Nadat u uw configuratiebestanden hebt gemaakt, maakt u een uitvoeringsplan waarmee u een voorbeeld van uw infrastructuurwijzigingen kunt bekijken voordat ze worden geïmplementeerd. Zodra u de wijzigingen hebt gecontroleerd, past u het uitvoeringsplan toe om de infrastructuur te implementeren.

Dit artikel bevat een overzicht van het gebruik van Terraform voor het configureren van de netwerkinstellingen voor Azure Virtual Desktop.

In dit artikel leert u het volgende:

  • Terraform gebruiken om een virtueel netwerk te maken
  • Terraform gebruiken om een subnet te maken
  • Terraform gebruiken om een NSG te maken
  • Peering van het Azure Virtual Desktop-vnet met hub-vnet

1. Uw omgeving configureren

  • Azure-abonnement: als u nog geen abonnement op Azure hebt, maakt u een gratis Azure-account aan voordat u begint.

2. De Terraform-code implementeren

  1. Maak een map waarin u de Terraform-voorbeeldcode wilt testen en de huidige map kunt maken.

  2. Maak een bestand met de naam providers.tf en voeg de volgende code in:

    terraform {
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~>2.0"
        }
        azuread = {
          source = "hashicorp/azuread"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
  3. Maak een bestand met de naam main.tf en voeg de volgende code in:

    resource "azurerm_virtual_network" "vnet" {
      name                = "${var.prefix}-VNet"
      address_space       = var.vnet_range
      dns_servers         = var.dns_servers
      location            = var.deploy_location
      resource_group_name = var.rg_name
      depends_on          = [azurerm_resource_group.rg]
    }
    
    resource "azurerm_subnet" "subnet" {
      name                 = "default"
      resource_group_name  = var.rg_name
      virtual_network_name = azurerm_virtual_network.vnet.name
      address_prefixes     = var.subnet_range
      depends_on           = [azurerm_resource_group.rg]
    }
    
    resource "azurerm_network_security_group" "nsg" {
      name                = "${var.prefix}-NSG"
      location            = var.deploy_location
      resource_group_name = var.rg_name
      security_rule {
        name                       = "HTTPS"
        priority                   = 1001
        direction                  = "Inbound"
        access                     = "Allow"
        protocol                   = "Tcp"
        source_port_range          = "*"
        destination_port_range     = "443"
        source_address_prefix      = "*"
        destination_address_prefix = "*"
      }
      depends_on = [azurerm_resource_group.rg]
    }
    
    resource "azurerm_subnet_network_security_group_association" "nsg_assoc" {
      subnet_id                 = azurerm_subnet.subnet.id
      network_security_group_id = azurerm_network_security_group.nsg.id
    }
    
    data "azurerm_virtual_network" "ad_vnet_data" {
      name                = var.ad_vnet
      resource_group_name = var.ad_rg
    }
    
    resource "azurerm_virtual_network_peering" "peer1" {
      name                      = "peer_avdspoke_ad"
      resource_group_name       = var.rg_name
      virtual_network_name      = azurerm_virtual_network.vnet.name
      remote_virtual_network_id = data.azurerm_virtual_network.ad_vnet_data.id
    }
    resource "azurerm_virtual_network_peering" "peer2" {
      name                      = "peer_ad_avdspoke"
      resource_group_name       = var.ad_rg
      virtual_network_name      = var.ad_vnet
      remote_virtual_network_id = azurerm_virtual_network.vnet.id
    }
    
  4. Maak een bestand met de naam variables.tf en voeg de volgende code in:

variable "resource_group_location" {
  default     = "eastus"
  description = "Location of the resource group."
}

variable "rg_name" {
  type        = string
  default     = "rg-avd-resources"
  description = "Name of the Resource group in which to deploy service objects"
}

variable "rg_shared_name" {
  type        = string
  default     = "rg-shared-resources"
  description = "Name of the Resource group in which to deploy shared resources"
}

variable "deploy_location" {
  type        = string
  default     = "eastus"
  description = "The Azure Region in which all resources in this example should be created."
}

variable "ad_vnet" {
  type        = string
  default     = "infra-network"
  description = "Name of domain controller vnet"
}

variable "dns_servers" {
  type        = list(string)
  default     = ["10.0.1.4", "168.63.129.16"]
  description = "Custom DNS configuration"
}

variable "vnet_range" {
  type        = list(string)
  default     = ["10.2.0.0/16"]
  description = "Address range for deployment VNet"
}
variable "subnet_range" {
  type        = list(string)
  default     = ["10.2.0.0/24"]
  description = "Address range for session host subnet"
}

variable "prefix" {
  type        = string
  default     = "avdtf"
  description = "Prefix of the name of the AVD machine(s)"
}
  1. Maak een bestand met de naam output.tf en voeg de volgende code in:
output "location" {
  description = "The Azure region"
  value       = azurerm_resource_group.rg.location
}

output "dnsservers" {
  description = "Custom DNS configuration"
  value       = azurerm_virtual_network.vnet.dns_servers
}

output "vnetrange" {
  description = "Address range for deployment vnet"
  value       = azurerm_virtual_network.vnet.address_space
}

3. Terraform initialiseren

Voer terraform init uit om de Terraform-implementatie te initialiseren. Met deze opdracht wordt de Azure-provider gedownload die is vereist voor het beheren van uw Azure-resources.

terraform init -upgrade

Belangrijkste punten:

  • Met -upgrade de parameter worden de benodigde providerinvoegtoepassingen bijgewerkt naar de nieuwste versie die voldoet aan de versiebeperkingen van de configuratie.

4. Een Terraform-uitvoeringsplan maken

Voer terraform-plan uit om een uitvoeringsplan te maken.

terraform plan -out main.tfplan

Belangrijkste punten:

  • De terraform plan opdracht maakt een uitvoeringsplan, maar voert het niet uit. In plaats daarvan wordt bepaald welke acties nodig zijn om de configuratie te maken die is opgegeven in uw configuratiebestanden. Met dit patroon kunt u controleren of het uitvoeringsplan aan uw verwachtingen voldoet voordat u wijzigingen aanbrengt in de werkelijke resources.
  • Met de optionele -out parameter kunt u een uitvoerbestand voor het plan opgeven. Door de -out parameter te gebruiken, zorgt u ervoor dat het plan dat u hebt gecontroleerd precies wordt toegepast.

5. Een Terraform-uitvoeringsplan toepassen

Terraform uitvoeren is van toepassing om het uitvoeringsplan toe te passen op uw cloudinfrastructuur.

terraform apply main.tfplan

Belangrijkste punten:

  • Bij de voorbeeldopdracht terraform apply wordt ervan uitgegaan dat u eerder hebt uitgevoerd terraform plan -out main.tfplan.
  • Als u een andere bestandsnaam voor de -out parameter hebt opgegeven, gebruikt u diezelfde bestandsnaam in de aanroep naar terraform apply.
  • Als u de parameter niet hebt gebruikt, roept terraform apply u deze -out aan zonder parameters.

6. Controleer de resultaten

  1. Selecteer Azure Virtual Desktop in azure Portal.
  2. Selecteer Hostgroepen en vervolgens de naam van de gemaakte poolresource.
  3. Selecteer Sessiehosts en controleer vervolgens of de sessiehost wordt vermeld.

7. Resources opschonen

Voer de volgende stappen uit wanneer u de resources die zijn gemaakt via Terraform niet meer nodig hebt:

  1. Voer terraform-plan uit en geef de destroy vlag op.

    terraform plan -destroy -out main.destroy.tfplan
    

    Belangrijkste punten:

    • De terraform plan opdracht maakt een uitvoeringsplan, maar voert het niet uit. In plaats daarvan wordt bepaald welke acties nodig zijn om de configuratie te maken die is opgegeven in uw configuratiebestanden. Met dit patroon kunt u controleren of het uitvoeringsplan aan uw verwachtingen voldoet voordat u wijzigingen aanbrengt in de werkelijke resources.
    • Met de optionele -out parameter kunt u een uitvoerbestand voor het plan opgeven. Door de -out parameter te gebruiken, zorgt u ervoor dat het plan dat u hebt gecontroleerd precies wordt toegepast.
  2. Terraform uitvoeren is van toepassing om het uitvoeringsplan toe te passen.

    terraform apply main.destroy.tfplan
    

Problemen met Terraform in Azure oplossen

Veelvoorkomende problemen oplossen bij het gebruik van Terraform in Azure

Volgende stappen