OSSのサーバテスト自動化ツール徹底検証 2016年版 〜Infrataster編――手間取るテストエビデンス作成をどう自動化するか〜:実際に検証済み!OSS徹底比較(6)サーバテスト自動化【後編】(1/6 ページ)
各種オープンソースソフトウェアのうち、特に人気の高いOSSをピックアップ。実際の検証結果をまとめた本連載。前編で解説したサーバテスト自動化ツール「Serverspec」に続き、今回は「Infrataster」を紹介する。
はじめに
現在、一部のIT企業では“Excel方眼紙”で作成されたテスト設計に基づき、テスト実施者が手動でコマンドや画面操作を実行している。そのテスト結果をスクリーンショットの形でExcelシートなどに張り付けて、エビデンスとして記録している例が多い。
しかし、この作業は内容の割に非常に手間が掛かる上、手作業であるため、コマンドの間違いやスクリーンショットの取り間違えなど、ミスも起こしやすい。とはいえ、テストケース設計自体は省略できない作業だ。ならば、テスト実施とエビデンス作成をサーバテスト自動化ツールで省力化できないか――。
こうした趣旨の下、前回はサーバテスト自動化ソフトの中でも特に利用者の多い「Serverspec」を紹介した。今回はその後編として「Infrataster」を紹介する。
検証は「WordPressをインストールしたサーバの、設定や挙動の自動テストを行う」形で実施した。サーバテスト自動化ソフトを実行する環境の構築手順、テストを実施するRubyスクリプトなどの作成方法も含めてまとめているので、可能であれば、実際に環境を構築して動かしてみてはいかがだろう。
検証環境
前編のServerspec、今回のInfratasterともに、検証は以下の環境で実施した(前編2ページ目の「検証環境」と同じ内容なので、すでに前編を読まれた方は、ここを飛ばして本編に進んでほしい)。
- VMware ESXi上でCentOS 7.2のサーバを2台構築
- 双方でテスト実行用ユーザー(maintain)アカウントを作成
- Manager→nodeへのsshを、テスト実行用ユーザー(maintain)によって、パスワードなしの鍵認証で接続できる
- テスト実行用ユーザー(maintain)でログイン後、sudo/suコマンドをパスワードなしで実行できる
- サーバの名前解決ができるように、双方の/etc/hostsにホスト名とIPアドレスを登録している
- 各製品を同一環境で検証するために、この状態で双方のサーバのスナップショットを取得している
パスワードなしの鍵認証のログイン
サーバテスト自動化ツールを実行するためには、テスト実行ユーザーで、管理サーバからノードに対してパスワードなしの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の紹介に入ろう。
Copyright © ITmedia, Inc. All Rights Reserved.