Ansibleを使ってHyper-V上にADドメイン環境を全自動構築する方法

この記事の内容

  • Ansible と Hyper-V を組み合わせ、Active Directory フォレスト環境を一撃で自動構築できる仕組みを紹介します
  • ドメインコントローラー(追加DCを含む)、メンバーサーバー、Windows 10/11 クライアントまで一括展開できます
  • environments.yml にVM定義を書いてコマンドを1つ叩くだけで、ドメイン参加済みの環境が完成します
  • Dドライブの追加やデータベース配置先の指定など、最近の機能追加についても解説します
  • GitHub で公開されているため、git clone してすぐに試せます

概要

検証環境を何度も作り直す作業は、ADフォレスト環境のような複雑な構成だと特に手間がかかります。今回ご紹介するのは、Ansible と Hyper-V を組み合わせて、その一連の作業を全自動化するプレイブックです。

このプレイブックを使うと、以下のものをまとめて展開できます。

  • プライマリ ドメインコントローラー
  • 追加ドメインコントローラー
  • Windows Server メンバーサーバー(ファイルサーバー、IIS、SQL Server など)
  • Windows 10 / Windows 11 クライアント(ドメイン参加済み)

もともとは他の方が作成されたリポジトリをフォークして、機能を追加・改修したものです。GitHub 上に公開されています。


リポジトリ構成と基本的な仕組み

リポジトリをクローンすると、複数のファイルが含まれています。基本的な設定はすべて environments.yml に記述します。このファイルにVMの定義を書いておくと、Ansible がその内容に従って環境を構築してくれます。

ゴールデンイメージ(OSごとに用意したVHDの元ファイル)を事前に手動で作成しておく必要があります。このゴールデンイメージをコピー元として指定すると、Ansible がコピー先のVHDを自動生成し、マウントしてCドライブとして起動する流れになります。


environments.yml の書き方

VMの基本定義

各VMに対して以下の項目を記述します。

- name: DC01
  os: windows_server
  cpu: 2
  memory: 4GB
  network:
    ip: 10.1.1.1
    netmask: 255.255.255.0
    gateway: 10.1.1.254
    dns: 10.1.1.1
  switch: InternalSwitch
  vhd:
    source: C:\GoldenImages\ws2022.vhdx
    destination: C:\VMs\DC01\DC01.vhdx
  • source にゴールデンイメージのパスを指定します
  • destination にコピー先のVHDパスを指定します
  • Ansible がソースからデスティネーションへのコピーも自動で行います

Dドライブの追加(最近追加された機能)

Dドライブを追加したい場合は、vhd の定義に続けてDドライブの設定を記述します。Cドライブとは異なり、コピーではなく新規作成になります。

  d_drive:
    path: C:\VMs\DC01\DC01_D.vhdx
    size: 100GB

この設定を書いておくと、VM起動後にディスクの初期化・フォーマットまで自動で行われ、指定サイズのDドライブが利用可能な状態になります。ADのデータベースやログをDドライブに配置したい場合にも活用できます。

フォレスト全体の設定

VMの定義とは別に、フォレスト全体に関する情報もまとめて記述できます。

forest:
  domain_name: contoso.local
  recovery_password: P@ssw0rd123
  upstream_dns: 8.8.8.8
  reverse_zone: 1.1.10.in-addr.arpa
  ntp_server: ntp.nict.jp
  admin_user: Administrator

逆引きゾーン名やNTPサーバーもここで指定できます。


インベントリ(hosts)ファイルの書き方

インベントリファイルには、Hyper-V ホストの情報と各Windows VMの情報を記述します。

[hyperv]
hyperv-host01

[windows]
10.1.1.1  ansible_host=10.1.1.1  computer_name=DC01
10.1.1.2  ansible_host=10.1.1.2  computer_name=DC02
10.1.1.10 ansible_host=10.1.1.10 computer_name=FS01
10.1.1.20 ansible_host=10.1.1.20 computer_name=CLIENT01

[dcs]
10.1.1.1
10.1.1.2
  • [dcs] グループに記載したホストは、ドメインコントローラーに昇格します
  • [dcs] に最初に記載したホストがプライマリDCになります
  • [dcs] 以外の [windows] グループのホストはドメインメンバーとして参加します

認証情報の設定(group_vars)

Ansible が Windows ホストに接続するための認証情報は group_vars/all.yml に記載します。

ansible_user: Administrator
ansible_password: P@ssw0rd123
ansible_port: 5985
ansible_connection: winrm
ansible_winrm_server_cert_validation: ignore

この設定はすべてのホストに一括で適用されます。ホストごとにパスワードが異なる場合は、group_vars/windows.ymlgroup_vars/hyperv.yml のようにグループ名に対応したファイルを作成して個別に上書きできます。


実行方法

事前準備として、Ansible のインストールと必要なモジュールの設定が必要です。詳細は prepare.md を参照してください。

環境が整ったら、以下のコマンド1つでADフォレスト環境の構築が始まります。

ansible-playbook -i hosts create_ad.yml

このプレイブックは内部的に以下の流れで処理を行います。

  1. VMの展開(VHDコピー・Dドライブ作成・VMスペック設定)
  2. VMの構成(コンピューター名変更・ネットワーク設定・ドライブ初期化)
  3. ADフォレストの作成(プライマリDCの昇格)
  4. ドメイン参加(メンバーサーバー・クライアント)
  5. 追加DCの昇格

処理が完了すると、すべてのタスクの結果が出力されます。tasks/ ディレクトリの中を確認・編集すれば、処理の追加や削除も柔軟に行えます。


構築後の確認ポイント

構築完了後、ドメインコントローラーにログインして以下の点を確認することをおすすめします。

  • Active Directory ドメインと信頼関係 でドメインとフォレストが正しく作成されているか
  • Active Directory サイトとサービス でデフォルトのサイトに2台のDCが登録されているか
  • Active Directory ユーザーとコンピューター のコンピューターOUに各メンバーサーバー・クライアントが登録されているか

今後の展望

現在は Nested Hyper-V 環境で動作させていますが、Azure 上の Nested Hyper-V 環境でも同様に利用できます。今後は Azure 上に Nested Hyper-V 環境ごと展開する Bicep テンプレートを作成し、テンプレート実行後すぐに Ansible プレイブックを動かせるような構成にすることも検討しています。これにより、Azure 上でいつでも素早く検証環境を立ち上げられるようになります。


まとめ

Ansible と Hyper-V を組み合わせたこのプレイブックを使うと、ADフォレスト環境の構築作業を大幅に自動化できます。environments.yml とインベントリファイルを一度書いておけば、コマンド1つで以下がすべて揃います。

  • プライマリ・追加ドメインコントローラー
  • ドメイン参加済みのメンバーサーバー
  • ドメイン参加済みの Windows クライアント
  • 任意サイズのDドライブ(新機能)

SIer やインフラエンジニアの現場では、こうした検証環境を素早く繰り返し構築できる仕組みは大きな時短になります。GitHubで公開されていますので、ぜひ試してみてください。プルリクエストも歓迎とのことです。