概要
「Infrastructer as Code」ということで、Terraform を用いて Azure環境上に Windows10Pro のVMを作成し、そこに必要なアプリケーションをインストールしてみました。
ローカル環境
- 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 定義ファイルを利用します
インストーラーの準備
対象とするアプリケーションのインストーラーを準備します
- Git : Git-2.35.1.2-64-bit.exe
- Azure CLI : azure-cli-2.33.1.msi
- VSCode : VSCodeUserSetup-x64-1.64.2.exe
上記アプリをインストールするための PowerShellスクリプトファイル「init_app.ps1」を作成します。
msiexec.exe /i .\azure-cli-2.33.1.msi /passive
.\Git-2.35.1.2-64-bit.exe /VERYSILENT
.\VSCodeUserSetup-x64-1.64.2.exe /VERYSILENT
BLOBへのアップロード
事前に作成したコンテナ情報を取得します。
$ az storage container list --account-name iturutfstate --output table
Name Lease Status Last Modified
------- -------------- -------------------------
app 2022-02-16T07:25:53+00:00
tfstate 2021-12-04T16:12:31+00:00
app コンテナへ、インストーラとスクリプトファイルをアップロードし、それらのファイルを確認します。
$ az storage blob list --account-name iturutfstate --container-name app --output table
Name Blob Type Blob Tier Length Content Type Last Modified Snapshot
------------------------------ ----------- ----------- -------- ------------------------ ------------------------- ----------
Git-2.35.1.2-64-bit.exe BlockBlob Hot 50244992 application/x-msdownload 2022-02-16T07:26:22+00:00
VSCodeUserSetup-x64-1.64.2.exe BlockBlob Hot 77256912 application/x-msdownload 2022-02-16T07:26:34+00:00
azure-cli-2.33.1.msi BlockBlob Hot 54448128 application/octet-stream 2022-02-16T07:26:35+00:00
init_app.ps1 BlockBlob Hot 131 application/octet-stream 2022-02-16T07:47:10+00:00
terraform 定義ファイルの編集
仮想マシン定義ファイル「computer.tf」を編集します(「仮想マシンの機能拡張」以降が追加部分)
# windows10 仮想マシン
resource "azurerm_windows_virtual_machine" "this" {
name = var.vm_name
location = azurerm_resource_group.this.location
resource_group_name = azurerm_resource_group.this.name
size = var.vm_size
computer_name = var.computer_name
admin_username = var.admin_username
admin_password = var.admin_password
network_interface_ids = [
azurerm_network_interface.this.id,
]
source_image_reference {
publisher = "MicrosoftWindowsDesktop"
offer = "Windows-10"
sku = "win10-21h2-pro"
version = "latest"
}
os_disk {
caching = "ReadWrite"
storage_account_type = "Standard_LRS"
}
tags = var.tags_def
}
# 仮想マシンの機能拡張(アプリのインストール)
resource "azurerm_virtual_machine_extension" "git" {
name = azurerm_windows_virtual_machine.this.name
virtual_machine_id = azurerm_windows_virtual_machine.this.id
publisher = "Microsoft.Compute"
type = "CustomScriptExtension"
type_handler_version = "1.9"
tags = var.tags_def
# VMにダウンロードするファイル(準備したファイルのフルパス)と実行するPowershellを設定
settings = <<SETTINGS
{
"fileUris": [
"https://iturutfstate.blob.core.windows.net/app/init_app.ps1",
"https://iturutfstate.blob.core.windows.net/app/azure-cli-2.33.1.msi",
"https://iturutfstate.blob.core.windows.net/app/Git-2.35.1.2-64-bit.exe",
"https://iturutfstate.blob.core.windows.net/app/VSCodeUserSetup-x64-1.64.2.exe"
],
"commandToExecute": "powershell -ExecutionPolicy Unrestricted -File \"init_app.ps1\""
}
SETTINGS
}
terraform の実行
$ terraform plan
$ terraform apply
仮想マシンへ接続しての確認
RDP接続
仮想マシンへの RDP接続については、この記事 を参考にして実施ください。
接続(ログイン)後の確認
コンソール(PowerShell)を立ち上げ、アプリケーションがインストールされていることを確認します。
## Git アプリケーション
PS C:\Users\adminuser> Get-ItemProperty HKLM:Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table -AutoSize
DisplayName DisplayVersion Publisher InstallDate
----------- -------------- --------- -----------
Git 2.35.1.2 The Git Development Community 20220216
## Azure CLI アプリケーション
PS C:\Users\adminuser> Get-ItemProperty HKLM:SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table -AutoSize
DisplayName DisplayVersion Publisher InstallDate
----------- -------------- --------- -----------
Microsoft Edge 98.0.1108.50 Microsoft Corporation 20220216
Microsoft Edge Update 1.3.155.77
Microsoft Azure CLI 2.33.1 Microsoft Corporation 20220216
## VSCode アプリケーション
PS C:\Users\adminuser> Get-ItemProperty HKCU:Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table -AutoSize
DisplayName DisplayVersion Publisher InstallDate
----------- -------------- --------- -----------
Microsoft OneDrive 21.220.1024.0005 Microsoft Corporation
Microsoft Visual Studio Code (User) 1.64.2 Microsoft Corporation 20220216
機能拡張で実行されたファイルのありかは以下となります
Directory: C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.9.5\downloads\0
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2/16/2022 3:08 PM 54448128 azure-cli-2.33.1.msi
-a---- 2/16/2022 3:08 PM 50244992 Git-2.35.1.2-64-bit.exe
-a---- 2/16/2022 3:08 PM 131 init_app.ps1
-a---- 2/16/2022 3:08 PM 77256912 VSCodeUserSetup-x64-1.64.2.exe
terraform による作成したリソースの削除
$ terraform destroy
まとめ
これで、Terraform でサクッと Azure環境上の Windows10Pro にアプリケーションをインストールする方法を確認することができました。 DevTest Labs でも同様なことをやってみようかと、、、、
参考記事
以下の記事をおもいっきり参考にさせていただきました。感謝申し上げます。
[Azure] TerraformでのWindows OS設定(Custom Script Extension)記法メモ