使用 Terraform 設定 Azure 虛擬桌面

文章使用下列 Terraform 和 Terraform 提供者版本進行測試:

Terraform 可讓您定義、預覽和部署雲端基礎結構。 使用 Terraform 時,您可以使用 HCL 語法來建立設定檔。 HCL 語法可讓您指定雲端提供者 (例如 Azure) 和構成雲端基礎結構的元素。 建立設定檔之後,您可以建立執行計畫,讓您先預覽基礎結構變更,之後再部署。 驗證變更之後,您可以套用執行計畫來部署基礎結構。

本文概述如何使用 Terraform 來部署 ARM Azure 虛擬桌面環境,而不是 AVD 傳統環境。

Azure 虛擬桌面有數個必要條件 需求

Azure 虛擬桌面新手嗎? 從什麼是 Azure 虛擬桌面開始?

假設已設定適當的平台基礎,可能或可能不是 企業規模登陸區域平台基礎。

在本文中,您將學會如何:

  • 使用 Terraform 建立 Azure 虛擬桌面工作區
  • 使用 Terraform 建立 Azure 虛擬桌面主機集區
  • 使用 Terraform 建立 Azure 傳統型應用程式群組
  • 建立工作區和桌面應用程式群組的關聯

1.設定您的環境

  • Azure 訂用帳戶:如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶

2.實作 Terraform 程式代碼

  1. 建立目錄,然後在目錄中測試範例 Terraform 程式碼,並將其設為目前的目錄。

  2. 建立名為 providers.tf 的檔案,並插入下列程式碼:

    terraform {
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~>2.0"
        }
        azuread = {
          source = "hashicorp/azuread"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
  3. 建立名為 main.tf 的檔案,並插入下列程式碼:

    # Resource group name is output when execution plan is applied.
    resource "azurerm_resource_group" "sh" {
      name     = var.rg_name
      location = var.resource_group_location
    }
    
    # Create AVD workspace
    resource "azurerm_virtual_desktop_workspace" "workspace" {
      name                = var.workspace
      resource_group_name = azurerm_resource_group.sh.name
      location            = azurerm_resource_group.sh.location
      friendly_name       = "${var.prefix} Workspace"
      description         = "${var.prefix} Workspace"
    }
    
    # Create AVD host pool
    resource "azurerm_virtual_desktop_host_pool" "hostpool" {
      resource_group_name      = azurerm_resource_group.sh.name
      location                 = azurerm_resource_group.sh.location
      name                     = var.hostpool
      friendly_name            = var.hostpool
      validate_environment     = true
      custom_rdp_properties    = "audiocapturemode:i:1;audiomode:i:0;"
      description              = "${var.prefix} Terraform HostPool"
      type                     = "Pooled"
      maximum_sessions_allowed = 16
      load_balancer_type       = "DepthFirst" #[BreadthFirst DepthFirst]
    }
    
    resource "azurerm_virtual_desktop_host_pool_registration_info" "registrationinfo" {
      hostpool_id     = azurerm_virtual_desktop_host_pool.hostpool.id
      expiration_date = var.rfc3339
    }
    
    # Create AVD DAG
    resource "azurerm_virtual_desktop_application_group" "dag" {
      resource_group_name = azurerm_resource_group.sh.name
      host_pool_id        = azurerm_virtual_desktop_host_pool.hostpool.id
      location            = azurerm_resource_group.sh.location
      type                = "Desktop"
      name                = "${var.prefix}-dag"
      friendly_name       = "Desktop AppGroup"
      description         = "AVD application group"
      depends_on          = [azurerm_virtual_desktop_host_pool.hostpool, azurerm_virtual_desktop_workspace.workspace]
    }
    
    # Associate Workspace and DAG
    resource "azurerm_virtual_desktop_workspace_application_group_association" "ws-dag" {
      application_group_id = azurerm_virtual_desktop_application_group.dag.id
      workspace_id         = azurerm_virtual_desktop_workspace.workspace.id
    }
    
  4. 建立名為 variables.tf 的檔案,並插入下列程式碼:

    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 "workspace" {
    type        = string
    description = "Name of the Azure Virtual Desktop workspace"
    default     = "AVD TF Workspace"
    }
    
    variable "hostpool" {
    type        = string
    description = "Name of the Azure Virtual Desktop host pool"
    default     = "AVD-TF-HP"
    }
    
    variable "rfc3339" {
    type        = string
    default     = "2022-03-30T12:43:13Z"
    description = "Registration token expiration"
    }
    
    variable "prefix" {
    type        = string
    default     = "avdtf"
    description = "Prefix of the name of the AVD machine(s)"
    }
    
  5. 建立名為 output.tf 的檔案,並插入下列程式碼:

    output "azure_virtual_desktop_compute_resource_group" {
      description = "Name of the Resource group in which to deploy session host"
      value       = azurerm_resource_group.sh.name
    }
    
    output "azure_virtual_desktop_host_pool" {
      description = "Name of the Azure Virtual Desktop host pool"
      value       = azurerm_virtual_desktop_host_pool.hostpool.name
    }
    
    output "azurerm_virtual_desktop_application_group" {
      description = "Name of the Azure Virtual Desktop DAG"
      value       = azurerm_virtual_desktop_application_group.dag.name
    }
    
    output "azurerm_virtual_desktop_workspace" {
      description = "Name of the Azure Virtual Desktop workspace"
      value       = azurerm_virtual_desktop_workspace.workspace.name
    }
    
    output "location" {
      description = "The Azure region"
      value       = azurerm_resource_group.sh.location
    }
    
    output "AVD_user_groupname" {
      description = "Azure Active Directory Group for AVD users"
      value       = azuread_group.aad_group.display_name
    }
    

3. 初始化 Terraform

執行 terraform init 來初始化 Terraform 部署。 此命令會下載管理 Azure 資源所需的 Azure 提供者。

terraform init -upgrade

重點︰

  • -upgrade 參數會將必要的提供者外掛程式升級至符合設定版本條件約束的最新版本。

4.建立 Terraform 執行計劃

執行 terraform plan 以建立執行計畫。

terraform plan -out main.tfplan

重點︰

  • terraform plan 命令會建立執行計畫,但不會執行。 相反地,其會決定要在您指定的設定檔中建立設定所需的動作。 此模式可讓您在對實際資源進行任何變更之前,先確認執行方案是否符合您的預期。
  • 選用的 -out 參數可讓您指定計畫的輸出檔。 使用 -out 參數可確保您所檢閱的方案就是所套用的方案。

5.套用 Terraform 執行計劃

執行 terraform apply 將執行計畫套用至您的雲端基礎結構。

terraform apply main.tfplan

重點︰

  • 範例 terraform apply 命令會假設您先前已執行 terraform plan -out main.tfplan
  • 如果您為 -out 參數指定了不同的檔案名稱,請在呼叫 terraform apply 時使用該檔案名稱。
  • 若您未使用 -out 參數,請呼叫 terraform apply,不需要使用參數。

6.驗證結果

  1. 在 Azure 入口網站 上,選取 [Azure 虛擬桌面]。
  2. 選取 [主機集區],然後選取 [集區建立的資源名稱]。
  3. 選取 [ 工作階段主機 ],然後確認已列出會話主機。

7.清除資源

當您不再需要透過 Terraform 建立的資源時,請執行下列步驟:

  1. 執行 terraform plan 並指定 destroy 旗標。

    terraform plan -destroy -out main.destroy.tfplan
    

    重點︰

    • terraform plan 命令會建立執行計畫,但不會執行。 相反地,其會決定要在您指定的設定檔中建立設定所需的動作。 此模式可讓您在對實際資源進行任何變更之前,先確認執行方案是否符合您的預期。
    • 選用的 -out 參數可讓您指定計畫的輸出檔。 使用 -out 參數可確保您所檢閱的方案就是所套用的方案。
  2. 執行 terraform apply 以套用執行方案。

    terraform apply main.destroy.tfplan
    

對 Azure 上的 Terraform 進行疑難排解

針對在 Azure 上使用 Terraform 時的常見問題進行疑難排解

下一步