3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Azure] TerraformでのWindows OS設定(Custom Script Extension)記法メモ

Last updated at Posted at 2019-12-20

以前、TerraformでのLinux OS設定についてまとめましたが、今回はWindows OSの設定手順です。Windowsの場合も、いくつかやり方はあるようですが、VM拡張機能(Custom Script Extension)を使うのが分かりやすいと思います。

1) インストーラとPowershellスクリプトの準備

インストールするアプリケーション(msiやexe)と、実際のインストールを行うPowershellをストレージアカウントに準備しておきます。ストレージアカウントの「ファイアーウォールと仮想ネットワーク」設定で、VM展開先のサブネットを設定しておきます。
image.png

ストレージに適当なコンテナを作成し、インストーラとPowershellスクリプトを配置しておきます。インストーラはWebから直接取得しても構いませんが、ここでは例として、全てストレージアカウントに置いておきます。
image.png

Powershellスクリプトには、アプリケーションをサイレントインストールする処理を並べておきます。

init_test.ps1
msiexec.exe /i /passive node-v12.13.0-x64.msi
msiexec.exe /i /passive azure-cli-2.0.76.msi
.\WinMerge-2.16.4-x64-Setup.exe /VERYSILENT /ALLUSERS

サイレントインストールするためのオプションは、アプリケーションによって違う場合もあるのでそれぞれ調べる必要があります。ここで例にしているWinMergeの場合は WinMerge-2.16.4-x64-Setup.exe /? を実行すると表示されました。

2) terraformファイル(tfファイル)準備

VM拡張機能は、単独のリソースとして記載します。settings にファイル(準備したファイルのフルパス)と実行するPowershellを設定します。

resource "azurerm_virtual_machine_extension" "tf_win_vm_extension" {
    name = "myWindowsVmExtension" # 拡張機能名(好きに付けてよい)
    location = "Japan East"       # リージョン(VMと同じにする)
    resource_group_name  = "${azurerm_resource_group.tf_name_resource_group.name}" # リソースグループ(名前で参照)
    virtual_machine_name = "${azurerm_virtual_machine.tf_name_vm1.name}"           # 仮想マシン(名前で参照)
    type = "CustomScriptExtension"  # 拡張機能の種類(Custom Script Extension)
    publisher = "Microsoft.Compute" # 拡張機能提供者(Microsoft)
    type_handler_version = "1.9"    # 拡張機能バージョン(実際にインストールしてみて最新バージョンを確認)

    # settings:VMにダウンロードするファイル(準備したファイルのフルパス)と実行するPowershellを設定
    settings = <<SETTINGS
    {
        "fileUris": [
            "https://xxxxxxdemo001.blob.core.windows.net/pstest1/init_test.ps1",
            "https://xxxxxxdemo001.blob.core.windows.net/pstest1/node-v12.13.0-x64.msi",
            "https://xxxxxxdemo001.blob.core.windows.net/pstest1/WinMerge-2.16.4-x64-Setup.exe",
            "https://xxxxxxdemo001.blob.core.windows.net/pstest1/azure-cli-2.0.76.msi"
        ],
        "commandToExecute": "powershell -ExecutionPolicy Unrestricted -File \"init_test.ps1\""
    }
    SETTINGS
}

3) 実行結果確認

terraform実行後、VMにログインし、インストールされていることを確認します。
image.png

azコマンドはスタートメニューに出てこないのでコマンドで確認します。
image.png

拡張機能で実行されたファイルは C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.9.5\Downloads\<数字> に置かれているので、異常があった場合の確認で使えます。

image.png

参考資料

-Terraform - azurerm_virtual_machine_extension

3
3
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
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?