Ansibleを利用してwindowsOSのインスタンスを操作する方法


この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

皆様こんにちは。
今回はAnsibleを利用してwindowsOSのインスタンスを操作する方法をご紹介したいと思います。

1.前提条件

こちらで作成したAnsibleインストール済みのインスタンスを利用します
・前回とは違い、インスタンスは外部に接続できる体で話を進めます。
・WindowsOSインスタンスで使用するAMIは「Microsoft Windows Server 2019 Base 」
・WindowsOSインスタンスのセキュリティグループのインバウンドルールは、RDP(ポート番号:3389)とWinRM(ポート番号:5986)を許可するように設定
・それ以外の設定はデフォルトです

2.windowsOSのインスタンスを操作する前に必要な準備

AnsibleがwindowsOSに接続する際は、SSHではなくWinRMを利用します。WindowsOSはデフォルトでSSH接続ができないためです。

そのためコントロールノードと管理対象ノード(WindowsOS)両方でWInRMの設定する必要があります。

2-1.windowsOSのインスタンスでのWinRM設定

windowsOSのインスタンスを作成出来たらRDPで接続して、PowerShellを起動します。

Windows側でのWinRMのセットアップスクリプトを公式が提供しているので以下のコマンドでダウンロードします。

Invoke-WebRequest `
   -Uri https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1 `
   -OutFile ConfigureRemotingForAnsible.ps1

ダウンロードできたら以下のコマンドで実行します。

powershell -ExecutionPolicy RemoteSigned .\ConfigureRemotingForAnsible.ps1

これでWindows側でのWinRMの設定は完了です。

2-2.コントロールノードでのWinRM設定

コントロールノードにはPythonパッケージのpywinrmをインストールする必要があります。
Ansibleはpywinrmを利用し、PythonからWinRM経由でWindowsOSにplaybookを実行します。

まずTeraTermを利用し前回AnsibleをインストールしたインスタンスにSSHで接続します。

接続出来たらpywinrmをインストールするために、以下のコマンドを使用します。

pip3 install pywinrm

また以下のコマンドでインストールを確認します。

pip3 list | grep pywinrm

出力

pywinrm            0.4.3

確認できました。

これでコントロールノードでのWinRM設定も完了しました。

3.AnsibleからwindowsOSのインスタンスを操作

準備ができましたら、TeraTermを利用し前回AnsibleをインストールしたインスタンスにSSHで接続します。

接続したら検証用ディレクトリに移動します、今回もこちらのディレクトリで作業します。

cd ansible-test

移動出来たら前回使用したインベントリファイルを以下のコマンドで編集します。

vi hosts

以下の内容に変更します。

[target]
172.31.41.57

[target:vars]
ansible_user=Administrator
ansible_password=xxxx
ansible_connection=winrm
ansible_port=5986
ansible_winrm_server_cert_validation=ignore

windowsインスタンスのIPや、Windowsにログインするための情報を記載しています。
また通信手段にwinrmを使用するようにも設定しています。

次にWindowインスタンスに対し、テストフォルダの作成を実行するplaybookを以下のコマンドで作成します。

vi testplaybook3.yml

以下の内容で保存します。

- hosts: target
  gather_facts: false
  tasks:
  - name: test
    ansible.windows.win_file:
      path: C:\Users\Administrator\test
      state: directory

tasksの内容は以下になります。
name:tasksの名前を設定しています
ansible.windows.win_file:ディレクトリの作成場所を定義しています。

playbookの作成ができたら、以下のコマンドで実際に実行してみましょう。

ansible-playbook -i hosts testplaybook3.yml
PLAY [target] *****************************************************************

TASK [test] ********************************************************************
changed: [172.31.41.57]

PLAY RECAP *********************************************************************
172.31.41.57               : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

playbookの実行を確認できました。

最後にwindowsインスタンスにRDPで接続し、テストフォルダが作成されているか確認します。
file
指定のパスにテストフォルダが作成されていることを確認できました。

これで今回のブログの内容は以上です。

4.感想

Ansible利用調査の内容は今回で以上になります。
次回もよろしくお願いします。

5.参照

ansible – ansible.windows.win_file module
https://docs.ansible.com/ansible/latest/collections/ansible/windows/win_file_module.html

Last modified: 2022-06-17

Author