LoginSignup
0
0

More than 1 year has passed since last update.

【Terraform de Azure】 DevTest Labs に Windows10 VM を作成してみました

Posted at

概要

「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

前提条件

  1. Azure環境がすでに用意されていること(テナント/サブスクリプション)
  2. ローカル環境に「azure cli」がインストールされていること
  3. ローカル環境に「terraform」環境が構成されていること
  4. 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 を比較する

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0