Terraform で仮想マシンスケールセットのインスタンスのタイムゾーンを変更する方法

仮想マシンスケールセットのインスタンスタイムゾーンを日本時間に変更したいのに、仮想マシンスケールセットで動かすためのイメージを作るとき Sysprep で一般化したら、タイムゾーンUTC になってしまう。

応答ファイルでタイムゾーンを設定できたはず。カスタム応答ファイルを作ればいけるかと思いきや、ドキュメントによると、Azure はカスタム応答ファイルをサポートしていないときた。困った。

起動時に任意のスクリプトを実行するしかない。フックポイントがあるか調べたところ、CustomScript 拡張の存在を知った。 Terraform は仮想マシンスケールセットの拡張もサポートしている。

resource "azurerm_windows_virtual_machine_scale_set" "example" {
  # ...
}

resource "azurerm_virtual_machine_scale_set_extension" "custom_script" {
  name                         = "customscript-example"
  virtual_machine_scale_set_id = azurerm_windows_virtual_machine_scale_set.example.id
  publisher                    = "Microsoft.Compute"
  type                         = "CustomScriptExtension"
  type_handler_version         = "1.10"
  settings = jsonencode({
    "commandToExecute" = "tzutil /s \"Tokyo Standard Time\""
  })
}

こいつでタイムゾーンを変更できた。めでたしめでたし。