電気羊の執務室

魔法を作る仕事をしています。

仮想マシン構築自動化ツールのまとめ

はじめに

3月から、仮想マシン構築を自動化しようとして、 色々もがいてみました。 早いもので、もう3ヶ月も経つんですね。

当初、いろいろ疑問が多かった中で、 『情報が少ないので、とにかく触って掴もう』 というアプローチでやってきました。

ある程度わかってきたので、まとめていこうと思います。

DevOpsツールについて

仮想マシン構築の自動化など、コード化されたインフラを、 DevOpsと呼ぶようですね。

これをやるのに、よくおすすめされる構成が、 Vagrant+Chef+BerkshelfでVirtualBoxノードを作ろう! ですね。

参考資料: あとでまとめる

Packer,Vagrant,Chef,Berkshelfの違いは?

記事を読みながら、何がなんだかよく分からなかったのが、 各ツールの違いです。

ここでは、各ツールの違いをまとめてみます。 うまく伝わるかはわかりませんが・・・

Packer:無から仮想マシンファイルを作る

Packerは、OSイメージや既存の仮想マシンの『ファイル』から、 boxや仮想マシンノードの『ファイル』を作るアプリ。

  • 設定ファイル:
    • 入力ファイル(OSのISOファイル、仮想マシンのファイル)
    • 設定用jsonファイル(OS,バージョンごとに用意)
  • 実行対象:ローカルマシン、クラウドサービス
  • 出力:ファイル(vagrant用boxファイル、仮想マシンのファイル)

Vagrant:仮想マシンを実行・廃棄する

Vagrantは、仮想マシンのひな形(boxと呼ばれる)から、 実際に動く仮想マシン(ノードと呼ばれる)を作るアプリ。 実行した際に、マシンが動作を開始するのが特徴。

  • 設定ファイル:
    • boxファイル
    • Vagrantfile(各ノードの設定内容を記述)
  • 実行対象:ローカルマシン、クラウドサービス
  • 出力:
    • 実行中の仮想マシン
    • boxファイル(packageコマンドを使用したとき)

Chef:実行中のマシンに設定を行う

Chefは、実行中の仮想マシンや物理マシンに対し、 インストールや環境設定作業を自動化するアプリ。

Cookbookと呼ばれるパッケージを指定すると、 OSの差異をChefが吸収し、OSに適したコマンドで プロビジョン(環境設定や、アプリのインストールなど)してくれる。

設定対象のマシンは、仮想マシンでも物理マシンでもOKだし、 ローカルでもリモートでもOK。

  • 設定ファイル: *Chefリポジトリ(kitchenとも呼ばれるファイルセット)
    kitchen(ここでは一部のみ)
      |- cookbooks(各設定内容をアプリごと、ジャンルごとにまとめておく)
      |- nodes(設定対象のノードと、そのノードにどんな設定を行うかを記述) 
  • 実行対象:実行中のマシン
  • 出力:実行中のマシンに設定が完了した状態

chef-soloとknife-solo

ローカルの場合はchef solo、リモートの場合はknife soloの コマンドで設定を行う。

Berkshelf:ChefのCookbook管理を便利にする

Chefを使う際、Berkshelfを併用することで、 Cookbookの管理が便利になる(RubyのGemのようなもの)

  • 設定ファイル:Berksfile
  • 実行対象:Chefリポジトリ(=kitchen)
  • 出力:整理済のChefリポジトリ

まとめ

  • Packer
    • 仮想マシンの実行ファイルを作る
    • マシンの起動はインストール時のみ(電源OFFで終わる)
    • マシンを継続的に実行する事はできない
  • Vagrant
    • 仮想マシンの起動・終了などを制御する
    • 必ず仮想マシンのひな形(box)が必要
    • OSインストールから実行することはできない
  • Chef
    • マシンの設定を自動で行う
    • 仮想マシンに限らず設定可能
    • マシンが起動している事が条件
    • マシンの起動自体を行うことはできない

流れとしては、こんな感じです。

  1. Packerで仮想マシンを生成
  2. Vagrantで仮想マシンを実行
  3. Chefでツールのインストール、設定など

Comments