Terraform を使用して Azure Virtual Desktop を構成する
次の Terraform と Terraform プロバイダーのバージョンでテストされた記事:
Terraform を使用すると、クラウド インフラストラクチャの定義、プレビュー、およびデプロイを行うことができます。 Terraform を使用する際は、HCL 構文を使って構成ファイルを作成します。 HCL 構文では、Azure などのクラウド プロバイダーと、クラウド インフラストラクチャを構成する要素を指定できます。 構成ファイルを作成したら、"実行プラン" を作成します。これにより、インフラストラクチャの変更をデプロイ前にプレビューすることができます。 変更を確認したら、実行プランを適用してインフラストラクチャをデプロイします。
この記事では、Terraform を使用して AVD クラシックではなく ARM Azure Virtual Desktop 環境をデプロイする方法の概要について説明します。
Azure Virtual Desktop の要件には、いくつかの前提条件があります
Azure Virtual Desktop は初めてですか? 「Azure Virtual Desktop とは」から始めます。
適切なプラットフォーム基盤が既にセットアップされており、エンタープライズ規模のランディング ゾーン プラットフォーム基盤である場合とそうでない場合があることを前提としています。
この記事では、次のことについて説明します。
- Terraform を使用して Azure Virtual Desktop ワークスペースを作成する
- Terraform を使用して Azure Virtual Desktop ホスト プールを作成する
- Terraform を使用して Azure デスクトップ アプリケーション グループを作成する
- ワークスペースとデスクトップ アプリケーション グループを関連付ける
1. 環境を構成する
- Azure サブスクリプション:Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
Terraform の構成: まだ行っていない場合は、次のいずれかのオプションを使用して Terraform を構成します。
2. Terraform コードを実装する
サンプルの Terraform コードをテストするディレクトリを作成し、それを現在のディレクトリにします。
providers.tf
という名前のファイルを作成し、次のコードを挿入します。terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>2.0" } azuread = { source = "hashicorp/azuread" } } } provider "azurerm" { features {} }
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 }
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)" }
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. 結果を確認する
- Azure portal で [Azure Virtual Desktop] を選択します。
- [ホスト プール] を選択し、[作成したプールの名前] リソースを選択します。
- [セッション ホスト] を選択し、セッション ホストが一覧表示されていることを確認します。
7.リソースをクリーンアップする
Terraform を使用して作成したリソースが不要になった場合は、次の手順を実行します。
terraform plan を実行して、
destroy
フラグを指定します。terraform plan -destroy -out main.destroy.tfplan
重要なポイント:
terraform plan
コマンドは、実行プランを作成しますが、実行はしません。 代わりに、構成ファイルに指定された構成を作成するために必要なアクションを決定します。 このパターンを使用すると、実際のリソースに変更を加える前に、実行プランが自分の想定と一致しているかどうかを確認できます。- 省略可能な
-out
パラメーターを使用すると、プランの出力ファイルを指定できます。-out
パラメーターを使用すると、レビューしたプランが適用内容とまったく同じであることが確実になります。
terraform apply を実行して、実行プランを適用します。
terraform apply main.destroy.tfplan
Azure での Terraform のトラブルシューティング
Azure で Terraform を使用する場合の一般的な問題のトラブルシューティング
次のステップ
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示