毎日Learning

学んだことを共有します

「実践 Vagrant」を読んで分かった3つの運用イメージ

実践 Vagrant

実践 Vagrant

良書です。

そろそろ、とことん、Vagrantを活用するときが来たなと思い、読みはじめました。

まだ読みはじめですが、5章まで読んで、ざっとこんな運用できんじゃね?っていうイメージが固まってきたので、アウトプットしておく。

1. Vagrantfileの運用イメージ
2. boxファイルの運用イメージ
3. テストで使う場合のイメージ

1. Vagrantfileの運用イメージ

Vagrantfileは、各プロジェクトフォルダのさらに一つ上の階層につくる感じ。

例えば、以下の構成の場合、、、

Project
  |- src
  |- test

こんな感じの場所に置いておくと良い感じ。

Project
  |- Vagrantfile
  |- sources
    |- src
    |- test

で、Vagrantfileには、以下の内容を書いておくと良いんちゃうやろかー。

Vagrant::Config.run do |config|
  #...
  config.vm.share_folder "sources", "/dev/sources", "./sources"
end

みたいな。

で、/dev/sources 的なフォルダにソースやtestソースがあるので、Vagrantで構築した環境でコンパイルしてテストできてーみたいな。

その際、書籍では、共有フォルダに重いI/Oがされるとパフォーマンスのペナルティになるので、コンパイルのステップ等は、共有フォルダ外にできるようにしたほーが良いよ、的なことが書いてある。

2. boxファイルの運用イメージ

boxファイルを最初は、 Vagrant Cloud から取得してきたりするのかもしれないが、実際にプロジェクトを進めていくと、リセットする粒度が変わってきて、このあたりまでは、box化しておいたほーが良いよね。みたいなことになるだろう。

そうなってくると、boxファイルを管理する必要がでてくるだろう。

そんなときは、

1. 共有フォルダで管理
2. クラウドストレージ上で管理(AWS S3とか…)

になるんかなーと思う。

で、Vagrantfileには、以下のように書いておくと良いんだろう。

Vagrant::Config.run do |config|
  #...
  config.vm.box_url = "http://files.vagrantup.com/precise64.box"
end

共有フォルダの場合は、 "file:///C:/..." みたいな感じになるんかなーと。
試してないけど。

3. テストで使う場合のイメージ

テストで使うときは、ホストのみのネットワークにしてやると良いんだろう。

Webサーバーと、DBサーバーと、マネージャサーバーとか、クライアントとか、そういった別々にしたいサーバーのそれぞれのハコを用意してあげて、ホストのみで使えるネットワークを構築すれば、環境依存するようなネットワークのところも内包できて良いかんじになりそう。

さらに、IEみたいなOS依存の過去バージョンアプリなんかも、ホストオンリーネットワーク内でやったると良いかんじになりそうだよね。

Vagrantfileは、

Vagrant::Config.run do |config|
  #...
  config.vm.define "web" do |web|
    web.vm.network "hostonly", "192.168.33.10"
  end
  config.vm.define "db" do |db|
    db.vm.network "hostonly", "192.168.33.11"
  end
  config.vm.define "ie9" do |ie9|
    ie9.vm.network "hostonly", "192.168.33.20"
  end
  config.vm.define "ie10" do |ie10|
    ie10.vm.network "hostonly", "192.168.33.21"
  end
end

こんな感じですな。

とはいえ、全部、 vagrant up しちゃうと、4つの仮想マシンを同時にいごかすことになるので、そりゃべりゃー良いマシンじゃないといかんけん。

そこは、

$> vagrant up web db ie10

みたいに、ie10のときは、それを起動するよー的な運用が必要なんでしょうね。

大体、感想は以上。また良い発見あったら投稿します。

書籍の章構成

章構成は、以下のとおり。

1章 Vagrantの紹介
    1.1 Vagrantを使う理由
    1.2 Vagrant道
    1.3 Vagrant以外の選択肢
        1.3.1 単純なデスクトップ仮想化
        1.3.2 コンテナ
        1.3.3 クラウド
    1.4 Vagrantのセットアップ
    1.5 VirtualBoxのインストール
        1.5.1 Vagrantのインストール
        1.5.2 よくある間違い
    1.6 VirtualBoxなしでのVagrantの利用
    1.7 ヘルプ!

2章 初めてのVagrantマシン
    2.1 起動と実行
    2.2 Vagrantfile
    2.3 V1とV2の設定
    2.4 ボックス
    2.5 起動
    2.6 仮想マシンでの作業
        2.6.1 Vagrantマシンの状態
        2.6.2 SSH
        2.6.3 共有ファイルシステム
        2.6.4 基本的なネットワーキング
        2.6.5 ティアダウン
    2.7 まとめ

3章 Vagrant仮想マシンのプロビジョニング
    3.1 自動プロビジョニングを行う理由
    3.2 サポートされているプロビジョナ
    3.3 手動でのApacheのセットアップ
    3.4 自動化プロビジョニングの基本
        3.4.1 シェルスクリプト
        3.4.2 Chef
        3.4.3 Puppet
    3.5 複数のプロビジョナ
    3.6 「プロビジョニングしない」モード
    3.7 詳細なプロビジョナの利用方法
        3.7.1 シェルスクリプト
        3.7.2 Chef Server
        3.7.3 Puppet
    3.8 まとめ

4章 Vagrantにおけるネットワーク
    4.1 フォワードされたポート
        4.1.1 長所と短所
        4.1.2 基本的な使用方法
        4.1.3 衝突の検出と修正
        4.1.4 TCP対UDP
    4.2 ホストのみのネットワーク
        4.2.1 長所と短所
        4.2.2 基本的な使用方法
        4.2.3 ゲストのオペレーティングシステムへの依存性
    4.3 ブリッジのネットワーク
        4.3.1 長所と短所
        4.3.2 基本的な使用方法
    4.4 ネットワークの選択肢の組み合わせ
    4.5 1番目のネットワークインターフェースとしての
	NATに対する要求
    4.6 この後は?

5章 複数マシン構成のクラスタのモデリング
    5.1 複数の仮想マシンの実行
    5.2 複数のマシンの制御
    5.3 マシン間の通信
        5.3.1 ホストのみのネットワーク
        5.3.2 ブリッジされたネットワーク
    5.4 実際的な例:MySQL
    5.5 次章では

6章 ボックス
    6.1 ボックスを使う理由
    6.2 ボックスのフォーマット
    6.3 Vagrantを使用しない基本的なボックスの管理
    6.4 既存環境からの新しいボックスの生成
    6.5 スクラッチからの新しいボックスの生成
        6.5.1 VirtualBoxのマシンの作成
        6.5.2 オペレーティングシステムの設定
        6.5.3 VirtualBox Guest Additionsのインストール
        6.5.4 追加のソフトウェア
        6.5.5 最終的なボックスのサイズの最小化
        6.5.6 パッケージ化
        6.5.7 Vagrantfileのデフォルトの設定
    6.6 次章では

7章 プラグインによるVagrantの拡張
    7.1 拡張可能な機能
    7.2 Vagrantのプラグインの管理
    7.3 プラグインの開発の基本
        7.3.1 プラグインの定義
        7.3.2 プラグインのコンポーネント
        7.3.3 エラー処理
        7.3.4 Vagrantの内部
    7.4 プラグイン開発の基本的な環境
    7.5 カスタムコマンドの開発
        7.5.1 コンポーネント
        7.5.2 実装
        7.5.3 仮想マシンに対する処理
        7.5.4 マルチマシン環境の扱い
        7.5.5 コマンドラインオプションのパース
    7.6 新しい設定オプションの追加
        7.6.1 コンポーネント
        7.6.2 実装
        7.6.3 設定へのアクセス
        7.6.4 設定のマージ
        7.6.5 バリデーション
    7.7 カスタムプロビジョナの追加
        7.7.1 コンポーネント
        7.7.2 実装
        7.7.3 プロビジョナの設定
        7.7.4 マシンの設定
    7.8 Vagrantの既存動作の変更
        7.8.1 コンポーネント
        7.8.2 実装
        7.8.3 アクションの環境における便利なキー
    7.9 さらに深く学ぶには
    7.10 プラグインの他のコンポーネント
    7.11 プラグインのパッケージ化

付録A Vagrantの環境変数
    A.1 VAGRANT_CWD
    A.2 VAGRANT_HOME
    A.3 VAGRANT_LOG
    A.4 VAGRANT_NO_PLUGINS
    A.5 VAGRANT_VAGRANTFILE

付録B Vagrantの設定リファレンス

付録C トラブルシューティングとデバッグ
    C.1 IRC
    C.2 メーリングリスト / Google Group
    C.3 プロフェッショナルサポート

付録D Vagrantプラグイン(吉羽 龍太郎)
    D.1 Sahara
        D.1.1 概要
        D.1.2 動作環境とインストール方法
        D.1.3 使い方
        D.1.4 複数仮想マシンへの対応
        D.1.5 注意すべきこと
    D.2 vagrant-global-status
        D.2.1 概要
        D.2.2 動作環境とインストール方法
        D.2.3 使い方
    D.3 vagrant-vbguest
        D.3.1 概要
        D.3.2 動作環境とインストール方法
        D.3.3 使い方
    D.4 vagrant-omnibus
        D.4.1 概要
        D.4.2 動作環境とインストール方法
        D.4.3 使い方
    D.5 vagrant-berkshelf
        D.5.1 概要
        D.5.2 動作環境とインストール方法
        D.5.3 使い方
    D.6 vagrant-cachier
        D.6.1 概要
        D.6.2 インストール方法
        D.6.3 使い方
    D.7 vagrant-exec
        D.7.1 概要
        D.7.2 インストール方法
        D.7.3 使い方

付録E Packer(吉羽 龍太郎)
    E.1 インストール
    E.2 Vagrant用のBoxの作成
        E.2.1 builders
        E.2.2 provisioners
        E.2.3 post-processors
    E.3 仮想マシンテンプレートのビルド
    E.4 Amazon EC2用のEBS-Backed AMIの作成
    E.5 まとめ

付録F VagrantとAmazon EC2(伊藤 直也)
    F.1 Vagrantとクラウドサービス
        F.1.1 EC2をvagrant up
    F.2 事前準備: 必要なもの
        F.2.1 アクセスキーの作成
        F.2.2 EC2キーペアの作成
        F.2.3 vagrant-awsプラグインのインストール
        F.2.4 dummy boxの追加
    F.3 AWSプロバイダを利用する
        F.3.1 Vagrantfile
        F.3.2 EC2インスタンスの起動
        F.3.3 インスタンスへのSSH
        F.3.4 インスタンスの破棄
    F.4 Synced Folders
        F.4.1 sudoコマンドが失敗する原因を解決する
        F.4.2 Synced Folderでファイルを共有する
    F.5 VagrantでAmazon EC2を扱えると何が嬉しいか?
    F.6 Vagrantfile内のセキュリティクレデンシャルを外部化する
    F.7 VagrantでEC2インスタンスのプロビジョニング
        F.7.1 vagrant-omnibusの利用
        F.7.2 Chefのクックブックの作成
        F.7.3 Vagrantfileでプロビジョナーを設定する
        F.7.4 プロビジョニングを実行する
    F.8 複数のEC2インスタンスをVagrantで起動する
    F.9 VagrantfileをDRYに
        F.9.1 マルチVMとプロビジョニング
    F.10 落ち穂拾い
        F.10.1 VPCへの対応
        F.10.2 User Data
        F.10.3 Packer