概要
「Infrastructure as Code」ということで、Terraform を用いて Azure環境上の DevTest Labs に Windows10Pro のVMを作成してみました。 検証・開発・デモ・トレーニング・ハンズオン等に利用できると思います。 Azure IaaS 上に Windows10Pro を構築したこの記事と比較してみてください。
ローカル環境
- macOS Monterey 12.1
- python 3.8.12
- Azure CLI 2.33.0
- terraform v1.0.11
前提条件
- Azure環境がすでに用意されていること(テナント/サブスクリプション)
- ローカル環境に「azure cli」がインストールされていること
- ローカル環境に「terraform」環境が構成されていること
- TerraformでAzure上に環境構築するためのサービスプリンシパルが作成されており、Terraform のためのローカル環境変数が定義されていること
Terraform で DevTest Labs に Windows10 Pro の VM を作成してみる
terraform 定義ファイルの作成
プロバイダの定義
main.tf
# プロバイダーの定義
terraform {
required_providers {
azurerm = "~> 2.33"
}
}
provider "azurerm" {
features {}
tenant_id = var.ARM_TENANT_ID
client_id = var.ARM_CLIENT_ID
client_secret = var.ARM_CLIENT_SECRET
}
# リソースグループ
resource "azurerm_resource_group" "this" {
name = var.resource_group_name
location = var.region
tags = var.tags_def
}
パラメータ定義ファイル
variables.tf
# パラメータの定義
# 環境変数(Azureサービスプリンシパル)
variable ARM_TENANT_ID {}
variable ARM_CLIENT_ID {}
variable ARM_CLIENT_SECRET {}
# タグ情報
variable tags_def {
default = {
owner = "ituru"
period = "2022-02-28"
CostCenter = "PSG2"
Environment = "DevTestDemo"
Project = "Git_IaC"
}
}
# 各種パラメータ
variable region {} // 利用リージョン
variable resource_group_name {} // リソースグループ名
variable dev_test_name {} // DevTestLab名
variable dev_test_vnet_name {} // DevTestLab の vNet名
variable dev_test_vm_name {} // DevTestLab の 仮想マシン名
variable vm_size {} // 仮想マシンサイズ
variable dt_username {} // 管理者名
variable dt_password {} // 管理者パスワード
variable dt_storage_type {} // ストレージタイプ
パラメータ値定義ファイル
terraform.tfvars
# 環境変数の定義(Azureサービスプリンシパル)
ARM_TENANT_ID = "zzzzzzzz-cccc-4645-5757-zzzzzzzzzzzz"
ARM_CLIENT_ID = "xxxxxxxx-xxxx-4444-9922-xxxxxxxxxxxx"
ARM_CLIENT_SECRET = "hogehogehogehogehogehogehogehogege"
# パラメータ値の定義
region = "japaneast" // 利用リージョン
resource_group_name = "rg_ituru_dt01" // リソースグループ名
dev_test_name = "dt_ituru_lab01" // DevTestLab名
dev_test_vnet_name = "vnet_dt_ituru_dt01" // DevTestLabのvNet名
dev_test_vm_name = "vm-ituru-win10p" // DevTestLabの仮想マシン名
vm_size = "Standard_D2_v2" // 仮想マシンサイズ
dt_username = "dtuser01" // 管理者名
dt_password = "Password123!" // 管理者パスワード
dt_storage_type = "Premium" // ストレージタイプ
仮想マシン定義ファイル
devtest.tf
# DevTest Labs の定義
resource "azurerm_dev_test_lab" "this" {
name = var.dev_test_name
location = azurerm_resource_group.this.location
resource_group_name = azurerm_resource_group.this.name
tags = var.tags_def
}
# DevTest ネットワークの定義
resource "azurerm_dev_test_virtual_network" "this" {
name = var.dev_test_vnet_name
lab_name = azurerm_dev_test_lab.this.name
resource_group_name = azurerm_resource_group.this.name
subnet {
use_public_ip_address = "Allow"
use_in_virtual_machine_creation = "Allow"
}
}
# DevTest 仮想マシンの定義
resource "azurerm_dev_test_windows_virtual_machine" "this" {
name = var.dev_test_vm_name
lab_name = azurerm_dev_test_lab.this.name
resource_group_name = azurerm_resource_group.this.name
location = azurerm_resource_group.this.location
size = var.vm_size
username = var.dt_username
password = var.dt_password
lab_virtual_network_id = azurerm_dev_test_virtual_network.this.id
lab_subnet_name = azurerm_dev_test_virtual_network.this.subnet[0].name
storage_type = var.dt_storage_type
notes = "Managed by Terraform......."
gallery_image_reference {
offer = "Windows-10"
publisher = "MicrosoftWindowsDesktop"
sku = "win10-21h2-pro"
version = "latest"
}
}
terraform の実行
## init
$ terraform init
:
Terraform has been successfully initialized!
## plan
$ terraform plan
:
Plan: 4 to add, 0 to change, 0 to destroy.
## apply
$ terraform apply
:
Apply complete! Resources: 4 added, 0 changed, 0 destroyed.
※完了まで20分程かかりました、、、、
ローカルの作業ディレクトの状況
$ tree -a
.
├── .terraform
│ └── providers
│ └── registry.terraform.io
│ └── hashicorp
│ └── azurerm
│ └── 2.95.0
│ └── darwin_amd64
│ └── terraform-provider-azurerm_v2.95.0_x5
├── .terraform.lock.hcl
├── devtest.tf
├── main.tf
├── terraform.tfstate
├── terraform.tfstate.backup
├── terraform.tfvars
└── variables.tf
terraform 実行後の確認
リソースグループ の確認
$ az group show --name rg_ituru_dt01
{
"id": "/subscriptions/xxxxxxxx-1717-dada-9779-zzzzzzzzzzzz/resourceGroups/rg_ituru_dt01",
"location": "japaneast",
"managedBy": null,
"name": "rg_ituru_dt01",
"properties": {
"provisioningState": "Succeeded"
},
"tags": {
"CostCenter": "PSG2",
"Environment": "DevTestDemo",
"Project": "Git_IaC",
"owner": "ituru",
"period": "2022-02-28"
},
"type": "Microsoft.Resources/resourceGroups"
}
DevTest Labs の確認
$ az lab get --name dt_ituru_lab01 --resource-group rg_ituru_dt01 --output table
Command group 'lab' is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
ArtifactsStorageAccount CreatedDate DefaultPremiumStorageAccount DefaultStorageAccount EnvironmentPermission LabStorageType Location Name PremiumDataDiskStorageAccount PremiumDataDisks ProvisioningState ResourceGroup UniqueIdentifier VaultName
---------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------- ----------------------- ---------------- ---------- -------------- ---------------------------------------------------------------------------------------------------------------------------------------------- ------------------ ------------------- --------------- ------------------------------------ -------------------------------------------------------------------------------------------------------------------------------------
/subscriptions/xxxxxxxx-1717-dada-9779-zzzzzzzzzzzz/resourcegroups/rg_ituru_dt01/providers/microsoft.storage/storageaccounts/adtiturulab013224 2022-02-13T15:52:41.153303+00:00 /subscriptions/xxxxxxxx-1717-dada-9779-zzzzzzzzzzzz/resourcegroups/rg_ituru_dt01/providers/microsoft.storage/storageaccounts/adtiturulab013224 /subscriptions/xxxxxxxx-1717-dada-9779-zzzzzzzzzzzz/resourcegroups/rg_ituru_dt01/providers/microsoft.storage/storageaccounts/adtiturulab013224 Reader Premium japaneast dt_ituru_lab01 /subscriptions/xxxxxxxx-1717-dada-9779-zzzzzzzzzzzz/resourcegroups/rg_ituru_dt01/providers/microsoft.storage/storageaccounts/adtiturulab013224 Disabled Succeeded rg_ituru_dt01 e10277f9-c015-4e9d-9577-96e1e3409577 /subscriptions/xxxxxxxx-1717-dada-9779-zzzzzzzzzzzz/resourcegroups/rg_ituru_dt01/providers/microsoft.keyvault/vaults/dtiturulab015486
仮想マシンの確認
## list で VM一覧 を取得を試みましたが、、、、NG
$ az lab vm list --lab-name dt_ituru_lab01 --resource-group rg_ituru_dt01
Command group 'lab' is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
[]
## なので、直接VM名を指定して情報を取得してみました、、、
$ az lab vm show --lab-name dt_ituru_lab01 --resource-group rg_ituru_dt01 --name vm-ituru-win10p --expand 'properties($expand=artifacts,computeVm,networkInterface,applicableSchedule)' --query '{status: computeVm.statuses[1].displayStatus, fqdn: fqdn, ipAddress: networkInterface.publicIpAddress}'
Command group 'lab' is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
{
"fqdn": "vm-ituru-win10p.japaneast.cloudapp.azure.com",
"ipAddress": null,
"status": "VM deallocated"
}
仮想マシンの起動
$ az lab vm start --lab-name dt_ituru_lab01 --resource-group rg_ituru_dt01 --name vm-ituru-win10p
※起動に約4分程かかりました、、、、
仮想マシンの再確認
$ az lab vm show --lab-name dt_ituru_lab01 --resource-group rg_ituru_dt01 --name vm-ituru-win10p --expand 'properties($expand=artifacts,computeVm,networkInterface,applicableSchedule)' --query '{status: computeVm.statuses[1].displayStatus, fqdn: fqdn, ipAddress: networkInterface.publicIpAddress}'
Command group 'lab' is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
{
"fqdn": "vm-ituru-win10p.japaneast.cloudapp.azure.com",
"ipAddress": "20.210.103.48",
"status": "VM running"
}
仮想マシンの停止
$ az lab vm stop --lab-name dt_ituru_lab01 --resource-group rg_ituru_dt01 --name vm-ituru-win10p
※停止に約3分程かかりました、、、、
terraform ステートの参照
$ terraform state list
azurerm_dev_test_lab.this
azurerm_dev_test_virtual_network.this
azurerm_dev_test_windows_virtual_machine.this
azurerm_resource_group.this
terraform による特定リソースの削除
$ terraform destroy -target=azurerm_dev_test_windows_virtual_machine.this
:
Destroy complete! Resources: 1 destroyed.
terraform による作成した全リソースの削除
$ terraform destroy
:
Destroy complete! Resources: 4 destroyed.
※完了まで12分程かかりました、、、、
まとめ
これで、Terraform でサクッと Azure DevTest Labs 環境を構成できることを確認できました。今回は Windows10Pro のOSのみの環境ですが、ここに各種アプリケーションをインストールされた状態で利用できるようにしたいです、、、、、
参考記事
以下の記事を参考にさせていただきました。感謝申し上げます。
Check! Azure DevTest Labs で、使いたいときだけコストの範囲内で安心して開発してみる
Azure DevTest Labs と Azure Lab Services を比較する