sunzi を試してみる

VM にサーバを構築して必要なミドルウェアやソフトウェアをインストールするというのが、たまに発生する。
# 「たまに」というのがポイント


VM のイメージを起動してサーバをたてるのは割と簡単に出来るんだけど、毎回毎回いちいち yum install とかするのがめんどくさい。
こういう場合は Chef や Puppet を使うのが王道なんだろうけど、前述の通りたまに発生するだけなので、Chef とかは大げさすぎる。

というような事を呟いたら [twitter:@gosukenator] さんに sunzi というのを教えて頂いた。ありがとうございます!


Github の Readme を読んだ限り自分のやりたい事がそのまま実現されてた。
sunzi がデプロイ先サーバの $HOME/sunzi っていうディレクトリを自動で作り、そこにシェルスクリプトを転送し、そのシェルスクリプトをリモートで実行するという仕組みのよう。


ちょうどサーバ構築した直後で、モジュールやライブラリを入れる必要があったので、sunzi を使ってやってみた。
まずは sunzi をローカルの環境にインストール。

$ vim Gemfile
source 'https://rubygems.org'

gem 'sunzi'

bundle を実行し、sunzi のプロジェクトを実行する。

$ bundle install --path vendor/bundle
$ bundle exec sunzi create

roles にデフォルトのがあるので削除した。

$ rm recipes/*

sunzi.yml を編集。
rvm は使わないので rvm の項目をコメント。


続いて install.sh を編集。

#!/bin/bash
source recipes/sunzi.sh
source recipes/ssh_key.sh $(cat attributes/ssh_key)
source roles/httpd.sh
sunzi::silencer "yum -y install httpd"
source roles/python.sh
sunzi::silencer "Install Python pip modules"

httpd.sh と python.sh を作る

# Install Web Server
yum install -y httpd
yum install -y httpd-devel
yum install -y mod_ssl
yum install -y mod_wsgi
yum install -y python-devel
yum install -y python-pip.noarch
yum install -y libevent.x86_64
yum install -y libevent-devel.x86_64
easy_install pip
pip install redis
pip install pycrypto
pip install requests

pip freeze したやつとかの方が良いと思うけど、とりあえず。

$ bundle exec sunzi deploy 192.168.1.10

これを実行するとリモートで実行したログがローカルに表示される。
結果 yum でパッケージが入り、Python のモジュールもインストールでき、ついでに自分の公開鍵も authorized_keys に追加してくれた。
今回は試さなかったが、設定ファイルに特定の値を埋め込んだりできるよう。


数台のサーバを構築するという目的の場合とてもライトウェイトで良い。
複数台のサーバを並列に構築するとか、規模が 10 台を超えるのを一気にとかの場合は、Chef や Puppet や Salt Stock を使うのが良さそう。