[PaaS][OSS][DevOps] VagrantでCloud Foundry環境構築
最近、DevOps系エントリ(ツールが被ってるだけでそこまで関連してないですが)が増えてますが、今年のDevelopers Summit 2013 Summer (夏サミ2013)のタイムテーブルを見てもDevOps一色です。何が重要なのか?やはり手を動かしてみない事には実感できません。夏までにDevOps!
今回は公式ブログで先月末に記事になってましたので、前回のOpenShiftに引き続き同じくオープンソースのPaaSであるCloud Foundry環境を記事の手順に沿ってVagrantで簡単に構築してみます。今回はBerkshelfとChefを利用するので、まずはChefとBerkshelf自体とVagrantでBerkshelfを使う為のVagrantプラグインとvagrant-omnibusというプラグインをインストールします。
[html]
# gem install chef
# gem install berkshelf
# vagrant plugin install vagrant-berkshelf
# vagrant plugin install vagrant-omnibus
[/html]
ちなみにChefとはCookbookという形でインスタンスに必要な設定(パッケージのインストール及び設定など)などをRubyで記述したものを利用してインスタンスのプロビジョニングを自動化及び定型化するツールです。特にOpscodeなどCookbookを集めたサイトには代表的なパッケージのCookbookがあり、今回のように既存のCookbookを再利用するために必要なツールです。
BerkshelfはChefのCookbookを管理するツールでインストールするとberksコマンドが使えるようになり、予め用意されたBerksfileに従って指定されたサイトから指定されたCookbookを依存管理しながら落としてくるツールです。代表的な使い方にOpscodeのCookbookを落としてくるなどです。今回のVagrantでCloud Foundryをインストールするためのファイル群のルートディレクトリに実際に使用するBerkshelfがあるので見てみると、Opscodeから色々なパッケージのCookbookを落とす記述がどんなものかよくわかります。
vagrant-omnibusはVagrantで起動するインスタンスにChefがインストールされてなければChefをインストールするためのツールです。
今回のCloud Foundry環境構築では上記ツールの設定ファイルを記述したりコマンドを叩くことはありません。既に用意されたプロビジョニングファイル群を円滑に動作させる為に予め必要なツールのインストールというだけです。ただし今流行のDevOps的な開発を志向する場合は深い理解が必要になるかと思います。この辺りの話はまた別の機会にさせていただきます。
前置きが長くなりましたがツール類の準備が整いました早速Githubから今回のVagrantでCloud Foundryをインストールするためのファイル群を落としてきます。
[html]
# git clone git@github.com:Altoros/cf-vagrant-installer.git
[/html]
そしてディレクトリに入って以下のコマンドを叩くのみ。
[html]
# cd cd cf-vagrant-installer/
# rake host:bootstrap
# vagrant up
[/html]
これで、また結構時間はかかりますがVirtual Box上にCloud Foundry環境が構築されます。
続いてプロビジョニングしたインスタンスにsshで入りCloud Foundryを起動します。
[html]
# vagrant ssh
[vagrant@precise64 ~]$ cd /vagrant
[vagrant@precise64:/vagrant]$ ./start.sh
cf-ng start/running
[/html]
最後にsinatraのテストアプリを走らせてみます。
[html]
[vagrant@precise64:/vagrant]$ rake cf:init_cf_cli
target: http://127.0.0.1:8181
Email> admin
Password> admin
[vagrant@precise64:/vagrant]$ cd /vagrant/test-apps/sinatra-test-app
[vagrant@precise64:/vagrant/test-apps/sinatra-test-app]$ cf push
[/html]
前回に引き続きオープンソースのPaaS環境を簡単に構築できたわけですが、実際に手を動かしてみるとインフラ構築までもがプログラム的に制御できてしまう仮想化の恩恵に改めて感心します。これらを実際に操作し感じる恩恵をDevOpsという考えに昇華し、これまでオーバーヘッドだった部分を常識として考えるのではなく、体制にしろ意識にしろ改革していくことこそが重要です。
クラウドインテグレータとしてアプリケーションレイヤのアジャイル開発を押し進める上で最近のDevOpsの考え方はとても無視できるものではありません。パブリッククラウド同士を補完して使っていくためのプロビジョニング定形化という解りやすい事例はもちろんですが、私はアプリケーションエンジニアがインフラを気軽に作ったり潰せる環境を持つ事自体が単純にワクワクします。
アプリケーションエンジニアがインフラからアプリケーションまでを自分の必要と思った時に気軽に構築でき、素早くプロトタイピングしてレビューし評価してもらい、ダメなら素早くゼロからやり直す事ができ、加速されたスピードにより時間的リスクは大幅に解消し、巻き込む人もリソースも少なく経済的なリスクも減少する。
もっと単純に言えば「技術者一人でなんでもできる時代」に更に近づいていることが喜ばしく思います。