ニフティクラウドを vagrant のように使える some コマンド
heroku の中の人が作った sumo (相撲)というツールがあります。vagrant のような感覚で amazon ec2 のインスタンスを作ったり Chef で設定したり削除できたりするやつです。これを修正してニフティクラウドでも使えるようにしてみました。独自の機能もいろいろ追加してあります。
詳しくは上記 github の README を参照していただきたいのですが、ここでは mysql サーバーを立てる例を簡単に説明してみます。
設定ファイルを書く
~/.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 のように本番環境だけでなく検証やテストも外部に委ねられるようになるのが未来だと思っています。