こんにちは!
BFT名古屋支店の、佐野です。
今までお送りしてきた記事で、AnsibleやAnsibleTowerができることや活用できるシチュエーションについてお送りしてきたかと思いますが、実際に何かを行なう場合にどうすればよいかということに関してはまだ扱っておりませんでしたので、今回からはそういった「実際にAnsibleで行なえること」に対する「実施方法」についてお送りしていきます。
手始めとして、Windowsの構成管理を行なう際の準備について以下お送りいたします。
はじめに:Windowsを管理する際の留意点
まずAnsibleでWindowsの構成管理を行なう場合の前提についてお話します。
AnsibleではWindowsの自動構成管理を行なうモジュールが多くサポートされていますが、そのWindowsはAnsibleが主として使用するSSH接続を経由したサーバー管理が想定されていません。
その為、Windowsの構成管理を行なう場合は、一般的にWindowsリモート管理機能であるWinRM(Windows Remote Management)を経由して行うことになります。
AnsibleサーバーがWindows管理対象に接続するためには、Python用WinRMモジュールである「pywinrm」のインストールが必要です。
加えて、構成管理対象とするWindowsは以下の前提条件をクリアしている必要があります。
- 管理対象のWindowsにPowerShell3.0以上がインストール済
- WinRMでコントロールノード(Ansibleサーバー)からの接続が許可されている
- PowerShellのリモート実行が許可されている
- 管理者グループに所属したAnsible接続用ユーザーを登録済
この内、「WinRMでコントロールノード(Ansibleサーバー)からの接続が許可されている」と「PowerShellのリモート実行が許可されている」については、Ansible公式より配布されているセットアップスクリプトを管理対象にて実行することで設定できます。
今回はAnsibleサーバーへのpywinrmのインストール、およびセットアップスクリプトの実行についても説明します。
Ansibleサーバーへのpywinrmインストール
pywinrmについては、pipによって簡単にインストールすることができます。 以下のコマンドをAnsibleサーバー上で実行することで、pywinrmのインストールが行なわれます。
pip install pywinrm
またOSのPythonモジュールに依存した環境としたくない場合は、virtualenvを利用し、Python仮想環境上にpywinrmをインストールするという手段もあります。
WinRM設定用スクリプトの実行
まず管理対象側にAnsible接続用ユーザーでログインを行ない、スタートメニューで「Windows PowerShell」アイコンを右クリック、[管理者として実行]を選択します。
管理者権限でのWindows PowerShell立ち上げ後、以下のコマンドを実行してC:ドライブ配下にtmpディレクトリを作成し、作業場所を作成したtmpに移します。
mkdir C:\tmp cd C:\tmp
tmpディレクトリに作業場所を移動した後、以下のコマンドを実行してセットアップスクリプトのダウンロードを行ないます。
Invoke-WebRequest -Uri https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1 -OutFile ConfigureRemotingForAnsible.ps1
ダウンロードを行なったあと、以下のコマンドを使ってセットアップスクリプトを実行します。
powershell -ExecutionPolicy RemoteSigned .\ConfigureRemotingForAnsible.ps1
ちなみにこのセットアップスクリプトでは、実行すると以下の作業が行われます。
- HTTPS接続用SSL自己証明書の発行
- ファイアウォールの設定
- PowerShellのリモート実行を許可
セットアップスクリプトの実行が成功したら、Windows管理対象側の設定も完了となり、Ansibleで構成管理を行なうことができるようになります。
さいごに
今回はAnsibleでWindowsを管理するための基本的な準備について解説しました。 Windowsの構成管理をAnsibleでやる場合にはまず必要なステップとなります。 また今後お送りする記事の前提としますので、もし最初にどうすればいいか分からなくなった場合はまた見返していただければと思います。