仮想マシンざっくり
解説と実践Vagrant
2013.10.13
StaticPress S3 Vagrant 勉強会
#公開版
@sawanoboly(HiganWorks LLC, Opsrock)

Sunday, October 13, 13
HiganWorks, OpsRockについて

• アプリケーションのためのプラットフォーム構
築/運用自動化をテーマに活動

•
•

http://opsrock.in 共同開発・運営
AWS OpsWorksとChef、インフラの
テストを取り扱うソリューションを提供

2
Sunday, October 13, 13
私とWordPressのインフラ
• VPSで自分のWordPressブログ
(2007-2011ごろ)

• Parallels Pleskベースサービスの開発
• 簡単インストールのプラットフォーム
• PHP-Ninja
• Joyent ベースのサービス
• 自動構築周辺技術を担当
3
Sunday, October 13, 13
内容
• Vagrant概要
• 仮想環境・仮想マシンをざっくり説明
• Vagrantと仮想環境プロバイダ
• Vagrantのライフサイクル
• VagrantのプロビジョニングとVMの再利用
• Vagrant x StaticPressからの色々

4
Sunday, October 13, 13
Vagrant

Sunday, October 13, 13
Vagrant概要
•
•
•
•

べーぐらんと
仮想環境、仮想マシンプロバイダのフロントエンド
プロビジョニング機能でサーバの初期構築
プラグインで拡張

•
•
•

スナップショット
仮想環境プロバイダの追加

私はOpscode Chefのテストに利用

VirtualBox?
6
Sunday, October 13, 13
Vagrant概要
•
•
•
•

べーぐらんと
仮想環境、仮想マシンプロバイダのフロントエンド
プロビジョニング機能でサーバの初期構築
プラグインで拡張

•
•
•

スナップショット
仮想環境プロバイダの追加

私はOpscode Chefのテストに利用

VirtualBox?
6
Sunday, October 13, 13
仮想環境
仮想マシンを
ざっくり説明

Sunday, October 13, 13
アプリケーション、
OS、コンピュータ

8
Sunday, October 13, 13
アプリケーションはOS上で動く

WordPressなど
httpd
(apache, nginx)

php runtime

OS
9
Sunday, October 13, 13

MySQL DB
OSより下のレイヤ
OS

BIOS/UEFI
(この層は以降ややこしいので省略)
CPU

メモリ
(RAM)

Disk

10
Sunday, October 13, 13

その他
もろもろ
OSより下のレイヤ
OS

BIOS/UEFI
(この層は以降ややこしいので省略)
CPU

メモリ
(RAM)

Disk

10
Sunday, October 13, 13

その他
もろもろ
OSより下のレイヤ
仮想環境/マシンが
取り扱う領域は
このへんです

OS

BIOS/UEFI
(この層は以降ややこしいので省略)
CPU

メモリ
(RAM)

Disk

10
Sunday, October 13, 13

その他
もろもろ
アプリケーションとOS

11
Sunday, October 13, 13
アプリケーションとOS
1.
ちょっと計算お願い

11
Sunday, October 13, 13
アプリケーションとOS
1.
ちょっと計算お願い

2.
CPUにやってもらうわ

11
Sunday, October 13, 13
アプリケーションとOS
1.
ちょっと計算お願い

2.
CPUにやってもらうわ

11
Sunday, October 13, 13

3.
計算しますわ
アプリケーションとOS
1.
ちょっと計算お願い

2.
CPUにやってもらうわ

3.
計算しますわ

4.
できました

11
Sunday, October 13, 13
アプリケーションとOS
1.
ちょっと計算お願い

2.
CPUにやってもらうわ

5.
ほなPHPにかえすわ

11
Sunday, October 13, 13

3.
計算しますわ

4.
できました
アプリケーションとOS
1.
ちょっと計算お願い

6.
サンキュー

2.
CPUにやってもらうわ

5.
ほなPHPにかえすわ

11
Sunday, October 13, 13

3.
計算しますわ

4.
できました
アプリケーションとOS
コイツを仮想化
1.
ちょっと計算お願い

6.
サンキュー

2.
CPUにやってもらうわ

5.
ほなPHPにかえすわ

11
Sunday, October 13, 13

3.
計算しますわ

4.
できました
CPUなど、ハードウェアを
仮想化する

12
Sunday, October 13, 13
CPUなど、ハードウェアを
仮想化する

• ある鳥が

鴨のように見え、鴨のように泳ぎ、
鴨のように鳴くならば、
それはたぶん鴨である
- Wikipedia: ダック・テストより

12
Sunday, October 13, 13
CPUなど、ハードウェアを
仮想化する

• ある鳥が

鴨のように見え、鴨のように泳ぎ、
鴨のように鳴くならば、
それはたぶん鴨である
- Wikipedia: ダック・テストより

• OSから見てCPUとして動いてくれれば、
結局なんでもよい

12
Sunday, October 13, 13
CPUなど、ハードウェアを
仮想化する

• ある鳥が

鴨のように見え、鴨のように泳ぎ、
鴨のように鳴くならば、
それはたぶん鴨である
- Wikipedia: ダック・テストより

• OSから見てCPUとして動いてくれれば、
結局なんでもよい

• OSが動けばアプリも動く

12
Sunday, October 13, 13
仮想環境で動くOS

VirtualBoxなど
仮想環境
プロバイダ
13
Sunday, October 13, 13
仮想環境で動くOS
1.
計算したいんだけど
CPUはどこだろ?

VirtualBoxなど
仮想環境
プロバイダ
13
Sunday, October 13, 13
仮想環境で動くOS
1.
計算したいんだけど
CPUはどこだろ?

仮想CPU

VirtualBoxなど
仮想環境
プロバイダ
13
Sunday, October 13, 13
仮想環境で動くOS
1.
計算したいんだけど
CPUはどこだろ?

2.
OSさん、俺俺、俺だよ

仮想CPU

VirtualBoxなど
仮想環境
プロバイダ
13
Sunday, October 13, 13
仮想環境で動くOS
1.
計算したいんだけど
CPUはどこだろ?

2.
OSさん、俺俺、俺だよ

3.
あ、もしかしてCPU?

仮想CPU

VirtualBoxなど
仮想環境
プロバイダ
13
Sunday, October 13, 13
仮想環境で動くOS
1.
計算したいんだけど
CPUはどこだろ?

2.
OSさん、俺俺、俺だよ

3.
あ、もしかしてCPU?

仮想CPU
4.
そうそう、それそれ!
CPUだよ!

13
Sunday, October 13, 13

VirtualBoxなど
仮想環境
プロバイダ
仮想環境
=OSに対する組織的な偽装
仮想マシン上のOS
仮想
CPU

仮想
メモリ

仮想
Disk

仮想環境プロバイダ

親OS
14
Sunday, October 13, 13

?
仮想
その他
懐かしいこんなのも仮想マシン

※画像は合成です
15
Sunday, October 13, 13
仮想環境基礎の補足
• 全部仮想なので基本的にパフォーマンスは落
ちます

• といっても仮想化前提で色々と改善されてい
ます

• CPUなどは仮想化サポート機能付き
• 近頃はOSは自分が仮想環境にいるか判別
してそれなりに最適化して動きます

• その他、サーバーサイドでは仮想化必須のた
め、もっと様々な技術があります
16
Sunday, October 13, 13
Vagrantと仮想環境プロバイダ

17
Sunday, October 13, 13
Vagrantと仮想環境プロバイダ

• 仮想環境、仮想マシンプロバイダのフロント
エンド(再掲)

17
Sunday, October 13, 13
Vagrantと仮想環境プロバイダ

• 仮想環境、仮想マシンプロバイダのフロント
エンド(再掲)

• APIをもっており、仮想のサーバを起動でき

るものなら... (WPとブラウザのような関係)

17
Sunday, October 13, 13
Vagrantと仮想環境プロバイダ

• 仮想環境、仮想マシンプロバイダのフロント
エンド(再掲)

• APIをもっており、仮想のサーバを起動でき

るものなら... (WPとブラウザのような関係)

17
Sunday, October 13, 13
Vagrantと仮想環境プロバイダ

• 仮想環境、仮想マシンプロバイダのフロント
エンド(再掲)

• APIをもっており、仮想のサーバを起動でき

るものなら... (WPとブラウザのような関係)

17
Sunday, October 13, 13
Vagrantと仮想環境プロバイダ

• 仮想環境、仮想マシンプロバイダのフロント
エンド(再掲)

• APIをもっており、仮想のサーバを起動でき

るものなら... (WPとブラウザのような関係)

17
Sunday, October 13, 13
Vagrantはプロバイダを選択可能

18
Sunday, October 13, 13
Vagrantはプロバイダを選択可能
•

抽象化しているのでpluginを書けば何でもOK

18
Sunday, October 13, 13
Vagrantはプロバイダを選択可能
•
•

抽象化しているのでpluginを書けば何でもOK
基本的なライフサイクル(起動・プロビジョン・停
止)は共通、複数の環境で開発用・テスト用のVMを
管理することができる

18
Sunday, October 13, 13
Vagrantはプロバイダを選択可能
•
•

抽象化しているのでpluginを書けば何でもOK

•

特定プロバイダの持つ便利機能もそれなりに対応

基本的なライフサイクル(起動・プロビジョン・停
止)は共通、複数の環境で開発用・テスト用のVMを
管理することができる

18
Sunday, October 13, 13
Vagrantはプロバイダを選択可能
•
•

抽象化しているのでpluginを書けば何でもOK

•

特定プロバイダの持つ便利機能もそれなりに対応

基本的なライフサイクル(起動・プロビジョン・停
止)は共通、複数の環境で開発用・テスト用のVMを
管理することができる

•

VirtualBox, Vmwareなどローカル環境
=> ファイル共有、スナップショット!

18
Sunday, October 13, 13
Vagrantはプロバイダを選択可能
•
•

抽象化しているのでpluginを書けば何でもOK

•

特定プロバイダの持つ便利機能もそれなりに対応

基本的なライフサイクル(起動・プロビジョン・停
止)は共通、複数の環境で開発用・テスト用のVMを
管理することができる

•

VirtualBox, Vmwareなどローカル環境
=> ファイル共有、スナップショット!

•

AWSなどクラウド
=> リージョン指定、タグ管理など
※EC2とはrsyncで共有フォルダ風機能対応も

18
Sunday, October 13, 13
Vagrantの基本ライフサイクル
コマンド

説明 / 状態

up

仮想マシン起動

provision

任意の方法でサーバ構築

suspend/resume

一時停止/再開

reload

再起動

halt

停止

destroy

仮想マシン破棄
19

Sunday, October 13, 13
Vagrantの
プロビジョニングと
VMの再利用
※ここからしばらくVirtualBox使用の
ローカル環境前提で話します
※VM = VirtualMachine = 仮想マシン
Sunday, October 13, 13
ご注意:
Vagrantのインストールについて

• 公式サイトのパッケージを使いましょう
• プロダクトはRubyGemですが、依存やら
の解消のためそうなってます

• ダメ: gem install vagrant
• Windows, MacOS,

Linux系(Redhat,Debian) などで動作OK

21
Sunday, October 13, 13
サーバの構築方法は選択可能
• shell
• Ansible
• Chef(Solo/Client)
• Puppet(Apply/Agent)
• これらは`provision`実行時のことなので、
普通のVMとして使い続けてももちろんOK

22
Sunday, October 13, 13
お勧めのプロビジョニングは?
•

最初はShell

•
•
•
•
•

手っ取り早い

いまは明示的にプロビジョニングするか指定できる

昔は`vagrant up`の度実行されるのがデフォルト
で危なかった

Box(VMイメージ)の再利用や共有程度ならShellでOK
構築手順 自体の再利用性・冪等性を求めるならShell
でなく、Ansible, Chef, Puppetを学ぼう

23
Sunday, October 13, 13
VMを開発者で共有する
• 仮想Disk=ただのファイルなので、使い回せば
同じテーマの開発者同士で設定済みのサーバ
を共有

• Provisionにまとめておけば、Vagrantfile
の共有・更新だけでOK

• Provision, Destroyの繰り返しが簡単、VMの
作りこみもしやすい

• さて、VM上でプログラムの開発をする場合
は?

24
Sunday, October 13, 13
SandBox(saharaプラグイン)で
何度でもやり直す

• VM内の開発、WordPressプラグインやテー
マから、StaticPress用の記事も含みます

• SandBoxモードを有効にすると、任意の時

点でVMのスナップショットを取得&そのス
ナップショットに戻すことが可能

• WordPressのアップデートや、開発中のプ

ラグイン等の挙動を簡単に試し、以前の状態
に戻すことができます

25
Sunday, October 13, 13
そもそもスナップショットを
よく知らない方向けに

26
Sunday, October 13, 13
そもそもスナップショットを
よく知らない方向けに

• セーブして、やられたらリセットしてロード
できるっちゅうことです

26
Sunday, October 13, 13
そもそもスナップショットを
よく知らない方向けに

• セーブして、やられたらリセットしてロード
できるっちゅうことです

26
Sunday, October 13, 13
Vagrant x StaticPress
からの色々
Vagrant上のWordPressから
StaticPress経由でできそうなこと
※ StaticPress-S3は紹介済みなのでその他

Sunday, October 13, 13
まずはGitリポジトリ
• ロールバック・フォワードやバックアップ、
履歴管理のため、Gitへ

• VM上でもよし
• 共有フォルダ機能で親OS側に置いてもよ
し

• Gitにすればなんでもありへ

28
Sunday, October 13, 13
1.普通のレンサバへ
• FTPなりで更新、git hookでアップ自動化も
• そもそもPHP実行しないのでそんなに重く
ならないかも

• 価格固定
• プレビュー,ロールバックが手元で確認OK

29
Sunday, October 13, 13
2.DropBoxへ
• Public公開機能を
• Dropboxにそのまま出力で同期いらず
• なにかしらリバースプロキシが必要
• 転送量制限

Cloud Front
30
Sunday, October 13, 13
3.herokuへ
• Rubyでちょっと書けば静的ファイルの配信
可能

• 維持費無料

31
Sunday, October 13, 13
4.AWS OpsWorksへ(1/3)
• 実はただの静的ファイル配信インスタンスに
対応

• 不必要なほど色々可能

32
Sunday, October 13, 13
4.AWS OpsWorksへ(2/3)
• インスタンスはELB標準対応
• AutoScaleでインスタンス増減

33
Sunday, October 13, 13
4.AWS OpsWorksへ(3/3)
• 勝手にCloudWatch開始
•

yes,expensive

Cloud Watch

34
Sunday, October 13, 13
色々考えてみましたが
S3で十分

Sunday, October 13, 13
最後に:Vagrantリファレンス
http://docs.vagrantup.com/v2/

こういうのもでてます
ウォークスルーに
丁度良い内容
36
Sunday, October 13, 13
終

Sunday, October 13, 13

仮想マシンざっくり解説と実践Vagrant | StaticPress × S3 × Vagrant 勉強会