packerで開発環境構築

こんにちは、河野です。
この記事は、TECHSCORE Advent Calendar の20日目の記事です。

いまどき、ローカルの開発環境構築だとVagrantが主流でしょうか。

チーム内でVagrantを導入する前には、不定期で新しいovaファイルを作って公開していたのですが、ovaファイルを作るのにけっこう手間が掛かっていました。
そこで、Vagrantをしばらく前に導入してみたのですが、上手く動かなかったりするWindowsの環境も。
新規に環境が必要になったときに、古いVMをコピーして使う…ということもあって、あまり良い感じではありません。

pakcerを使うとovaファイルの作成が簡単にでき、Vagrantなくても環境構築できます。今までの悩みから解放されそうなので、使ってみることにしました。

今回は、Packerを使ったISOイメージからの仮想マシン自動デプロイ - さくらのナレッジを参考にしました。

packerのテンプレート

最終的にできたテンプレートは以下のようになりした。

vm_nameとoutput_directoryにタイムスタンプを付ける

packerの仕様としてoutput_directoryがすでに存在するとbuildが実行ができません。
試行錯誤中は何度もイメージを作ることになるので、名前がかぶらないようにタイムスタンプを使用します。フォーマットが特殊ですが、これはGo言語由来のフォーマットのようです。

ssh_userはansible

プロビジョニングにはAnsibleを使用するので、ansibleユーザにしました。

ホストオンリーネットワークを追加する

vboxmanageのところでCPUやメモリの設定だけでなく、ホストオンリーネットワークを追加しました。この時にネットワークデバイス名を指定しなければいけません。VirtualBoxをインストールしたときに追加されるネットワークデバイス名になるので、コントロールパネルなどで確認する必要があります。

さらに、VirtualBoxでインポートする際に、デバイス名が異なると正しく認識されずVMが起動しません。アップデートの際にVirtualBox Host-Only Ethernet Adapter #2といったデバイス名に変わることがあり注意が必要です。

boot_commandの中でksdeviceを指定する

ホストオンリーネットワークを追加しているので、デバイスが2つ存在するのですが、ksdeviceのオプションを使用しないと、どのデバイスを使用するか選択する画面で停止したままになります。

provisionerはshellにしている

Ansibleのprovisionerもあるのですが、結局はansibleのlocal実行になるようです。他にも設定する必要があったので、shellスクリプトの中からansible-playbookを実行するようにしています。

kickstartの設定ファイルを作り込む

次にCentOSのkickstartの設定を行います。
これについては、過去に記事にしていますので参考にして下さい。

» VirtualBoxとCentOSでkickstartしてみた

このときpackerを使おうと色々試していたのですが、packer自体の挙動が不安定だったため採用を見送っていたのでした。

最終的には以下のようになっています。

ks.cfg

kickstart-post.shの中では、プロビジョニングのためにansibleユーザを作成しています。

Ansibleでプロビジョニング

CentOS自体のインストールがすんだ後のミドルウェアのインストールなどにはAnsibleを使用しています。
PostgresやNginxのインストールなどを行っています。

実際に使ってみてどうか

もろもろの設定ができあがると、簡単にOVAファイルを作ることができるようになりました。構築自体には時間がかかりますが、自動なので気にならないレベルですね。

pakcerではDockerのイメージを作ったり、EC2のAMIを作ったり色々と展開ができるので、今後も活用していきたいと思います。

Comments are closed, but you can leave a trackback: Trackback URL.