いつも手動で実施していたWindows Server 2019の設定を、Ansibleで自動化してみました。
本記事ではまずAnsibleの実行環境を準備していきます。
Ansibleとは
Ansibleとは、システムの構成やソフトウェアの展開などを自動化するオープンソース構成管理ツールのことです。
前提条件
本記事では、以下2台のAzure仮想マシンを事前に作成しておくことを前提とします。
※本記事では同一のサブネットに作成しています。
- Ansible実行環境用仮想マシン(Red Hat Enterprise Linux 9 ※以下RHEL9と表記)
- Ansibleで操作するWindowsホスト用仮想マシン(Windows Server 2019)
Windowsホストの要件及び設定方法については、詳しくはAnsibleのドキュメントをご参照ください。
Windowsホスト設定
まずは、AnsibleでWindows Server 2019を操作するために必要な設定を行います。
WinRM設定
AnsibleからWindows Server 2019を操作するために、WinRMの設定を行います。
WinRMとはWindows Remote Managementの略称で、Windowsを遠隔操作するための仕組みのことです。
Windows Server 2012以降WinRMは既定で有効になっていますが、Ansibleで使用する場合は追加設定が必要です。
AnsibleがGitHubで公開しているスクリプト「ConfigureRemotingForAnsible.ps1」を使用して、WinRMの基本設定を行います。
前提条件で事前に作成したWindows Server 2019でPowershellを起動し、以下のコマンドを実行します。
$url = "https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1" $file = "$env:temp\ConfigureRemotingForAnsible.ps1" (New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file) powershell.exe -ExecutionPolicy ByPass -File $file
Ansible実行環境の構築
次は、Ansible実行環境の構築をしていきます。
Ansibleインストール
前提条件で事前に作成したRHEL9にSSH接続します。
以下のコマンドを実行し、Ansibleをインストールします。
sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm sudo dnf install -y ansible
Ansibleのバージョンを確認し、正常にインストールできたことを確認します。
ansible --version
筆者の環境ではAnsibleバージョン2.13.3がインストールできました。
pywinrmパッケージインストール
Ansibleを使用してWinRM経由でWindows Server 2019を操作するために、 pywinrmパッケージをインストールします。
python -m ensurepip pip3 install "pywinrm>=0.3.0"
これでAnsibleを実行するためのミドルウェアインストールは完了です。
インベントリーファイル作成
Ansibleではインベントリーファイル(hosts)を作成して、Ansibleで操作するホストを定義します。
既定ではインベントリーファイルの場所は/etc/ansible/hosts
ですが、
今回は新しくディレクトリを作成します。
以下のコマンドを実行し、hostsファイル格納用のディレクトリとhostsファイルを作成します。
cd /home/<SSHしたユーザー名> mkdir -p ansible/inventory/ cd ansible/inventory/ touch hosts
vi hosts
コマンドを実行し、hostsファイルを以下のように編集します。
[windows] # windowsグループを定義 # Windows Server 2019のプライベートIPアドレス xx.xx.xx.xx [windows:vars] # windowsグループ全体に適用するグループ変数を定義 ansible_connection=winrm ansible_user=xxxxx ansible_password=xxxxxx ansible_winrm_server_cert_validation=ignore
簡単に各変数について説明します。
変数名 | 概要 |
---|---|
ansible_connection | [必須] 操作するホストへの接続方法を記載します。 今回は「winrm」と記載します。 |
ansible_user | [必須] 操作するホストへの認証に使用するユーザー名を記載します。 今回はWindows Server 2019のユーザー名を記載します。 |
ansible_password | [必須] 操作するホストへの認証に使用するパスワードを記載します。 今回はWindows Server 2019のパスワードを記載します。 |
ansible_winrm_server_cert_validation | [オプション] サーバー証明書の検証モードを指定します。 今回は自己証明書を構成しないため、「ignore」と記載します。 |
インベントリーファイルの構成については、詳しくはAnsibleのドキュメントをご参照ください。
テスト実行用Playbookの作成
一通り実行環境の準備ができたため、テスト用のPlaybookを作成して実際にWindowsホストを操作できるか確認してみます。
Playbookとは
Playbookとは、操作するホストに対する処理を宣言するファイルのことです。
PlaybookはYAML形式で作成します。
Playbookに関しては、詳しくは以下のURLをご参照ください。
Playbookの作成
それでは実際にPlaybookを作成していきましょう。 RHEL9で以下のコマンドを実行し、Playbookを作成します。
cd /home/<SSHしたユーザー名> cd ansible/inventory/ touch test-playbook.yaml
vi test-playbook.yaml
コマンドを実行し、yamlファイルを以下のように編集します。
--- - hosts: windows # インベントリーファイルで定義したグループ名を記載 tasks: - name: confirmation of connection with hosts win_ping:
テスト用Playbookではwin_pingモジュールを使用して インベントリーファイルに記載したホストに対して疎通確認を行います。
Playbookの実行
テスト用Playbookが作成できたので、実際に実行していきましょう。
Playbook実行には「ansible-playbook」コマンドを使用します。
オプションの「-i」では、hostsファイルのパスを指定します。
ansible-playbookコマンドに関しては、Ansibleのドキュメントをご参照ください。
以下のコマンドを実行し、テスト用Playbookを実行します。
ansible-playbook -i inventory/hosts test-playbook.yaml
実行してみると、OKとなりました!
まとめ
今回はAnsibleでWindows Server 2019を設定するための事前準備についてご紹介しました。
次回は実際にPlaybookを使用してWindows Server 2019の設定をしていきたいと思います!