メモ > サーバ > 各論: Ansible > 環境構築
環境構築
■Vagrant起動
※サーバを2台立ち上げ、一方のサーバからもう一方のサーバを操作する例。
1台だけ立ち上げて、自身のサーバを操作する場合はこのファイルの「ローカルで検証」を参照。
以下のようにVagrantfileを作成する。
Vagrant.configure(2) do |config|
config.vm.box = "centos72"
config.vm.box_check_update = false
config.vm.define "controller" do |node|
node.vm.hostname = "controller.localhost"
node.vm.synced_folder "./controller", "/var/code"
node.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2210
node.vm.network "private_network", ip: "192.168.33.10"
end
config.vm.define "target" do |node|
node.vm.hostname = "target.localhost"
node.vm.synced_folder "./target", "/var/code"
node.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2211
node.vm.network "private_network", ip: "192.168.33.11"
end
end
通常通り vagrant up を実行すると、controller と target の2台サーバが起動される。
それぞれ以下でアクセスできる。(起動直後はもちろん、HTTPではアクセスできない。)
ポート: 2210
鍵: C:/vagrant/multi/.vagrant/machines/controller/virtualbox/private_key
ポート: 2211
鍵: C:/vagrant/multi/.vagrant/machines/target/virtualbox/private_key
http://192.168.33.10/
http://192.168.33.11/
なお、このサーバは vagrant halt のコマンドで停止することができ、vagrant destroy のコマンドで破棄することができる。
その後再度 vagrant up を実行すると、再度まっさらなサーバを起動できる。
■controllerからtargetへのSSH接続を確認
$ hostname
controller.localhost
$ ssh -p 22 vagrant@192.168.33.11 … targetに接続。
The authenticity of host '192.168.33.11 (192.168.33.11)' can't be established.
ECDSA key fingerprint is 7a:f6:47:1b:a9:04:c8:c6:90:d5:8c:48:14:03:d3:64.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.33.11' (ECDSA) to the list of known hosts.
vagrant@192.168.33.11's password: vagrant
Last login: Tue Sep 18 13:21:48 2018 from 10.0.2.2
$ hostname
target.localhost
$ exit … targetから抜ける。
以降、すべてcontrollerでの操作。
■Ansibleのインストール
$ sudo su -
環境によってはSELinuxが有効になっているので、あらかじめ無効化しておく必要がある。
Ansibleで無効化する方法は、後述の「SELinuxを無効化」を参照。
# getenforce
Enforcing … SELinuxが有効。
# setenforce 0 … SELinuxを無効化。
# getenforce
Permissive … SELinuxが無効。
# vi /etc/sysconfig/selinux
環境によっては、epel-release を先にインストールする必要がある。
#SELINUX=enforcing
SELINUX=disabled … システム起動時にSELinuxを無効化。
# yum -y install epel-release
以下の手順でAnsibleをインストールできる。
# python --version … Python2.6以降がインストールされていることを確認。
Python 2.7.5
# yum -y install ansible … Ansibleをインストール。
# ansible --version
ansible 2.7.1 … 以下の手順は2.7の際に作成したが、2.8でも変化は同じように使えるみたい。
# exit
※管理対象のサーバにもPython2.4以降が必要。
■Ansibleの接続テスト(vagrantユーザでの接続)
$ ssh-keygen -t rsa … RSAで鍵を作成。デフォルトの場所に作成。今回パスフレーズは入力しない。
$ ssh-copy-id vagrant@192.168.33.11 … 対象サーバに公開鍵を渡す。(渡す際に vagrant のパスワードを入力する。)
$ ssh vagrant@192.168.33.11 … targetに接続。(パスワード無しで接続できる。)
$ exit … targetから抜ける。
Linuxコマンド【 ssh-keygen 】認証用の鍵を生成 - Linux入門 - Webkaru
https://webkaru.net/linux/ssh-keygen-command/
ssh-copy-idで公開鍵を渡す - Qiita
https://qiita.com/kentarosasaki/items/aa319e735a0b9660f1f0
■管理対象の登録
$ sudo su -
# vi /etc/ansible/hosts … webserversの項目と、管理対象のIPアドレスを追加。
■疎通確認
[webservers]
192.168.33.11
# exit
$ ansible all -m ping … vagrantユーザで、すべてのサーバにPINGを実行。
192.168.33.11 | SUCCESS => {
"changed": false,
"ping": "pong"
}
$ ansible webservers -m ping … WebサーバにPINGを実行。
$ ansible webservers -a "/bin/date" … 日時を表示する場合。
$ ansible webservers -m copy -a "src=/home/vagrant/from.txt dest=/home/vagrant/to.txt" … ファイルを転送する場合。(from.txt はあらかじめ作成しておく。)
$ ansible webservers -a "mkdir /home/vagrant/test" … ディレクトリを作成する場合。
※「-m」オプションは「指定したモジュールを実行」の意味。
「-a」オプションは「指定したコマンドを実行」の意味。
※「"mkdir /root/test"」の指定で実行はできるが、「fileモジュールを使いましょう」と表示される。
fileモジュールを使って後述のPlaybookを記述すると、変更がない場合はディレクトリの再作成は行われない。
ただし自力でコマンドを記述していると、実行のたびにディレクトリは再作成される。
冪等性を保つためにも、可能なものは用意されているモジュールを使うことを推奨。
ただし、shellモジュールやcommandモジュールはAnsible側で冪等性を担保できないため、利用には注意が必要。
ここまで来れば、Ansibleでサーバを操作できる。
サーバの操作は1コマンドごと実行することもできるが、Playbookと呼ばれるファイルに作業内容をまとめて実行するといい。