残念ながらAnsibleをWindowsでネイティブに動かす方法は見つかりませんでした。
ですので、Vagrantによって動かしましたので、エントリーとして残します。
本エントリーは下記環境で実施しています。
Windows OS | Windows 10 Pro |
---|---|
Vagrant Version | 2.0.1 |
Virtual Box Version | 5.2.2 r119230 (Qt5.6.2) |
Box Image | ubuntu/trusty64 |
- 必要なソフトウェアのインストールとセットアップ
- Vagrantによる仮想サーバの起動
- Ansibleのセットアップ
- 仮想サーバ環境をPackage化する
- ハマりポイント
- Ansible コマンド例
- 便利なVagrantの自動起動設定
- 感想
- 参考サイト
必要なソフトウェアのインストールとセットアップ
- Vagrant
Install | Vagrant | HashiCorp Developer
- Virtual Box
Oracle VM VirtualBox - Downloads | Oracle Technology Network | Oracle
Vagrantによる仮想サーバの起動
1. 必要なboxの取得
今回はUbuntuを利用しました。下記のサイトからboxイメージを取得。(今ならxenialのほうがいいかもしれません)
Vagrant box ubuntu/trusty64 - Vagrant Cloud
# trusty64 vagrant box add ubuntu/trusty64 https://app.vagrantup.com/ubuntu/boxes/trusty64 # xenial64 vagrant box add ubuntu/xenial64 https://app.vagrantup.com/ubuntu/boxes/xenial64
2. 仮想サーバの初期化
rem Vagrantfileの配置先は任意 cd /D d:\vagrant mkdir ubuntuTrusty64-20170920.0.0 vagrant init ubuntu/trusty64
3. Vagrantfileの修正
指定したプライベートIPアドレスでアクセスできるように下記の35行目辺りをコメントアウトを外す。
config.vm.network "private_network", ip: "192.168.33.10"
4. Vagrantの起動
vagrant up
5. 仮想サーバに接続
vagrant ssh
無事に仮想サーバに接続できればOK!
(2018/7/5追記)6. PasswordAuthenticationの有効化
vagrantサーバーにsshクライアントから接続することに時間をかけたくないので、
今回はPasswordAuthenticationを有効にします。
これにより、vagrantのデフォルトユーザーでsshクライアントをすぐに利用することが可能
# 仮想サーバーに接続 vagrant ssh # ここからbashなどの操作になる。 # Ubuntuの場合、sshd_configを修正 sudo su cd /etc/ssh/ vi sshd_config # 52行目付近 PasswordAuthenticationをyesに PasswordAuthentication yes # sshdの再起動 /etc/init.d/ssh restart
Ansibleのセットアップ
1. インストール
今回はUbuntuサーバにインストールするため、下記サイトを参考にしました。
Installing Ansible — Ansible Community Documentation
sudo apt-get update sudo apt-get install software-properties-common sudo apt-add-repository ppa:ansible/ansible sudo apt-get update sudo apt-get install ansible
下記コマンドを実行して、無事にAnsibleがインストールされていることを確認
ansible --version
仮想サーバ環境をPackage化する
これまでセットアップした仮想サーバ環境をPackage化して保存しておく。
Vagrantの真髄ですね。
1. Vagrantの起動状態を確認
rem Vagrantファイルがあるディレクトリで実行する vagrant status
2. 起動中のVagrantを停止する
vagrant halt
3. boxを作成する
vagrant package --output ubuntuAnsible.box
↓Package化できた!これで配布できます!
ハマりポイント
1. Vagrantサーバからの各サーバにSSHアクセスする時に、passphraseを設定していないのに聞かれて、接続できない。
Ansibleの問題というより、自分のUbuntuサーバのセットアップ知識が足りないだけなのですが、
ssh-agentコマンドを実行することで、passphraseを聞かれないようにすることができます。
# 下記のコマンドを入力することで、SSHアクセス時にpassphraseを聞かれるのをスキップできる ssh-agent bash ssh-add
Ansible コマンド例
Pingを通してみる
コマンド例:
# IPアドレスと公開鍵を直接指定する方法 ansible {ホストIPアドレス} -m ping -u {接続先ホストのユーザー名} --private-key="{公開鍵のファイル名}" # 予め用意したホストファイルを利用する方法 ansible {グループ} -i {ホストファイル名} -m ping
yum updateのdry runコマンドをplaybookから実行してみる
コマンド例:
# ホストファイルのみ指定して直接yum updateを実行する方法 ansible {グループ} -i {ホストファイル名} -K -m yum -a "name=* state=latest" --check # 予め用意したPlayBookを利用する方法 ansible-playbook -i {ホストファイル名} -K {playbookファイル名} --check
yum updateのPlayBookの例:
- name: yum update yum: name: * state: latest notify: reboot by handler
handlerの例:
この場合、yum update完了後に再起動する。
- name: reboot by handler command: "/sbin/shutdown -r now"
接続先サーバのPythonのバージョンを確認してみる
ansible {グループ} -i {ホストファイル名} -K -m shell -b -a "python --version"
便利なVagrantの自動起動設定
Windows
下記のbatファイルを作成し、タスクスケジューラにてログイン時に起動するよう設定しておくと便利
rem "%vagrant_startup_dir%"は環境変数 cd /D %vagrant_startup_dir% vagrant up
感想
Ansibleは大量のPlayBookがGitHubなどに転がっており、
初回のサーバー接続設定さえ滞りなく完了させれば、その後の学習コストは低いと思います。
何より、エージェントレスであり、
ローカル環境のセットアップでも利用できますので、
普段から使っていきたいと思える構成管理ツールですね!
使っていて楽しいです!
これからも、Infrastructure As Codeを試み続けていきたいと思います!