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

Preview:

DESCRIPTION

StaticPress × S3 × Vagrant 勉強会の発表資料です

Citation preview

仮想マシンざっくり解説と実践Vagrant

2013.10.13StaticPress × S3 × Vagrant 勉強会

#公開版@sawanoboly(HiganWorks LLC, Opsrock)

Sunday, October 13, 13

HiganWorks, OpsRockについて

2

• http://opsrock.in 共同開発・運営

• AWS OpsWorksとChef、インフラのテストを取り扱うソリューションを提供

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

Sunday, October 13, 13

私とWordPressのインフラ• VPSで自分のWordPressブログ

(2007-2011ごろ)

• Parallels Pleskベースサービスの開発

• 簡単インストールのプラットフォーム

• PHP-Ninja

• Joyent ベースのサービス

• 自動構築周辺技術を担当

3Sunday, October 13, 13

内容• Vagrant概要

• 仮想環境・仮想マシンをざっくり説明

• Vagrantと仮想環境プロバイダ

• Vagrantのライフサイクル

• VagrantのプロビジョニングとVMの再利用

• Vagrant x StaticPressからの色々

4Sunday, October 13, 13

Vagrant

Sunday, October 13, 13

Vagrant概要• べーぐらんと

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

• プロビジョニング機能でサーバの初期構築

• プラグインで拡張

• スナップショット

• 仮想環境プロバイダの追加

• 私はOpscode Chefのテストに利用

6

VirtualBox?Sunday, October 13, 13

Vagrant概要• べーぐらんと

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

• プロビジョニング機能でサーバの初期構築

• プラグインで拡張

• スナップショット

• 仮想環境プロバイダの追加

• 私はOpscode Chefのテストに利用

6

VirtualBox?Sunday, October 13, 13

仮想環境仮想マシンをざっくり説明

Sunday, October 13, 13

アプリケーション、OS、コンピュータ

8Sunday, October 13, 13

アプリケーションはOS上で動く

9

WordPressなどWordPressなどWordPressなどhttpd

(apache, nginx)php runtime MySQL DB

OSOSOS

Sunday, October 13, 13

OSより下のレイヤ

10

OSOSOSOS

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

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

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

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

CPU メモリ(RAM)

Disk その他もろもろ

Sunday, October 13, 13

OSより下のレイヤ

10

OSOSOSOS

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

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

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

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

CPU メモリ(RAM)

Disk その他もろもろ

Sunday, October 13, 13

OSより下のレイヤ

10

OSOSOSOS

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

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

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

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

CPU メモリ(RAM)

Disk その他もろもろ

仮想環境/マシンが取り扱う領域はこのへんです

Sunday, October 13, 13

アプリケーションとOS

11Sunday, October 13, 13

アプリケーションとOS

11

1.ちょっと計算お願い

Sunday, October 13, 13

アプリケーションとOS

11

1.ちょっと計算お願い

2.CPUにやってもらうわ

Sunday, October 13, 13

アプリケーションとOS

11

1.ちょっと計算お願い

2.CPUにやってもらうわ 3.

計算しますわ

Sunday, October 13, 13

アプリケーションとOS

11

1.ちょっと計算お願い

2.CPUにやってもらうわ 3.

計算しますわ

4.できました

Sunday, October 13, 13

アプリケーションとOS

11

1.ちょっと計算お願い

2.CPUにやってもらうわ

5.ほなPHPにかえすわ

3.計算しますわ

4.できました

Sunday, October 13, 13

アプリケーションとOS

11

1.ちょっと計算お願い

2.CPUにやってもらうわ

5.ほなPHPにかえすわ

6.サンキュー

3.計算しますわ

4.できました

Sunday, October 13, 13

アプリケーションとOS

11

1.ちょっと計算お願い

2.CPUにやってもらうわ

5.ほなPHPにかえすわ

6.サンキュー

3.計算しますわ

4.できました

コイツを仮想化

Sunday, October 13, 13

CPUなど、ハードウェアを仮想化する

12Sunday, October 13, 13

CPUなど、ハードウェアを仮想化する

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

12Sunday, October 13, 13

CPUなど、ハードウェアを仮想化する

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

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

12Sunday, October 13, 13

CPUなど、ハードウェアを仮想化する

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

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

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

12Sunday, October 13, 13

仮想環境で動くOS

13

VirtualBoxなど仮想環境プロバイダ

Sunday, October 13, 13

仮想環境で動くOS

13

VirtualBoxなど仮想環境プロバイダ

1.計算したいんだけどCPUはどこだろ?

Sunday, October 13, 13

仮想環境で動くOS

13

VirtualBoxなど仮想環境プロバイダ

1.計算したいんだけどCPUはどこだろ?

仮想CPU

Sunday, October 13, 13

仮想環境で動くOS

13

VirtualBoxなど仮想環境プロバイダ

1.計算したいんだけどCPUはどこだろ?

仮想CPU

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

Sunday, October 13, 13

仮想環境で動くOS

13

VirtualBoxなど仮想環境プロバイダ

1.計算したいんだけどCPUはどこだろ?

仮想CPU

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

3.あ、もしかしてCPU?

Sunday, October 13, 13

仮想環境で動くOS

13

VirtualBoxなど仮想環境プロバイダ

1.計算したいんだけどCPUはどこだろ?

仮想CPU

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

3.あ、もしかしてCPU?

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

Sunday, October 13, 13

仮想環境=OSに対する組織的な偽装

14

仮想マシン上のOS仮想マシン上のOS仮想マシン上のOS仮想マシン上のOS

仮想環境プロバイダ仮想環境プロバイダ仮想環境プロバイダ仮想環境プロバイダ

親OS親OS親OS親OS

仮想CPU

仮想メモリ

仮想Disk

仮想その他

?

Sunday, October 13, 13

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

15

※画像は合成です

Sunday, October 13, 13

仮想環境基礎の補足• 全部仮想なので基本的にパフォーマンスは落

ちます

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

• CPUなどは仮想化サポート機能付き

• 近頃はOSは自分が仮想環境にいるか判別してそれなりに最適化して動きます

• その他、サーバーサイドでは仮想化必須のため、もっと様々な技術があります

16Sunday, October 13, 13

Vagrantと仮想環境プロバイダ

17Sunday, October 13, 13

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

Vagrantと仮想環境プロバイダ

17Sunday, October 13, 13

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

• APIをもっており、仮想のサーバを起動できるものなら... (WPとブラウザのような関係)

Vagrantと仮想環境プロバイダ

17Sunday, October 13, 13

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

• APIをもっており、仮想のサーバを起動できるものなら... (WPとブラウザのような関係)

Vagrantと仮想環境プロバイダ

17Sunday, October 13, 13

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

• APIをもっており、仮想のサーバを起動できるものなら... (WPとブラウザのような関係)

Vagrantと仮想環境プロバイダ

17Sunday, October 13, 13

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

• APIをもっており、仮想のサーバを起動できるものなら... (WPとブラウザのような関係)

Vagrantと仮想環境プロバイダ

17Sunday, October 13, 13

Vagrantはプロバイダを選択可能

18Sunday, October 13, 13

Vagrantはプロバイダを選択可能

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

18Sunday, October 13, 13

Vagrantはプロバイダを選択可能

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

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

18Sunday, October 13, 13

Vagrantはプロバイダを選択可能

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

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

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

18Sunday, October 13, 13

Vagrantはプロバイダを選択可能

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

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

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

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

18Sunday, October 13, 13

Vagrantはプロバイダを選択可能

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

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

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

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

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

18Sunday, October 13, 13

Vagrantの基本ライフサイクル

19

コマンド 説明 / 状態

up 仮想マシン起動

provision 任意の方法でサーバ構築

suspend/resume 一時停止/再開

reload 再起動

halt 停止

destroy 仮想マシン破棄

Sunday, October 13, 13

VagrantのプロビジョニングとVMの再利用

※ここからしばらくVirtualBox使用のローカル環境前提で話します※VM = VirtualMachine = 仮想マシン

Sunday, October 13, 13

ご注意:Vagrantのインストールについて• 公式サイトのパッケージを使いましょう

• プロダクトはRubyGemですが、依存やらの解消のためそうなってます

• ダメ: gem install vagrant

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

21Sunday, October 13, 13

サーバの構築方法は選択可能• shell

• Ansible

• Chef(Solo/Client)

• Puppet(Apply/Agent)

• これらは`provision`実行時のことなので、普通のVMとして使い続けてももちろんOK

22Sunday, October 13, 13

お勧めのプロビジョニングは?• 最初はShell

• 手っ取り早い

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

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

• Box(VMイメージ)の再利用や共有程度ならShellでOK

• “構築手順”自体の再利用性・冪等性を求めるならShellでなく、Ansible, Chef, Puppetを学ぼう

23Sunday, October 13, 13

VMを開発者で共有する• 仮想Disk=ただのファイルなので、使い回せば

同じテーマの開発者同士で設定済みのサーバを共有

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

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

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

24Sunday, October 13, 13

SandBox(saharaプラグイン)で何度でもやり直す

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

• SandBoxモードを有効にすると、任意の時点でVMのスナップショットを取得&そのスナップショットに戻すことが可能

• WordPressのアップデートや、開発中のプラグイン等の挙動を簡単に試し、以前の状態に戻すことができます

25Sunday, October 13, 13

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

26Sunday, October 13, 13

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

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

26Sunday, October 13, 13

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

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

26Sunday, October 13, 13

Vagrant x StaticPressからの色々

Vagrant上のWordPressからStaticPress経由でできそうなこと

※ StaticPress-S3は紹介済みなのでその他

Sunday, October 13, 13

まずはGitリポジトリ• ロールバック・フォワードやバックアップ、

履歴管理のため、Gitへ

• VM上でもよし

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

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

28Sunday, October 13, 13

1.普通のレンサバへ• FTPなりで更新、git hookでアップ自動化も

• そもそもPHP実行しないのでそんなに重くならないかも

• 価格固定

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

29Sunday, October 13, 13

2.DropBoxへ• Public公開機能を

• Dropboxにそのまま出力で同期いらず

• なにかしらリバースプロキシが必要

• 転送量制限

30

Cloud Front

Sunday, October 13, 13

3.herokuへ• Rubyでちょっと書けば静的ファイルの配信

可能

• 維持費無料

31Sunday, October 13, 13

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

対応

• 不必要なほど色々可能

32Sunday, October 13, 13

• インスタンスはELB標準対応

• AutoScaleでインスタンス増減

4.AWS OpsWorksへ(2/3)

33Sunday, October 13, 13

• 勝手にCloudWatch開始• yes,expensive

4.AWS OpsWorksへ(3/3)

34

Cloud Watch

Sunday, October 13, 13

色々考えてみましたがS3で十分

Sunday, October 13, 13

最後に:Vagrantリファレンス

36

こういうのもでてますウォークスルーに丁度良い内容

http://docs.vagrantup.com/v2/

Sunday, October 13, 13

Sunday, October 13, 13