Nested Hyper-V での Azure Stack HCI 検証環境構築スクリプトを改良してみた

この記事の内容

  • Nested Hyper-V 上に Azure Stack HCI のマルチノード検証環境を自動展開するスクリプトの改良内容を紹介します
  • 設定ファイルの構造を見直し、ノード名・IPアドレス・メモリ・パスなどを1ファイルで管理できるようにしました
  • パスワード管理をセキュアストリング経由のファイル保存方式に変更しました
  • 複数ノードの構成処理を逐次実行からバックグラウンドジョブによる並行実行に変更しました
  • スクリプトはGitHubリポジトリで公開しており、Pull Requestも歓迎しています

概要

今回は、Nested Hyper-V 上に Azure Stack HCI のマルチノード検証環境を展開する PowerShell スクリプトを改良した内容をご紹介します。GitHubリポジトリ(Stars1c)にて公開していますので、興味のある方はぜひご覧ください。

できることは前回のバージョンと変わりませんが、使い勝手をより良くするためにいくつかの改善を加えました。


スクリプトの基本的な動作

スクリプトを実行すると、Hyper-V 上の既存のノードが削除・クリーンアップされ、新しい VM が作成されます。

ただし、OS 自体のインストール部分(DVDブートから起動し、使用許諾への同意・ディスク選択・初回パスワード設定)はまだ自動化されていないため、この部分は手動での操作が必要です。OS インストール中は、裏側でバックグラウンドジョブが動き始め、各種処理が並行して進むようになっています。


主な改良点

1. 設定ファイルの構造を整理

設定値をひとつのコンフィグファイルにまとめ、簡単に記述できるようにしました。このファイルで設定できる項目は以下のとおりです。

  • ノードの名前と IP アドレス
  • 1台あたりのメモリサイズ
  • VM の配置パス
  • ISO ファイルのパス
  • 使用する Hyper-V 仮想スイッチの名前
  • デフォルトゲートウェイ
  • DNS サーバー
  • ドメイン名

2. パスワード管理のセキュリティ改善

以前はパスワードをそのままスクリプトに書いていましたが、今回からはセキュアストリングを使った暗号化ファイルへの保存方式に変更しました。

# パスワードをセキュアストリングとして暗号化ファイルに出力する例
$securePassword = ConvertTo-SecureString "YourPassword" -AsPlainText -Force
$securePassword | ConvertFrom-SecureString | Set-Content "password.txt"

この方式では、ファイルを作成したアカウントでしか復号できないため、テスト環境での利用においては実用的なセキュリティ水準を確保しています。本番環境への適用は慎重に検討が必要ですが、検証・テスト用途であれば問題なく使用できます。

3. 複数ノードの並行処理

以前は1ノードの構成が完了してから次のノードに進む逐次処理でしたが、今回はバックグラウンドジョブを使って複数ノードを同時並行で処理するように変更しました。

ノードを追加したい場合は、設定ファイルの対応する箇所に1行追加するだけで対応できます。2台でも3台でも5台でも、同じように並行処理で進むロジックになっています。

4. 待機処理の実装

OS インストール完了後、スクリプトが VM に対して操作できる状態になるまで待機する処理を実装しました。

# VM が操作可能になるまでループして待機する例
do {
    try {
        $result = Invoke-Command -ComputerName $vmName -Credential $cred -ScriptBlock { "test" } -ErrorAction SilentlyContinue
    } catch {}
    Start-Sleep -Seconds 10
} until ($result -eq "test")

Invoke-Command で VM に対して文字列を実行し、その結果が正しく返ってくる状態になるまでループで待ち続けます。認証情報が正しく使える状態になったことを確認してから次の処理へ進む仕組みです。


実行完了までの時間と最終状態

スムーズに進めば10分かからずに完了します。スクリプト完了後には以下の状態が整っています。

  • ドメイン参加済み
  • IP アドレス・DNS 設定済み
  • CPU・メモリ構成済み
  • Storage Spaces Direct (S2D) に必要なディスク構成済み

あとは WAC(Windows Admin Center)に登録してウィザードを進め、クラスタ化・記憶域スペースダイレクトのサービス展開へと進むことができる状態です。


今後の改善予定

クラスタ構成の全自動化

現在はクラスタ化(S2D クラスター構成)まで自動化できていません。ここまで全自動で完了するようにしたいと考えています。そこまで完成すれば、Nested Hyper-V の上で Azure Stack HCI のさまざまな検証を手軽に行えるようになり、環境の破棄・再作成も素早く行えます。

OS インストール部分の自動化

初回の OS インストール(ライセンス同意・ディスク選択・パスワード設定)はまだ手動です。一度クリーンインストールしたイメージを Sysprep で一般化しつつ自動応答ファイルを使う方法があることは把握していますが、新しいビルドが出たときの初回作業が煩雑になる点が課題です。この部分の自動化については時間があるときに調査していく予定です。


まとめ

Nested Hyper-V 上の Azure Stack HCI 検証環境構築スクリプトに対して、以下の改良を加えました。

  • 設定の一元管理: ノード情報・ネットワーク設定・パスなどをコンフィグファイルにまとめて管理
  • セキュアなパスワード管理: ConvertFrom-SecureString を活用した暗号化ファイル方式を採用
  • 並行処理による高速化: バックグラウンドジョブで複数ノードを同時に構成処理
  • 堅牢な待機処理: VM が操作可能になるまでループで確認してから次のステップへ進む仕組みを実装

スクリプトは GitHub リポジトリにて公開しています。改善案があれば Pull Request をいただけると大変ありがたいです。今後はクラスタ構成まで含めた完全自動化を目指して開発を続けていく予定です。