小山です。
久しぶりにEmacsの設定を見直そうとしたら、自分のあまりのelisp脳の衰退に驚愕しました。
さて、明日の1月30日はFusic 勉強会 #6が開催されます。
自分は「実践Vagrantを利用したサーバ移行 (VagrantのMultiVM設定からさくらVPSの複数台構成まで)」というタイトルで発表をします。
内容としては
いままで複数台構成の専用サーバで数年運用していたシステムを、複数台構成のさくらVPSに移行するプロジェクトが発生。移行前にまずはVagrantのMulti-Machine機能を使ってローカル上で複数台環境を構築、サーバの設定を全てAnsibleに移行し、ローカルでテスト。最終的にそのAnsible設定を『そのまま』実行して複数台構成のさくらVPSへの移行を実現。
という内容なのですが、実は上の話の前に「PackerでVagrant用boxを作る」という作業がありました。
明日の勉強会ではその話は飛ばしますので、ここで紹介したいと思います。
なお、今回の内容はまさに「OSXでpackerでCentOS6.4のVirtualBox VMを作成する」を参考に作業したものですので、是非こちらもご覧ください。
Packerとは何?
VMWareやVirtualBoxを開発で利用するようになってから結構立つかと思いますが、最近はVagrantとかPackerとかDockerとかいろいろ便利と言われるツールがでてきて、混乱しますね(自分はしました)。
で、今回利用するPackerとは何で、どこが便利なのか、良く分からない人もいるかと思います。
Packerの正確な説明は、皆さんがググった結果や他のサイトにお任せしますが、「個人的で局所的」なPackerの利便性の説明をしてみます。
VirtualBoxを便利に使うためのVagrantを便利に使うためのPacker
既に「VirtualBox」と絞ってしまっていますが、「個人的で局所的」なのでご勘弁を。
VirtualBoxなどの仮想環境を使ったことがある人は多いと思いますが、そのVMの生成のためには「(isoなどを利用した)OSのインストール」が必要で、毎回毎回「インストール時間分」時間がかかっていました。
それをVirtualBoxの「仮想イメージのインポート/エクスポート機能」をつかって、時間の短縮した人もいるかと思いますが、その部分を担っているのがVagrantです。
Vagrantは「box」という仮想イメージを管理し、必要に応じてその仮想イメージからVMを簡単にVirtualBoxに生成できるわけです。
(さらにVMwareでも!的な話は省略します)
じゃあ、その「box」はどこからもってくるの?となるわけですが、まず2つが考えられます。
- ネット上に公開されているboxを利用
- VirtualBox内で動いているVMから生成
「ネットで公開されているboxは何がインストールされているかわからないからちょっと。。。」という人は必然的に「VirtualBox内で動いているVMから生成」となるわけですが、じゃあ、その「VirtualBox内で動いているVM」はどうやって作るの?また自分でisoから作るの?面倒!となるわけです。
(Vが頭文字の単語が頻出して、だんだん禅問答みたいになってきましたが、もう少しだけがんばってください)
その最後の面倒な部分を担うのがPackerです(と、思っています)。
Packerは、例えば「VirtualBoxのVMをisoから作成し、そこからVagrant用boxを作る」という部分を、「JSONで記述された設定ファイル(といくつかのスクリプト)」を用意するだけで自動化してくれるのです。
個人的なPackerのポイントは「JSONで記述された設定ファイル(といくつかのスクリプト)」という部分です。
JSONやスクリプトはバイナリと違い、自分で読めるので、「ネットで公開されているもの」を使いやすいのです。
ChefのコミュニティCookbookのように夢が広がりますね(Ansible使いですが)。
Packerでboxを作ってみる
VirtualBoxは既にインストールしてある前提です。Packerのインストールは「INSTALL PACKER」を参考にしてください。
今回はCentOS6.5のVirtualBox用boxを作ります。Packerはv0.5.1を前提にしています。
Packer用JSONファイルを探す
自分でpacker.jsonを記述するのは面倒なので、インターネット上から設定を探します。
github.com/hnakamur/my-packer-template-files がとても素晴らしいので、こちらを使います。
$ git clone github.com/hnakamur/my-packer-template-files
設定の中身を確認する
$ cd my-packer-template-files/centos6.5
centos6.5/template.json を確認するとprovisionersでいくつかスクリプトを実行しているようなので、それぞれのスクリプトで何が実行されているか確認します。
例えばcentos6.5/scripts/vagrant.sh のスクリプトはVagrantで使う前提の設定をしてくれているなど、いろいろな設定が実行されています。感謝しかありません。
Packerを実行する
$ packer build -only=virtualbox-iso template.json
はい。終わりです。packer_virtualbox-iso_virtualbox.boxというboxが生成されているので、こちらのVagrantのboxとして追加するだけです。
$ vagrant box add centos6.5 packer_virtualbox-iso_virtualbox.box
最後に
ここまで見ていただいた方はおわかりかと思いますが、
Qiitaの参考URLも、使ったPacker用JSONもHiroaki Nakamuraさんが公開されているものです。
素晴らしい情報を提供していただいたNakamuraさんにこの場を借りて御礼を言いたいと思います。
どうもありがとうございます!
というわけで、続きはFusic勉強会 #6で!
[…] PackerでVagrantで使うVirtualBox用のboxを生成する | Fusic Developers Weblog: […]