AnsibleからWindowsホストを操作する方法とは?使用例も紹介!

    • このページをはてなブックマークに追加

    公開日:2021年06月24日 最終更新日:2021年06月24日

    AnsibleからWindowsホストを操作する方法を知りたい方、必見です。この記事では、AnsibleからWindowsホストを操作する方法やインストールコマンドを解説します。また、Ansibleによる使用例も紹介します。Windowsホストを操作してみたい方は、ぜひ参考にしてください。

    1. AnsibleでWindowsホストを操作するには?

    構成管理ツール「Ansible」は、インフラ構築の自動化に適したRed Hat社が開発するツールです。
    ネットワークやサーバなどの構築、管理、運用に広く活用されており、特にサーバーサイドエンジニアやネットワークエンジニアはAnsibleを学習することで担当できる案件の幅も広がりやすいです。


    Ansibleについてはこちらの記事でも解説しています。


    またプロエンジニアでもAnsibleのフリーランス案件を多数取り扱っています。参考にご覧ください。

    今回は、AnsibleでWindowsホストを操作する方法について解説します。

    ▲ページトップへ戻る

    1.1 【Windows向け】Ansibleによる使用例

    まずはAnsibleでWindowsホストを操作・管理した際の使用例を紹介します。

    • MSIファイルを用いたインストールとアンインストール
    • Windowsの標準機能の有効や無効の切り替え
    • Windowsレジストリの設定変更
    • Windows サービスの開始・停止
    • Windows サービスの追加・管理
    • WindowsOSのローカルユーザーとグループの作成と管理
    • ドメイン及びドメインに参加するユーザーの管理
    • ソフトウェア管理自動化ツール※1 による Windows パッケージの管理
    • Windows Updateの実行管理
    • WindowsホストへのPowerShell スクリプトの配置と実行

    ※1 Chocolateyと呼ばれるWindows専用パッケージマネージャーです。依存関係があるソフトウェアを含めて、ソフトウェアのインストールと更新が行えます。


    ▲ページトップへ戻る

    1.2 基本的なAnsibleによるWindows操作の流れ

    AnsibleからWindowsホストを操作するには、WindowsホストにWinRM(Windows Remote Management)をAnsibleが稼働する環境にPywinrmをインストールする必要があります。

    WinRMとはWindowsの機能で、インターネットを経由して、WindowsOSの管理情報に接続・変更できる機能です。Pywinrmとは、Pythonで作られたLinuxからWindowsコマンドを実行するアプリケーションです。

    それではインストールの流れを順に解説します。

    ▲ページトップへ戻る

    1.3 ホスト要件

    まずAnsibleで操作するWindowsのホスト要件を満たしているか、最新情報を確認することが必要です。

    ホスト要件はWindowsOSのサポート状況などによってホスト要件がアップデートされる可能性があります。また、サポートされていないWindowsホストをAnsibleで操作しようとした場合、動作しない可能性も考えられます。

    AnsibleでWindowsホストを操作できるよう環境設定を行う場合は必ず公式サイトで最新情報をチェックしましょう。

    ホスト要件|Ansible公式サイト

    ▲ページトップへ戻る


    1.3.1 Windowsホスト要件の確認

    2021/06時点でAnsibleを利用する上でWindowsホストが満たす必要がある条件は以下の通りです。

    【1】いずれかのOSであること

     ■ デスクトップOS

    • Windows 7
    • Windows 8.1
    • Windows 10

     ■ サーバーOS

    • Windows Server 2008
    • Windows Server 2008 R2
    • Windows Server 2012
    • Windows Server 2012 R2
    • Windows Server 2016
    • Windows Server 2019

    【2】Windowsホストで以下の機能が利用可能な状態であること

    • PowerShell 3.0 以降
    • .NET Framework 4.0 以降

    【3】WinRMでAnsibleが利用するリスナーを作成し、有効化していること

    ▲ページトップへ戻る


    1.3.2 PowerShell および .NET Framework

    Windowsホストには、AnsibleがサポートしているバージョンのPowerShellと.NET Frameworkがインストールされている必要があります。

    • PowerShell 3.0 以降
    • .NET Framework 4.0 以降

    上記のバージョンより古い場合はアップデートが必要です。次の手順でアップデートします。

    【1】PowerShellでGitHubよりアップデート用のスクリプトファイルをダウンロードし、ダウンロードしたスクリプトを実行する

    $githubUrl = "https://raw.githubusercontent.com/jborean93/ansible-windows/master/scripts/Upgrade-PowerShell.ps1"
    $scriptFile = "$env:temp\Upgrade-PowerShell.ps1"
    $username = "winserver01_user"
    $password = "winserver01_pass"
    
    (New-Object -TypeName System.Net.WebClient).DownloadFile($githubUrl, $scriptFile)
    Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Force
    &$scriptFile -Version 5.1 -Username $username -Password $password -Verbose
    

    【2】スクリプトを実行する際に変更した実行ポリシーをデフォルトに戻す

    Set-ExecutionPolicy -ExecutionPolicy Restricted -Force
    
    $reg_winlogon_path = "HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Winlogon"
    Set-ItemProperty -Path $reg_winlogon_path -Name AutoAdminLogon -Value 0
    Remove-ItemProperty -Path $reg_winlogon_path -Name DefaultUserName -ErrorAction SilentlyContinue
    Remove-ItemProperty -Path $reg_winlogon_path -Name DefaultPassword -ErrorAction SilentlyContinue
    

    ▲ページトップへ戻る


    1.3.3 WinRM

    WinRMとは、Microsoftが提供するWindowsの管理機能です。Ansibleでは、Windowsホストを操作するためにWinRMを利用します。

    WinRMを利用することで、別の端末からインターネットを経由して、WindowsOSに接続し、管理情報を閲覧したり、変更したりすることが可能です。WinRMの設定方法は次の見出しで解説します。

    ▲ページトップへ戻る

    2. WinRMの設定方法

    WinRMの設定はPowerShell 3.0 以降のアップデートが完了した環境に実施します。実施する手順は次の通りです。

    • Ansibleとの基本設定の作成
    • WindowsホストのあわせてWinRMリスナーの設定

    それでは、詳しく解説します。

    ▲ページトップへ戻る

    2.1 WinRM のセットアップ

    AnsibleからWindowsホストに接続・管理するためのリスナーとサービスを作成します。基本設定は以下のAnsible公式がGitHubで提供しているスクリプトで設定可能です。

    基本設定をセットアップするコマンドは以下の通りです。

    $githubUrl = "https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1"
    $scriptFile = "$env:temp\ConfigureRemotingForAnsible.ps1"
    
    (New-Object -TypeName System.Net.WebClient).DownloadFile($githubUrl, $scriptFile)
    
    powershell.exe -ExecutionPolicy ByPass -File $scriptFile
    

    <注意事項>
    基本設定ではBasic認証などが有効になっているため、運用環境でのご利用はお控えください。

    ▲ページトップへ戻る

    2.2 WinRMリスナーの確認

    先ほど作成したWinRMリスナーが実行されているか、確認します。

    winrm enumerate winrm/config/Listener
    

    ▲ページトップへ戻る

    2.3 WinRMのリスナーの設定

    環境構成に応じて、WinRMのリスナーに設定します。設定方法は次の3つがあります。


    2.3.1 winrmコマンドを利用する方法

    AnsibleとWindowsホストの接続プロトコルに応じて次のwinrmコマンドを実行します。

    <HTTP接続の場合>

    winrm quickconfig
    

    <HTTPS接続の場合>

    winrm quickconfig -transport:https
    

    ▲ページトップへ戻る


    2.3.2 グループポリシーオブジェクトを使用する方法

    Windowsホストがドメインのメンバーの時に利用する方法です。
    グループポリシーオブジェクトの詳細はMicrosoftの公式サイトよりご確認にしてください。

    Group Policy Objects|Microsoft公式サイト

    ▲ページトップへ戻る


    2.3.3 WinRM用のリスナーを作成する方法

    PowerShellを実行して、WinRM用のリスナーを作成します。

    PowerShellの実行例は次の通りです。

    $selector_set = @{
        Address = "*"
        Transport = "HTTPS"
    }
    $value_set = @{
        CertificateThumbprint = "E6CDBB82EEAF2ECE8546E05DB7F3E01BB47D76CE"
    }
    
    New-WSManInstance -ResourceURI "winrm/config/Listener" -SelectorSet $selector_set -ValueSet $value_set
    

    他にもオプションがあり、オプションの内容を確認したい方は、Microsoftの公式サイトよりご確認ください。

    New-WSManInstance|Microsoft公式サイト

    ▲ページトップへ戻る

    3. Pywinrmのインストール

    AnsibleはPywinrmというLinuxからWindowsコマンドを実行できるアプリケーションを利用して、Windowsホストを操作します。Pywinrmは、LinuxOSに標準搭載されておらず、Ansibleとの依存関係もありません。

    そのため、Ansibleとは別にPywinrmをインストールする必要があります。Ansibleのセットアップが完了した環境にてpip※2 を利用して、Pywinrmをインストールします。

    【1】Pywinrmをインストールする

    $ pip install pywinrm
    

    【2】インストールできたか、確認する

    $ pip3 list | grep pywinrm
    pywinrm         0.4.2
    

    ※2 pipとは、Pythonで作成されたパッケージをインストールする際などに利用するユーティリティです。


    ▲ページトップへ戻る

    4. インベントリーファイルのセットアップ

    Ansibleのイベントリーファイルに操作するWindowsホストを設定します。イベントリーファイルの形式によって書き方が異なります。お使いのファイル形式をご参考にしてください。

    ▲ページトップへ戻る

    4.1 INI形式で書いた場合

    イベントリーファイルに次の形式で記述します。

    [windows]
    winserver01.sample.com
    
    [windows:vars]
    ansible_user=winserver01_user
    ansible_password=winserver01_pass
    ansible_port=5986
    ansible_connection=winrm
    ansible_winrm_server_cert_validation=ignore
    

    ▲ページトップへ戻る

    4.2 YAML形式で書いた場合

    イベントリーファイルに次の形式で記述します。

    windows:
      hosts:
        winserver01.sample.com:
          ansible_connection: winrm
          ansible_user: winserver01_user
          ansible_password: winserver01_pass
          ansible_winrm_server_cert_validation: ignore
    

    ▲ページトップへ戻る

    5. 接続のテスト

    最後にAnsibleからWindowsホストに接続できるか、テストします。

    $ ansible windows -i hosts -m win_ping
    winserver01.sample.com | success => {
        "changed": false, 
        "ping": "pong"
    }
    

    Windowsホスト名もしくはIPアドレスの右に「success」と表示されたら、Ansibleとの接続成功です。
    接続に成功しなかった場合は、Ansible公式サイトのトラブルシューティングをご参考にしてください。

    一般的なWinRMの問題|Ansible公式サイト

    ▲ページトップへ戻る

    6. Ansibleで使用可能なWindowsモジュールについて

    AnsibleはPlayBook(プレイブック)という自動化したい処理をYAML形式のファイルに記述します。
    Windowsホストに対してはPlayBookに記述された内容をモジュールが実行します。

    プロセスの実行までの流れは、AnsibleからWinRM経由でホストにモジュールをコピーした上で、PlayBookに記述された状態になるようにプログラムを実行するという流れです。
    ご利用のOSや機器、クラウドサービスによって、利用できるモジュールが異なります。

    ▲ページトップへ戻る

    6.1 Windows Server モジュールの一覧

    AnsibleではAnsible Collectionより数多くのモジュールを提供しています。

    Ansibleで提供しているモジュールはAnsible公式サイトにて一覧で紹介しております。
    もっとモジュールを詳しく知りたい方は、ご確認ください。

    Ansible.Windows|Ansible公式サイト

    ▲ページトップへ戻る

    6.2 Windows Server モジュールの例

    Ansible 2.10で利用できるモジュールの一例を紹介します。

    win_acl ファイルやディレクトリ・レジストリへのアクセス許可の管理
    win_command Windowsホスト上でのコマンドの実行
    win_copy Windowsホストへファイルのコピー
    win_file ファイルまたはディレクトリの作成、変更・削除
    win_find 特定の条件に該当するファイルの検索
    win_get_url Windowsホストへのファイルのダウンロード
    win_reboot Windowsホストの再起動
    win_regedit レジストリのキーと値の追加・変更・削除
    win_service windowsサービスの管理
    win_updates WindowsUpdateのモジュールをダウンロード後、インストール
    win_user Windowsホストのユーザーアカウントの管理
    win_user_right Windowsホストのユーザー権限の管理

    ▲ページトップへ戻る

    6.3 目的に合致するモジュールの探し方

    目的にあったWindows Serverのモジュールの探し方を2種類解説します。モジュールを探す際にぜひ参考にしてください。


    6.3.1 Ansible公式サイトから探す

    Ansible公式サイトにWindowsのモジュールと概要が一覧で掲載されていますので、その一覧から探す方法です。

    掲載内容は英語ではありますが、公式サイトと一番信頼がおけるサイトなので、おすすめします。

    Windows modules|Ansible公式サイト

    ▲ページトップへ戻る


    6.3.2 インターネットで検索する

    Googleなどの検索エンジンで「Ansible Windows module」といったキーワードで検索し、実行例を探す方法です。いろいろなサイトを横断して検索できるので、便利です。

    その一方で、AnsibleとWindowsホストの組合せによっては利用できない可能性があります。
    そのため、公式サイトでご利用のAnsibleとWindowsホストがサポートされているバージョンか、確認することをおすすめします。

    ▲ページトップへ戻る

    7. まとめ

    今回は、AnsibleでWindowsホストを操作する方法について解説しました。Windowsホストを操作する前に、次の準備が必要です。

    ■ Windowsホスト側
     • WinRMのセットアップ
    ■ Ansible側
     • Pywinrmのインストール
     • インベントリーファイルのセットアップ

    準備はありますが、AnsibleでWindowsホストを操作できるようになるので、興味がある方は、ぜひ試してみてください。

    ▲ページトップへ戻る


    Ansible関連の求人情報をチェック!

    最新の求人情報をチェック!

    月額単価80万円〜90万円
    勤務地 東京都 北区
    勤務地 埼玉県
    • このページをはてなブックマークに追加

    おすすめ記事

  • ピックアップ

    正社員

    【Linux】インフラエンジニア|各種システムの要件定義・運用保守 NEW

    年収 :300万円〜

    新規サービスの開発支援、及びメンテナンス自社での新規に検討している製品、サービスの開発 顧客サポ...

    株式会社デジタルトランスフォーメーション

    正社員

    【インフラエンジニア】セキュリティシステムの設計・構築

    年収 :300万円〜700万円

    設計・構築をメインとした作業を主に担っています。 インフラエンジニアとして保守だけにとどまりたく...

    株式会社クオリアシステムズ

    フリーランス

    【サーバーエンジニア】国内最大手のクレジットカード会社向けクラウドシステム運用保守

    月額単価 :50万円〜60万円

    ・サーバ運用保守 ・障害対応/メンテナンス/QA対応 【環境】 ・OS:OracleLinux/RHEL/Windows(...

    フリーランス

    【Solaris/Linux/Windows】インフラエンジニア★インターネット公開システムの運用保守

    月額単価 :80万円〜90万円

    インターネット公開システムの運用保守業務(基盤) 運用支援対象の2システムを基盤担当3名で担当頂き...