🏗️

Azure VM Image BuilderがGUI対応していたらしいので試す

2023/03/31に公開

モチベ

  • そもそもAzure VM Image Builder触ったことない
  • 触っておきたい

用語

  • Azure Compute Gallery(ACG)
    • イメージの共有のためのサービス
  • イメージ定義
    • イメージのメタデータ的なもの。例えばそれがWindowsなのかLinuxなのか等を記述しておくもの
    • イメージテンプレートの中でイメージ定義を指定する
    • つまり、一連のイメージのバージョン管理単位とも言える
  • イメージテンプレート
    • 具体的なイメージバージョンを作成するための"テンプレート"
    • Marketplaceやカスタムイメージをもとにして作成
    • イメージテンプレートを"ビルド"することによって、特定バージョンのイメージの実体が作成される
  • Azure VM Image Builder
    • イメージテンプレートからビルドするタイミングで元となるイメージをカスタマイズするための機能
    • 元となるイメージに対してPowerShellのコマンドやスクリプトを実行させたり、再起動させたりといった処理を行ったうえでイメージとして発行できる
    • 例:
      • MarketplaceのWindows Server 2019を日本語化して発行する
      • Azure Compute Galleryに発行されているカスタムイメージに最新のWindows Updateを適用してから新しいバージョンとして再度Azure Compute Galleryにイメージを発行する
    • どうやら超直近でGUI対応したらしい

https://azure.microsoft.com/ja-jp/updates/azure-image-builder-portal-functionality-now-available/

  • VMイメージバージョン
    • Image Builderによってイメージテンプレートからビルドされるイメージの実体
    • 特定のVMイメージバージョンからVMを作成することが可能
    • VMイメージバージョンのビルドにはかなり時間を要するが、一度VMイメージバージョンとして発行しておけば、そこからはVMの作成時に指定するだけでよい

検証

  • AVDのセッションホストのイメージを日本語化して展開するようなシナリオを想定
  • 後述のPowerShellのスクリプトがクライアントOSにしか対応していないため
    • 最初はWindows Server 2022でやろうとしたが、Install-Languageコマンドが使えないということが発覚して急遽路線変更した(時間溶けた)
    • マルチセッションOSで使えるかの確認もついでに行う
  • Windows Serverでの日本語化はもっと作りこみが必要なので注意

Azure Compute Galleryの作成

  • Azure Compute Galleryを作成

  • ACG側からVMイメージ定義(VMイメージバージョンの管理単位)を作成することができるが、イメージテンプレート作成時に新規作成できるため、事前作成の必要はなし

イメージテンプレートの作成

  • AVDでの利用を想定して、windows11のシングルセッションOSとマルチセッションOSで試す

  • ターゲットとなるACGは選択し、イメージ定義はここで新規作成する

  • このあたりはイメージからVMをデプロイするときにオーバーライドできるため一旦そのままでよい

  • 重要なところはここ

  • スクリプトを使用してカスタマイズが可能

    • 以下のようなスクリプトを使って日本語化する
powershell
Install-Language ja-JP -CopyToSettings
Set-SystemPreferredUILanguage ja-JP
Set-WinHomeLocation -GeoId 0x7a
Copy-UserInternationalSettingsToSystem -WelcomeScreen $True -NewUser $True
Set-TimeZone -Id "Tokyo Standard Time"

参考:
https://github.com/NakayamaKento/azureimagebuilder/blob/main/AVD/Installlanguagepack.ps1

  • 念のため再起動も追加する

  • このあたりの設定がGUIでできるようになったのがアップデートらしく、もともとはローカルで開発しなければならなかったものがAzure Portalで完結するようになった

  • そして裏ではAzure Image Builderがイメージのビルド時にこのカスタマイズを加えたうえで、Azure Compute Galleryにイメージを発行してくれる

イメージテンプレートのビルドによる"VMイメージバージョン"の作成

  • イメージテンプレートを選択し、「ビルドの開始」をクリック
  • ビルドが開始されると、グレーアウトする
  • コマンドにエラーがなければ、日本語化処理によって数時間単位で時間がかかる
    • 逆に、いろいろとカスタムしているのにすぐに終わる場合は、スクリプトがエラー終了している可能性が高い

VMの作成

  • イメージバージョンが発行されたら、VMイメージ定義もしくはVMイメージバージョンの画面からVMの作成を行う
  • 通常のVM作成の画面が開くので、画面に従ってVMを作成

日本語化されていることの確認

  • VMのデプロイが終了したらRDP接続して言語を確認する

  • Windows Modules Installerが走っている画面が出た(ただこの時点ですでに日本語化されていることが分かる)

  • しばらく待つと、日本語化されたマルチセッションOSに無事にログインできた

  • シングルセッションOSも日本語化されていることが確認できた

おわり

  • Image Builderのビルドは時間がかかるものの、一度ビルドしてしまえばそこからすぐにVMを立てることができるため同じ構成のVMを大量に作成するようなAVDのワークロードとかなり相性がいい
    • 日本語化のコマンドもマルチセッションOSでも使える
  • しかもそれがAzure Portal内で完結するようになったということで、ユーザも増えそうな予感
GitHubで編集を提案
Microsoft (有志)

Discussion