Edited at

Ansible実行環境でserverspecを実行するための実行端末設定

More than 3 years have passed since last update.

何かと手間が掛かかる上に人的ミスの起こりやすいサーバー構築を「Ansible+serverspec」の組み合わせで行ったケーススタディです。

現在進行形の為、備忘録的に書き留めているので、ミスに気付き次第修正をかけていきます。

同様の組み合わせでサーバー構築されている方にとって少しでも参考になれば幸いです。

アドバイス・ご指摘も助かります。


前提条件

サーバ構成図:

システム構成図(Qiita).png

※設定するサーバの種類は以下の3つとする。

APサーバ(以降、dev_apserv01と呼ぶ)

DBサーバ(以降、dev_dbserv01と呼ぶ)

開発管理サーバ兼バッチスケジューラ(以降、dev_adminserv01と呼ぶ)

OS:CentOS 7

事前にノーパスワード設定をしておく。

※現状AnsibleはSSH前提でWindowsからネイティブには接続できないためWindowsにAnsible用のLinuxをインストールする必要がある。


Ansible実行端末設定手順


1.Ansibleインストール

$ yum -y install ansible


2./etc/hostsに接続先サーバを設定

$ vi /etc/hosts

以下を記述する


/etc/hosts

192.168.102.151 dev_apserv01

192.168.102.152 dev_dbserv01
192.168.102.153 dev_adminserv01


3.KEYの生成

$ ssh-keygen -t rsa -N ""

/root/.ssh/id_rsa
/root/.ssh/id_rsa.pub


4.KEY情報を覚える状態に設定

$ eval \`ssh-agent\`

$ ssh-add


5.接続先サーバへの公開キー配布と権限付与

それぞれのサーバに対し、

(1)SSHで接続して.sshフォルダを作成する(すでにある場合は何もしない)

(2)Ansible実行端末の公開キーを信頼するサーバ群として登録する

(2回パスワードを求められる)


  • dev_apserv01への配布

$ ssh root@dev_apserv01  "mkdir ~/.ssh > /dev/null 2>&1;exit"

$ cat /root/.ssh/id_rsa.pub | ssh root@dev_apserv01 "cat > .ssh/authorized_keys && chmod 600 .ssh/authorized_keys"


  • dev_dbserv01への配布

$ ssh root@dev_dbserv01 "mkdir ~/.ssh > /dev/null 2>&1;exit"

$ cat /root/.ssh/id_rsa.pub | ssh root@dev_dbserv01 "cat > .ssh/authorized_keys && chmod 600 .ssh/authorized_keys"


  • dev_adminserv01への配布

$ ssh root@dev_adminserv01 "mkdir ~/.ssh > /dev/null 2>&1;exit"

$ cat /root/.ssh/id_rsa.pub | ssh root@dev_adminserv01 "cat > .ssh/authorized_keys && chmod 600 .ssh/authorized_keys"


6.Ansibleが接続対象サーバ群に自動接続可能かを確認

Ansible接続対象サーバ群をAnsible用のhostsファイルに登録する

$ vi /etc/ansible/hosts

操作するサーバ群をすべて記述


/etc/ansible/hosts

dev_apserv01

dev_dbserv01
dev_adminserv01

[ ]で括って操作するグループ名を作成

後の操作で対象とするサーバをグループ名で指定する為

ここでは将来APサーバが増えることを想定して[webservers]と設定している


/etc/ansible/hosts

[webservers]

dev_apserv01
[dbservers]
dev_dbserv01
[adminservs]
dev_adminserv01
#開発管理サーバはAPサーバのテスト機を兼ねる為、2つを一括設定用にグループ化
[ap_admin]
dev_apserv01
dev_adminserv01
#開発管理サーバはdbservのテスト機を兼ねる為、2つを一括設定用にグループ化
[db_admin]
dev_dbserv01
dev_adminserv01

接続の確認を行う

$ ansible all -m ping

下記が表示されたら接続完了

dev_adminserv01 | success >> {

"changed": false,
"ping": "pong"
}

dev_apserv01 | success >> {
"changed": false,
"ping": "pong"
}

dev_dbserv01 | success >> {
"changed": false,
"ping": "pong"
}


7.SSH-agentが自動起動するよう設定

$ vi /etc/profile.d/init.sh

以下を記述


/etc/profile.d/init.sh

eval \`ssh-agent\`

ssh-add


8.SSH-agentがログアウト時にKILLされるよう設定

$ vi /root/.bash_logout

以下を記述


/root/.bash_logout

ssh-agent -k



9.コマンドヒストリを端末間で共有

$ vi /etc/profile.d/init.sh

以下を記述


/etc/profile.d/init.sh

function share_history {

history -a
history -c
history -r
}
PROMPT_COMMAND='share_history'
shopt -u histappend
export HISTSIZE=9999


10.環境変数の再読み込み

$ source /etc/profile.d/init.sh

以上でAnsible実行端末設定が完了です。

次回は、「Ansible実行環境でserverspecを実行するためRuby実行環境を構築する」について記述します。



目次:Vagrant-Ansible-Serverspecによるサーバ構築とサーバテスティング