連載
» 2016年09月29日 05時00分 UPDATE

実際に検証済み!OSS徹底比較(6)サーバテスト自動化【後編】:OSSのサーバテスト自動化ツール徹底検証 2016年版 〜Infrataster編――手間取るテストエビデンス作成をどう自動化するか〜 (1/6)

各種オープンソースソフトウェアのうち、特に人気の高いOSSをピックアップ。実際の検証結果をまとめた本連載。前編で解説したサーバテスト自動化ツール「Serverspec」に続き、今回は「Infrataster」を紹介する。

[森元敏雄,TIS]

はじめに

 現在、一部のIT企業では“Excel方眼紙”で作成されたテスト設計に基づき、テスト実施者が手動でコマンドや画面操作を実行している。そのテスト結果をスクリーンショットの形でExcelシートなどに張り付けて、エビデンスとして記録している例が多い。

 しかし、この作業は内容の割に非常に手間が掛かる上、手作業であるため、コマンドの間違いやスクリーンショットの取り間違えなど、ミスも起こしやすい。とはいえ、テストケース設計自体は省略できない作業だ。ならば、テスト実施とエビデンス作成をサーバテスト自動化ツールで省力化できないか――。

 こうした趣旨の下、前回はサーバテスト自動化ソフトの中でも特に利用者の多い「Serverspec」を紹介した。今回はその後編として「Infrataster」を紹介する。

 検証は「WordPressをインストールしたサーバの、設定や挙動の自動テストを行う」形で実施した。サーバテスト自動化ソフトを実行する環境の構築手順、テストを実施するRubyスクリプトなどの作成方法も含めてまとめているので、可能であれば、実際に環境を構築して動かしてみてはいかがだろう。

検証環境

 前編のServerspec、今回のInfratasterともに、検証は以下の環境で実施した(前編2ページ目の「検証環境」と同じ内容なので、すでに前編を読まれた方は、ここを飛ばして本編に進んでほしい)。

ALT 図1 検証環境の概念図
  1. VMware ESXi上でCentOS 7.2のサーバを2台構築
  2. 双方でテスト実行用ユーザー(maintain)アカウントを作成
  3. Manager→nodeへのsshを、テスト実行用ユーザー(maintain)によって、パスワードなしの鍵認証で接続できる
  4. テスト実行用ユーザー(maintain)でログイン後、sudo/suコマンドをパスワードなしで実行できる
  5. サーバの名前解決ができるように、双方の/etc/hostsにホスト名とIPアドレスを登録している
  6. 各製品を同一環境で検証するために、この状態で双方のサーバのスナップショットを取得している

パスワードなしの鍵認証のログイン

 サーバテスト自動化ツールを実行するためには、テスト実行ユーザーで、管理サーバからノードに対してパスワードなしのssh接続を行える必要がある。

 また、サーバログイン後、テスト実行ユーザーはsudoによって管理者権限でコマンドを実行するが、パスワード認証があると止まってしまうため、sudoもパスワード認証なしに設定する。ただし、sudoコマンドでは管理者権限が付与されるが、実行ユーザーがテスト実行ユーザーのままであるため、本当にrootで実行する必要のあるコマンドがエラーになってしまう。それに対応するにはsu root -cでコマンドを実行する必要がある。よって、テスト実行ユーザーをwheelグループに所属させ、wheelグループに対して、su実行時のパスワードを不要にする設定を行う。

 設定方法については、弊社技術ブログ「Tech-sketch」の記事「パスワード認証無しでSSH接続とsudoとsuを実行する方法」を参照いただきたい。

WordPressインストール用bashスクリプト

 まず、WordPressのインストールが必要となるため、以下のbashスクリプトを作成、実行する。このスクリプトをsudoコマンドで実行することで、必要なパッケージのインストールおよび設定が行われる。本来は不要だが、Infratasterによる外部からの接続試験機能を確認するため、tcpdumpコマンドのインストールと、mariadb-serverの管理サーバログイン許可設定と、ファイアウォールのMySQLサービスのポート解放を追加で行っている。

#!/bin/bash
# Parameter settings
HOSTNAME="`hostname`"
IP_ADDR="`hostname -i`"
MYSQL_ROOT_PASS="FM11AD2+"
WP_OS_USER="root"
WP_OS_GROUP="root"
WP_DB_NAME="WordPress"
WP_DB_USER="wp_admin"
WP_DB_PASS="HB-F1XDJ"
WP_UNIQE_PHRSE="FX702PFX801PPB100FX860PPB700PB500PB750PAI1000"
#WP_LATEST="http://wordpress.org/latest.tar.gz"
WP_LATEST="https://ja.wordpress.org/latest-ja.tar.gz"
# update packages
yum update -y
# install packages
yum install -y wget mariadb-server httpd php php-mysql tcpdump
# start/enable mariadb
systemctl start mariadb
systemctl enable mariadb
# set mariadb root password
mysql <<EOT
update mysql.user set password=password("${MYSQL_ROOT_PASS}") where user = 'root';
flush privileges;
EOT
# restart mariadb
systemctl restart mariadb
# create /root/.my.cnf
cat <<EOT > /root/.my.cnf
[client]
user = root
password = "${MYSQL_ROOT_PASS}"
[mysqladmin]
user = root
password = "${MYSQL_ROOT_PASS}"
EOT
chmod 600 /root/.my.cnf
# restart mariadb
systemctl restart mariadb
# mariadb logrotate setting
sed -i.bak -e '23,$ s/^#//' /etc/logrotate.d/mariadb
# create wordpres db/user
mysql -u root -p${MYSQL_ROOT_PASS} -vvv <<EOT
create user "${WP_DB_USER}"@"localhost" identified by "${WP_DB_PASS}";
create database ${WP_DB_NAME};
grant all privileges on ${WP_DB_NAME}.* to "${WP_DB_USER}"@"localhost";
flush privileges;
EOT
# install wordpress
curl ${WP_LATEST} | tar zx -C /var/www
# create wordpress config
sed -e "s/\(.*\)database_name_here\(.*\)/\1${WP_DB_NAME}\2/" \
    -e "s/\(.*\)username_here\(.*\)/\1${WP_DB_USER}\2/" \
    -e "s/\(.*\)password_here\(.*\)/\1${WP_DB_PASS}\2/" \
    -e "s/\(.*\)password_here\(.*\)/\1${WP_DB_PASS}\2/" \
    -e "s/\(.*\)put your unique phrase here\(.*\)/\1${WP_UNIQE_PHRSE}\2/" \
    /var/www/wordpress/wp-config-sample.php  > /var/www/wordpress/wp-config.php
# chown wordpress files
chown -R ${WP_OS_USER}:${WP_OS_GROUP} /var/www/wordpress
# create wordpres httpd config
cat <<EOT > /etc/httpd/conf.d/wordpress.conf
<VirtualHost *:80>
  ServerName ${HOSTNAME}
  DocumentRoot /var/www/wordpress
  <Directory "/var/www/wordpress">
    AllowOverride All
    Options -Indexes
  </Directory>
  <Files wp-config.php>
    order allow,deny
    deny from all
  </Files>
</VirtualHost>
EOT
# modify httpd config
sed -i.bak -e "s/ServerName www.example.com:80/ServerName ${HOSTNAME}/" /etc/httpd/conf/httpd.conf
# start httpd
systemctl start httpd
systemctl enable httpd
# other server grant setting
mysql -u root -p${MYSQL_ROOT_PASS} -vvv <<EOT
create user 'maintain'@'tissvv097' identified by "${WP_DB_PASS}";
grant all privileges on *.* to 'maintain'@'tissvv097';
flush privileges;
EOT
# open httpd port in firewall
firewall-cmd --add-service=http --zone=public --permanent
firewall-cmd --add-service=mysql --zone=public --permanent
firewall-cmd --reload
# Complete message
echo ""
echo "========================================"
echo "Complete WordPress install"
echo "http://${IP_ADDR}/wp-admin/install.php"
echo "========================================"

 では早速、Infratasterの紹介に入ろう。

       1|2|3|4|5|6 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

Focus

- PR -

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。