こんにちは。福岡オフィスのtakadaです。
福岡の朝のテレビでは、毎日ソフトバンクホークスの宮崎キャンプの模様が流れます。
今朝は、ノースリーブに手袋で練習している柳田選手が紹介されており、あやかってノースリーブに軍手で出社しようと思ったのですが、捕まりそうなので、やめときました。
さて、今回は、はじめて、Ansibleを触ってみました。
Ansibleとは
Ansibleは、ChefやPuppetなどと並ぶ構成管理ツールの一つです。
ChefやPuppetと比較した特徴は、エージェントソフトウェアを管理対象に入れなくても、操作が行える点です。(エージェントレス構成)先月、2016年1月に、新しいバージョンの2.0がリリースされました。
今回、試してみたこと
Ansibleは、Linux系の管理対象では、SSHを使ってエージェントレス構成を実現しますが、Windowsの場合は、Windows Remote
Management(WinRM)というSOAPベースのプロトコルを使用して実現するようです。今回は、実際にWindowsを管理対象として、Ansibleが操作をできるのか、試してみました。
Ansibleのイントールと設定
管理用のサーバを用意して、Ansibleをインストールします。今回は、Amazon Linux AMI 2015.09.2 (HVM), SSD Volume Type - ami-63b25203 を使って構成してみました。
-
Python用のパッケージ管理システムのpipをインストールします。
$ sudo easy_install pip -
Ansibleをインストールします
$ sudo pip install ansible -
Ansibleのバージョンを確認します。
$ ansible --version -
PythonでWinRMを扱うためのモジュールをインストールします。
$ sudo pip install pywinrm -
Windows側の自己証明書の検証をスキップする設定を入れます。
$ sudo mkdir /etc/ansible/callback_plugins
$ sudo vim /etc/ansible/callback_plugins/fix-ssl.pyimport ssl if hasattr(ssl, '_create_default_https_context') and hasattr(ssl, '_create_unverified_context'): ssl._create_default_https_context = ssl._create_unverified_context class CallbackModule(object): pass
$ sudo vim /etc/ansible/ansible.cfg[defaults] bin_ansible_callbacks=True callback_plugins = ./callback_plugins
ここで、callback_plugins = /etc/ansible/callback_plugins を絶対パスで書くように注意します。相対パスで書いた場合、/etc/ansibleがカレントディレクトリでないと、windowsに対する操作が失敗します。 -
管理対象ホストを記載するファイル(Inventory)を作成します。
$ sudo vim /etc/ansible/hosts[windows] 172.31.11.171 [windows:vars] ansible_ssh_user=ここにWindowsユーザ名 ansible_ssh_pass=ここにWindowsユーザのパスワード ansible_connection=winrm
管理対象 Windowsサーバの設定
次に、管理対象となるWindowsサーバを準備します。こちらは、Windows_Server-2012-R2_RTM-Japanese-64Bit-Base-2016.02.10
(ami-17856577)を使って構成しました。
Ansibleで管理するには、PowerShell 3.0以上が必要となります。使用したAMIでは、PowerShell
4.0がインストールされていました。加えて、以下の手順が必要となります。
-
Ansibleから提供されているWindows構成スクリプトをダウンロードします。
PS> mkdir c:tmp
PS> cd c:tmp
PS> Invoke-WebRequest -Uri https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1 -OutFile ConfigureRemotingForAnsible.ps1 -
1でダウンロードしたスクリプトを実行します。
PS> powershell -ExecutionPolicy RemoteSigned .ConfigureRemotingForAnsible.ps
以下のような結果が返ります。wxf : http://schemas.xmlsoap.org/ws/2004/09/transfer a : http://schemas.xmlsoap.org/ws/2004/08/addressing w : http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd lang : ja-JP Address : http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous ReferenceParameters : ReferenceParameters OK
AnsibleからWindowsのローカルユーザアカウント作成
準備ができましたので、実際に管理用サーバからWindowsサーバを操作してみます。今回は、WIndowsサーバ内に新規でユーザアカウント(ansible)を作成してみます。
まず、win_pingモジュールで疎通確認を行います。
$ ansible windows -m win_ping
以下のような結果が返ると、成功です。
172.31.11.171 | success >> { "changed": false, "ping": "pong" }
次に、ユーザアカウントを作成する手順をまとめたファイル(Playbook)を作成して、これを使って操作を実施します。
-
管理用サーバ上の任意の場所に、Playbookファイルを作成します。
$ vim /home/ec2-user/playbooks/win_user_test.yml- name: Add a user hosts: windows gather_facts: false tasks: - name: Add User win_user: name: ansible password: "任意のパスワード" groups: ["Users"]
-
Playbookファイルを指定して、ansible-playbookコマンドを実行します。
$ ansible-playbook /home/ec2-user/playbooks/win_user_test.yml 以下のように、「ok」と「changed」の値が返ってくると成功です。PLAY [Add a user] ************************************************************** TASK [Add User] **************************************************************** changed: [172.31.11.171] PLAY RECAP ********************************************************************* 172.31.11.171 : ok=1 changed=1 unreachable=0 failed=0
Windowsサーバで、ユーザー情報を確認してみます。
上記のとおり、ansibleユーザが作成されました。
まとめ
今回は、AnsibleでWindowsサーバの操作する触りの部分を試してみました。
Ansibleは、この他にも公式ドキュメントにあるように、AWSのEC2、RDS、S3をはじめRoute53やCloudFormationなども操作でき、クラウドプラットフォーム自体の構成管理も行えるようですので、機会があったら試してみたいと思います。
参考文献等
- 廣川英寿「AnsibleからWindowsを操作する」『ソフトウェアデザイン』2016年1月号,p92,技術評論社
- yunano 「AnsibleでWindowsを操作する準備をする」,<http://qiita.com/yunano/items/f9d5652a296931a09a70>
- f_prg 「AnsibleをAmazon Linuxにセットアップする」<http://blog.star-flare.com/2015/04/07/ansible-setup-for-amazon-linux/>