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


何かと手間が掛かかる上に人的ミスの起こりやすいサーバー構築を「Ansible+serverspec」の組み合わせで行ったケーススタディです。
現在進行形の為、備忘録的に書き留めているので、ミスに気付き次第修正をかけていきます。
同様の組み合わせでサーバー構築されている方にとって少しでも参考になれば幸いです。
アドバイス・ご指摘も助かります。

前提条件

サーバ構成図:

※設定するサーバの種類は以下の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によるサーバ構築とサーバテスティング