saharaプラグインを使って、失敗しても戻せるようにする
2013/10/24 追記
ちょっと前に、vagrantのバージョンを上げてみたら、saharaが動かなくなったんですが、今は以下のコマンドで入りました。
vagrant plugin install sahara
MacOS | Mervericks |
VirtualBox | 4.3 |
Vagrant | 1.3.5 |
sahara | 0.0.16 |
参考
OSXにvagrantとsaharaプラグインをインストール - Qiita
追記ここまで
-
-
- -
-
vagrantを使った簡単仮想サーバ環境の準備 - 年中アイス
vagrantで複数の仮想サーバを作る - 年中アイス
に引き続いて、saharaプラグインの紹介です。
Vagrant1.1に、本家Saharaが対応しない(というよりアップデートが止まっている)ので、ryuzeeさんが、1.1でも動くものを公開されています。
正式にサポートしてる訳ではないので、使用は自己責任で。
Vagrantの必須プラグインSaharaをVagrant 1.1に対応させました | Ryuzee.com
ryuzee/sahara · GitHub
Vagrant1.1のMulti-VM環境でSaharaを使う方法 | Ryuzee.com
saharaとは
saharaは、仮想サーバの状態を記録し、あとでその時点にロールバックすることが出来るようにしてくれます。
いくらvagrantで、サーバを作ったり壊したりできるといっても、新しく仮想サーバを作って、検証できる状態に持って行くのには手間がかかります。壊れるかもしれない変更を加えるのは、ためらいます。
そこで、saharaを使ってある時点のサーバの状態を記録しておき、いつでも戻して再挑戦できるようにします。
導入手順
gemとしては公開されていないので、こちらにあるように自分でビルドしてインストールします。
git clone https://github.com/ryuzee/sahara.git cd sahara bundle install bundle exec rake build vagrant plugin install pkg/sahara-0.0.14.gem
対象仮想サーバのVagrantfileのあるディレクトリで、まずはsandboxモードを有効にします。
# ホスト側(以降vagrantコマンドはすべてホスト側) vagrant sandbox on
仮想サーバに繋いでファイルを作ります。実際はここで任意の検証を行います。
vagrant ssh # 仮想サーバ側 echo "I will be erased." > update ls # update
ロールバックします。
vagrant sandbox rollback
ファイルが消えている(変更が取り消されている)ことが確認できます。
vagrant ssh # 仮想サーバ側 ls # updateファイルがなくなっている
変更を加えた状態で、もう戻す必要がなくなったら、コミットします。これを忘れると、次にロールバックした時や、sandboxモードをoffにしたときに元に戻ってしまい、泣くことになります。
逆に、間違えてcommitしても泣きます。
vagrant sandbox commit
検証作業が終わったら、sandboxをoffにします。(必要ならcommitを忘れずに)
最後にvagrant sandbox commitした時点か、一度もcommitしていなければ、onにした時点に戻ります。
vagrant sandbox off
所感
私は、Redmineのサーバ移行に伴って、バージョンを上げるときに、データをそのまま移行できるかどうかを確認するのに使いました。
新しいバージョンのRedmineを構築して、sandboxをonにして、データベースのリストアなどを、ロールバックしながら試しました。うまく行った後に、一度ロールバックして、再度回り道無しの手順を試して確認してから、実際の本番機での移行を行いました。
失敗した時はもちろんですが、成功した時も、戻して再度手順の確認を行えるのが良いです。単に再度手順を行うだけだと、サーバの状態が変わっていて、漏れがでるなどの問題が発生しがちです。saharaでロールバックすれば、元の状態に戻るので、そのリスクが減らせます。
あとは、変更自体もchefやcapistrano,fabricなどのツールを使えば、検証後の実施も失敗のリスクが減りますね。