42
株株株株株株株株 株株 VAGRANT

Vagrant

Embed Size (px)

Citation preview

Page 1: Vagrant

株式会社イプロス外山 寛

VAGRANT

Page 2: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

2

自己紹介• 外山 寛

–株式会社イプロス–チーフエンジニア

• Github– @toyama0919– https://github.com/toyama0919/

• Twitter– @god_tongue_19

Page 3: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

3

vagrant provison1

vagrant package2

3

Vagrant 1.34

まとめ5

vagrant plugin

Page 4: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

4

VAGRANTの最大の長所は?

Page 5: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

5

インフラのコード化!

(Infrastructure As Code)

Page 6: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

6

インフラのコード化?

Vagrantfileはテキストファイル!テキストファイルであるということは履歴を管理できるということ。

Virtual BOXや VM Wareはイメージバイナリファイルだと履歴が管理できない。便利ではあるが変更内容を共有できない。本番では動いているが自分の環境では動かないとかはよくある話。

Page 7: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

7

本質的でない作業に時間を使わない。

Page 8: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

8

プロビジョン(provision)

Page 9: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

9

プロビジョン (provision)とは?

仮想マシンを起動した際に実行される一連の処理。サブコマンドの provision ,up ,reloadを実行した時に発動する。※ 1

※1 vagrant 1.3で仕様変更!

Page 10: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

10

プロビジョン (provision)の利点

ミドルウェアのインストールやサービスの起動、停止などを自動化できる。構築する仮想マシンが VirtualBoxでもEC2でも同じスクリプト、 Cookbookが使える。何回実行しても同じ結果になる。

→冪等性 (べきとうせい )

Page 11: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

11

プロビジョン (provision)

Chefや Chef-SoloVagrantfileの中で cookbookのパスや適用したいレシピを指定する。

ShellShellは外部ファイルではなくインラインで記述

※することも可能。 後述

Puppet

CFEngine

Page 12: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

12

# Vagrantfileにコマンドを直接記述config.vm.provision :shell, :inline => "echo foo > /vagrant/test”

# 実行する外部 Shellを指定config.vm.provision :shell, :path => "script/setup.sh"

Shellによるプロビジョン

Page 13: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

13

# 以下のいずれかでプロビジョンされる。vagrant {up,reload,provision}

# shellのみでプロビジョンvagrant up --provision-with shell

Shellによるプロビジョン2

Page 14: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

14

chefとは?

サーバ OSでのインストール・設定・各サービスの状態管理等、諸々のシステム構築や運用作業を自動化できるRuby製。オープンソースとして公開されている。ミドルウェアの状態を「 Cookbook」として管理する。

Page 15: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

15

# chef-soloを仮想マシン上で実行config.vm.provision :chef_solo do |chef| chef.cookbooks_path = [ "cookbooks", "site-cookbooks" ] chef.run_list = [ "recipe[mysql55]", "recipe[java]" ]end

# これでもよい。chef.add_recipe("java")chef.add_recipe(”mysql55")

chefによるプロビジョン

Page 16: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

16

Vagrant 本番環境Chef

理想形はこんな感じ

Page 17: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

17

POVIDER(プロバイダー )

Page 18: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

18

プロバイダー (provider)とは?

仮想マシンを作るエンジンの部分。仮想マシンの種別、と覚えれば良い。例を挙げると以下のとおり

VirtualBoxAWSVMware FusionKVM

Page 19: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

19

プラグイン

Page 20: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

20

プラグイン

Vagrantのコマンドを拡張できる。providerや vagrant内部もプラグインで出来ている。現在の vagrantのバージョンは 1.2系だが古いバージョンとプラグインの互換性がないこともあるので注意。特に 1.0と 1.1以上では大きく仕様が変更されており、 Vagrantfileの記述方法自体も変わっている。

Page 21: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

21

どんなプラグインがある?

aws

sahara

veewee

berkshelf

vagrant-vbguest

vagrant-omnibus

Etc…

Page 22: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

22

vagrant-aws plugin

Vagrantで aws上に EC2インスタンスを作成できる。VPCに対応している。最近 ElasticIPに対応した。リージョン、アベイラビリティゾーン、セキュリティグループ、タグ、インスタンスタイプなど細かな指定が可能。

Page 23: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

23

vagrant-aws plugin

Internal AWS

EC2

vagrant up

Page 24: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

24

vagrant upだけで

EC2インスタンスを生成!

Page 25: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

25

config.vm.provider :aws do |aws, override| aws.access_key_id = "YOUR KEY" aws.secret_access_key = "YOUR SECRET KEY" aws.keypair_name = "KEYPAIR NAME” aws.instance_type = "t1.micro” aws.region = "ap-northeast-1” aws.security_groups = [ 'quick-start-1' ] aws.ami = "ami-XXXXXXXXX” override.ssh.username = ”ec2-user" override.ssh.private_key_path = "PATH" end

vagrant-aws plugin の設定例

Page 26: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

26

# プラグインをインストール$ vagrant plugin install vagrant-aws

# EC2インスタンスを起動$ vagrant up –provider=aws

# EC2インスタンスを Terminate 1※$ vagrant destroy

※1 stop instanceはない様子。。。

vagrant-aws plugin の設定例

Page 27: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

27

Amazon Linuxの注意点

Amazon Linuxをローカル環境に構築することは基本できない。Chefの Cookbookが Amazon Linuxに対応していないことがたまにあり、自分の環境と同じプロビジョニングをするために amazon用の対応が必要な場合がある。Shell Scriptは基本同じものが使える。

Page 28: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

28

sahara plugin

仮想マシンを簡単にロールバックできるプラグイン。Vagrantのプラグインといえばこれ、というぐらい有名。残念ながら VirtualBoxのみ対応。

Page 29: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

29

# sandboxモードに入る$ vagrant sandbox on

# 何か作業$ ~

# 巻き戻す$ vagrant sandbox rollback

# 確定する。 (rollbackしたらここに戻る )$ vagrant sandbox commit

sahara plugin

Page 30: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

30

sahara plugin

sandbox off コミットしていなければもとに戻せる。残念ながら VirtualBoxのみ対応。

Page 31: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

31

自分の BOXを他人に公開したい。

Page 32: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

32

PACKAGE(パッケージ )

Page 33: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

33

パッケージング (package)

自分で修正した仮想マシンを共有できる。拡張子が .boxで保存する。Vagrantfileで BOXのロケーションを指定できる。作成する BOXは vagrantで使用されるのが前提なので、 vagrantユーザーがいなければいけない。

Page 34: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

34

# 作業ディレクトリに Vagrantfile# package.boxが作成される$ vagrant package

# 作った BOXを自分のマシンに追加$ vagrant box add my_box package.box

# BOXを s3にアップロードして共有$ s3cmd put package.box s3://BUCKET[/PREFIX]

packageの使い方

Page 35: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

35

イプロスでの使用例Internal S3

BASEBOX

Page 36: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

36

config.vm.box = ”my_box"

# 作成した BOXを s3にアップロードしておき、# その URLを指定する。 (httpでなくても可 )config.vm.box_url = "http://hoge.s3.amazonaws.com/develop/dev.box"

Vagrantfileの設定例

vagraut upだけでダウンロードが開始され、仮想マシンがローカルに展開される

Page 37: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

37

パッケージングの使い道としては

自分で作ったボックスを S3にアップロードし、各自が vagrant経由でローカルにマシンを展開する。ローカルに BOXが存在すれば 2度目以降はマシンをダウンロードしない。最低限の部分は BOX化する、で良いがミドルウェアやアプリをインストールしていく部分は provisioningで管理していくことが望ましい。

Page 38: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

38

パッケージングの注意点

BOXの場所はインターネットにつながる場所なら可能なので、認証情報をBOXに入れてしまう場合は注意が必要。 (リポジトリのパスワードとか )

開発で使う場合は S3に BOXを置くケースが多いと思うので、 Bucket Policyなどで縛るとよい。

Page 39: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

39

開発が活発なので仕様が大きく変わる。

Page 40: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

40

Vagrant1.3がリリース、変更点は

vagrant upで初回のみプロビジョニングが実行される。2 —回目以降は明示的に provisionとしないとプロビジョニングされない。vagrant reloadも同様。Mac OS Xの guestが対応したらしい。後はファイルの構成とか細かい話。

Page 41: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

41

まとめ

USEVAGRANT

Page 42: Vagrant

COPYRIGHT © 2013 IPROS CORPORATION. ALL RIGHTS RESERVED. 【 CONFIDENTIAL】

Vagrant

42

ご静聴ありがとうございました。