ニフティクラウドを vagrant のように使える some コマンド

heroku の中の人が作った sumo (相撲)というツールがあります。vagrant のような感覚で amazon ec2インスタンスを作ったり Chef で設定したり削除できたりするやつです。これを修正してニフティクラウドでも使えるようにしてみました。独自の機能もいろいろ追加してあります。
詳しくは上記 github の README を参照していただきたいのですが、ここでは mysql サーバーを立てる例を簡単に説明してみます。

インストール

rubygems からインストールします。

$ gem install some

設定ファイルを書く

~/.some ディレクトリを作成し、~/.some/config.yml に下記の設定を書き込みます。

  • ~/.some/config.yml
---
access_key: XXXXXXXXXXXXXXXXXXXX
secret_key: YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
cookbooks_url: http://some.ncss.nifty.com/cookbooks.tgz
role:
  mysql: |
    {
      "run_list": [
        "recipe[mysql::server]"
      ],
      "mysql": {
        "server_root_password": "mysql",
        "server_debian_password": "mysql",
        "server_repl_password": "mysql",
        "bind_address": "ZZZ.ZZZ.ZZZ.ZZZ",
        "allow_remote_root": true
      }
    }

some コマンド実行

実行するのは 2 つのコマンドのみです。

$ some launch mysql
---> Launch instance...       0ebfa18a (8.4s)
---> Acquire hostname...      AAA.AAA.AAA.AAA (82.5s)
---> Wait for ssh...          done (0.0s)
---> Bootstrap chef...        done (63.3s)
---> Setup mysql...           done (145.4s)
$ some openfw 3306
port 3306 scheduled for open

ここまで終われば SSH ログインができるようになっているし、

$ some ssh AAA.AAA.AAA.AAA
Enter passphrase for key '/home/tily/.some/keypair.pem': (パスワードを入力)
[root@localhost ~]# 

外部から mysql サービスに接続できるようになっています。便利。

$ mysql -h AAA.AAA.AAA.AAA -u root -p
Enter password: (パスワードを入力)
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.1.67-log Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

何が行われているか

簡単に流れを説明します。

$ some launch mysql
  • 存在しなければ something という名前の FW を作成する
  • 存在しなければ something という名前の SSH キーを作成してローカルの ~/.some/keypair.pem に保存する
  • FW=something, SSH キー=something でサーバーを作成する
  • サーバーが起動し SSH が疎通するまで待つ
  • SSH が疎通したら SSH 経由でサーバーに Chef をインストールし /etc/chef/solo.rb を設定する
  • config.yml に書いてある mysql の設定をサーバーの /etc/chef/dna.json に置く
  • config.yml の cookbooks_url から cookbooks を取得し chef-solo を実行する
$ some openfw 3306
  • something FW の 3306 ポートを開放する

という感じです。ちなみに要らなくなったサーバーはコマンド一発で削除することができます。

$ some terminate 0ebfa18a
---> Wait to stop...          done (20.8s)
AAA.AAA.AAA.AAA scheduled for termination

編集後記

自分でガシガシ使えそうなツールが作れたのでよかった。
あと最近 vagrant が流行っているようなんだけど、個人的にはクラウドは面倒を他人に委ねることだから、sumo や cucumber-chef のように本番環境だけでなく検証やテストも外部に委ねられるようになるのが未来だと思っています。