AnsibleでWindowsサーバーを設定してみた-環境準備編-

いつも手動で実施していたWindows Server 2019の設定を、Ansibleで自動化してみました。
本記事ではまずAnsibleの実行環境を準備していきます。

Ansibleとは

Ansibleとは、システムの構成やソフトウェアの展開などを自動化するオープンソース構成管理ツールのことです。

docs.ansible.com

前提条件

本記事では、以下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をご参照ください。

docs.ansible.com

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の設定をしていきたいと思います!

執筆担当者プロフィール
近藤 結梨香

近藤 結梨香(日本ビジネスシステムズ株式会社)

業務では主にAzureに携わっています。映画好きで良く映画館に籠っています。

担当記事一覧