Memo

メモ > サーバ > 各論: 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
#SELINUX=enforcing SELINUX=disabled … システム起動時にSELinuxを無効化。
環境によっては、epel-release を先にインストールする必要がある。
# 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と呼ばれるファイルに作業内容をまとめて実行するといい。

Advertisement