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