s e a r c h S e a r c h L o g i n S i g n u p
(一) T r e n d
(二) Q i i t a E n g i n e e r F e s t a 2 0 2 4
(三) Q u e s t i o n
(四) O f f i c i a l E v e n t
(五) O f f i c i a l C o l u m n
(六) s i g n p o s t C a r e e r
(七) O r g a n i z a t i o n
2 2 6
G o t o l i s t o f u s e r s w h o l i k e d
2 3 1
m o r e _ h o r i z
i n f o
M o r e t h a n 5 y e a r s h a v e p a s s e d s i n c e l a s t u p d a t e .
@ k a s a h a r u ( W a t a r u K A S A H A R A ) in C l a s s i 株 式 会 社
今 か ら で も 始 め ら れ る C h e f 入 門
● c h e f
● k n i f e - s o l o
● s e r v e r s p e c
● t e s t - k i t c h e n
L a s t u p d a t e d a t 2 0 1 4 - 0 6 - 1 2 P o s t e d a t 2 0 1 4 - 0 6 - 1 1
は じ め に
● お お ま か な C h e f の 概 要 か ら テ ス ト ま で を 記 載
● ま た k n i f e - s o l o を 使 用 し た 環 境 構 築 か ら 、 S e r v e r s p e c お よ び t e s t - k i t c h e n を 使 っ た テ ス ト の サ ン プ ル も ま と め た
C h e f
概 要
● ミ ド ル ウ ェ ア の 設 定 や ア プ リ ケ ー シ ョ ン の イ ン ス ト ー ル な ど の サ ー バ 構 築 を 自 動 化 す る た め の ツ ー ル で 、 今 は や り の I n f a s t r u c t u r e a s C o d e
● サ ー バ の 増 強 な ど に 合 わ せ た イ ン フ ラ の 構 築 の 自 動 化 や デ プ ロ イ 時 の 環 境 整 備 に も 有 用
● 従 来 の 手 順 書 が そ の ま ま コ ー ド に な る た め 、 メ ン テ ナ ン ス も し や す い
● バ ー ジ ョ ン 管 理 や テ ス ト が で き る
● 複 数 の 同 一 環 境 を 構 築 す る こ と に 向 い て い る た め 、 V a g r a n t な ど と 組 み 合 わ せ る こ と で プ ロ ジ ェ ク ト メ ン バ ー 間 で 開 発 環 境 を 統 一 す る こ と に も 利 用 で き る
C h e f の 構 成
● C h e f に は 大 き く ﹃ C h e f - S e r v e r / C l i e n t 構 成 ﹄ と ﹃ C h e f - S o l o 構 成 ﹄ が あ る
● 規 模 に も よ る が 、 個 人 的 に は ﹃ C h e f - S o l o 構 成 ﹄ で 十 分 な イ メ ー ジ ( そ し て C h e f - S o l o し か 使 っ た こ と あ り ま せ ん )
C h e f - S e r v e r / C l i e n t 構 成
● C h e f - S e r v e r , N o d e , W o r k s t a t i o n の 3 コ ン ポ ー ネ ン ト か ら 成 る
● 公 式 ペ ー ジ 構 成 図
C h e f - S e r v e r
● N o d e 情 報 の 管 理
● C o o k b o o k の 管 理
● C l i e n t の 認 証
N o d e
● 管 理 対 象 サ ー バ で C h e f - C l i e n t が 動 く
● C h e f - S e r v e r に 問 い 合 わ せ 、 C o o k b o o k を 適 用
W o r k s t a t i o n
● C o o k b o o k の 開 発 は こ こ で 行 う
● C o o k b o o k を C h e f - S e r v e r に ア ッ プ ロ ー ド
C h e f - S o l o 構 成
● S e r v e r も C l i e n t も 必 要 と し な い ス タ ン ド ア ロ ー ン 版
● 対 象 の マ シ ン に コ マ ン ド と し て C h e f を 適 用 す る
C h e f - s o l o
イ ン ス ト ー ル
$ curl -L https://www.opscode.com/chef/install.sh | sudo bash
# インストール確認
$ chef-solo -v
Chef: 11.14.0.alpha.3
簡 単 な 用 語 説 明
R e c i p e ( レ シ ピ )
● R e s o u r c e の 定 義 ( サ ー バ の 設 定 ) が 書 か れ る フ ァ イ ル
● 従 来 の 手 順 書 に あ た る も の
● R u b y で 記 述 で き 、 次 の よ う な フ ァ イ ル に 成 る
● こ れ は 、 g i t - c o r e と い う パ ッ ケ ー ジ を a p t な り y u m な り で イ ン ス ト ー ル す る と い う こ と を 示 す
● 正 確 に は 、 対 象 の サ ー バ に 対 し ﹃ g i t - c o r e が 入 っ た 状 態 で あ る こ と ﹄ と い う 状 態 を 記 載 し て い る
● OS の 差 分 は C h e f が 吸 収 す る た め 、 基 本 的 に は 考 え な く て 良 い ( 例 外 は あ る )
d e f a u l t . r b
package "git-core" do
action :install
end
c o o k b o o k ( ク ッ ク ブ ッ ク )
● R e c i p e を 含 め 、 そ の 他 必 要 な フ ァ イ ル や デ ー タ が ま と ま っ た デ ィ レ ク ト リ
# cookbook のディレクトリ構成
.
├── attributes
├── definitions
├── files
│ └── default
├── libraries
├── providers
├── recipes
├── resources
└── templates
└── default
k i t c h e n ( キ ッ チ ン )
● 単 に リ ポ ジ ト リ と も 呼 ば れ る
● C h e f の 実 行 に 必 要 な 関 連 フ ァ イ ル 群
# kitchen のディレクトリ構成
# 自分で cookbook を作成した場合は、基本的に site-cookbooks/ 下に置くことになる
.
├── cookbooks
├── data_bags
├── environments
├── nodes
├── roles
└── site-cookbooks
k n i f e - s o l o
● k n i f e コ マ ン ド を 使 用 す る こ と で 、 ロ ー カ ル 環 境 と は 別 の 指 定 し た 環 境 に 対 し C h e f - S o l o を 実 行 す る こ と が で き る
ユ ー ス ケ ー ス 例
● ホ ス ト OS 上 に V a g r a n t で 仮 想 環 境 を 用 意 し 、 そ の 仮 想 環 境 を C h e f で 構 築 し た い 場 合
● ホ ス ト OS で 作 成 し た c o o k b o o k を ゲ ス ト OS に ロ グ イ ン せ ず に k n i f e コ マ ン ド で C h e f - S o l o を 実 行 で き る
イ ン ス ト ー ル
# インストールはホストOS 側で行う
$ gem install knife-solo
# インストール確認
$ gem list | grep knife
knife-solo ( 0.4.2)
k i t c h e n の 作 成
$ knife solo init <kitchen 名>
c o o k b o o k の 作 成
# 作成した kitchen 下でおこなう
$ knife cookbook create <cookbook 名> -o site-cookbooks
R e c i p e の 作 成
● c o o k b o o k を 作 成 す る と s i t e - c o o k b o o k s / / r e c i p e s / d e f a u l t . r b と い う フ ァ イ ル が で き る の で そ れ を 編 集 す る ( こ れ が R e c i p e に な る )
N o d e オ ブ ジ ェ ク ト の 作 成
● N o d e オ ブ ジ ェ ク ト と は 、 管 理 対 象 サ ー バ ( N o d e ) に ど の R e c i p e を 適 用 す る か を 設 定 す る フ ァ イ ル の こ と
● s a m p l e 1 と い う ホ ス ト 名 を 持 っ た サ ー バ に 対 し 、 g i t と い う R e c i p e を 適 用 し よ う と し た 場 合 、 次 の よ う に 記 述 す る
n o d e s / s a m p l e 1 . j s o n
{
"run_list" :[
"recipe[git]"
]
}
● 先 に s a m p l e 1 に 対 し 、 ホ ス ト OS か ら C h e f - S o l o を イ ン ス ト ー ル し て お く と 、 N o d e オ ブ ジ ェ ク ト の ひ な 形 が 作 ら れ る
● ホ ス ト OS か ら の C h e f - S o l o イ ン ス ト ー ル コ マ ン ド は 以 下 の と お り
$ knife solo prepare sample1
● ま た 、 N o d e オ ブ ジ ェ ク ト を 編 集 後 に 実 際 に R e c i p e を 適 用 す る 場 合 は 下 記 コ マ ン ド を 入 力 す る
$ knife solo cook sample1
テ ス ト
● C h e f を 使 い 構 築 し た 環 境 が 意 図 し た も の に な っ て い る か を 確 認 す る た め に テ ス ト を 行 う 必 要 が あ る
● 直 接 サ ー バ に S S H 接 続 を し て 確 認 す る の も よ い が 、 便 利 な テ ス ト ツ ー ル が あ る
S e r v e r s p e c
● イ ン フ ラ テ ス ト の た め の ラ イ ブ ラ リ ( C h e f 専 用 で は な い )
● R S p e c 形 式 で 記 述 す る
イ ン ス ト ー ル
$ gem install serverspec
# インストール確認
$ gem list | grep server
serverspec ( 1.7.0)
記 述 例
● 例 と し て " g i t - c o r e " パ ッ ケ ー ジ が イ ン ス ト ー ル さ れ て い る こ と を 期 待 す る テ ス ト は 次 の よ う に 書 く
g i t _ s p e c . r b
require 'spec_helper'
describe package ( 'git-core' ) do
it { should be_installed }
end
t e s t - k i t c h e n
● 前 述 し た S e r v e r s p e c な ど と 組 み わ せ て 、 仮 想 マ シ ン の 作 成 - > R e c i p e の 適 用 - > テ ス ト ま で を ひ と 通 り 行 う 統 合 テ ス ト フ レ ー ム ワ ー ク
イ ン ス ト ー ル
$ gem install test-kitchen
# インストール確認
$ gem list | grep kitchen
test-kitchen ( 1.2.1)
実 際 に 試 し て み る
● V a g r a n t で 仮 想 環 境 を 用 意 し 、 v i m の イ ン ス ト ー ル と . v i m r c の 配 置 を k n i f e - s o l o で 行 い 、 そ れ を テ ス ト す る
k i t c h e n か ら R e c i p e の 作 成 ま で
● k i t c h e n の 作 成
# kitchen 名は "qiita0611" とする
$ knife solo init qiita0611
Creating kitchen...
Creating knife.rb in kitchen...
Creating cupboards...
● c o o k b o o k の 作 成
# cookbook 名は vim
$ knife cookbook create vim -o site-cookbooks
** Creating cookbook vim
** Creating README for cookbook: vim
** Creating CHANGELOG for cookbook: vim
** Creating metadata for cookbook: vim
● R e c i p e の 編 集
s i t e - c o o k b o o k s / v i m / r e c i p e s / d e f a u l t . r b
package "vim" do
action :install
end
template "/home/vagrant/.vimrc" do
source "vimrc.erb"
owner "vagrant"
group "vagrant"
mode 0644
end
● 配 置 し た い . v i m r c は s i t e - c o o k b o o k s / v i m / t e m p l a t e s / d e f a u l t / v i m . r c . e r b と し て 置 い て お く
● 今 回 は t e s t - k i t c h e n を 使 っ て 動 作 を 確 認 す る た め ( 実 際 に 仮 想 マ シ ン を 用 意 し な い た め ) 、 N o d e オ ブ ジ ェ ク ト の 作 成 は ス キ ッ プ
t e s t - k i t c h e n の 準 備
● t e s t デ ィ レ ク ト リ の 作 成
$ kitchen init
create .kitchen.yml
create test /integration/default
run gem install kitchen-vagrant from "."
Successfully installed kitchen-vagrant-0.15.0
Parsing documentation for kitchen-vagrant-0.15.0
Done installing documentation for kitchen-vagrant after 0 seconds
● . k i t c h e n . y m l の 編 集
● s u i t e s : r u n _ l i s t を N o d e オ ブ ジ ェ ク ト の 用 に 編 集
. k i t c h e n . y m l
---
driver :
name : vagrant
provisioner :
name : chef_solo
platforms :
- name : ubuntu-12.04
suites :
- name : default
run_list :
- recipe[vim::default]
attributes :
S e r v e r s p e c の 用 意
● t e s t / i n t e g r a t i o n / d e f a u l t / 下 に 移 動 し 、 下 記 コ マ ン ド を 入 力
serverspec-init
Select OS type :
1) UN * X
2) Windows
Select number: 1
Select a backend type :
1) SSH
2) Exec ( local )
Select number: 1
Vagrant instance y/n: y
Auto-configure Vagrant from Vagrantfile? y/n: n
Input vagrant instance name:
+ spec/
+ spec//httpd_spec.rb
+ spec/spec_helper.rb
+ Rakefile
● s p e c _ h e l p e r . r b の 編 集
s p e c _ h e l p e r . r b
require 'serverspec'
include Serverspec :: Helper :: Exec
include Serverspec :: Helper :: DetectOS
RSpec . configure do | c |
c . before :all do
c . path = '/sbin:/usr/sbin'
end
end
● s p e c / h t t p d _ s p e c . r b の リ ネ ー ム お よ び 編 集
● h t t p d _ s p e c . r b - > v i m _ s p e c . r b に 変 更
s p e c / v i m _ s p e c . r b
require 'spec_helper'
describe package ( 'vim' ) do
it { should be_installed }
end
describe file ( '/home/vagrant/.vimrc' ) do
it { should be_file }
end
テ ス ト の 実 行
● t e s t / i n t e g r a t i o n / d e f a u l t / s p e c / を t e s t / i n t e g r a t i o n / d e f a u l t / s e r v e r s p e c / に リ ネ ー ム す る
● q i i t a 0 6 1 1 / デ ィ レ ク ト リ ま で 戻 り 、 テ ス ト コ マ ン ド を 実 行
$ kitchen test
....
Finished in 0.08399 seconds
2 examples, 0 failures
Finished verifying <default-ubuntu-1204> ( 0m1.42s) .
----- > Destroying <default-ubuntu-1204>...
[ default] Forcing shutdown of VM...
[ default] Destroying VM and associated drives...
Vagrant instance <default-ubuntu-1204> destroyed.
Finished destroying <default-ubuntu-1204> ( 0m2.45s) .
Finished testing <default-ubuntu-1204> ( 2m28.58s) .
----- > Kitchen is finished. ( 2m28.85s)
作 成 し た サ ン プ ル
● h t t p s : / / g i t h u b . c o m / k a s a h a r u / s a m p l e _ f o r _ t e s t k i t c h e n
参 考
● C h e f
● K i t c h e n C I
● S e r v e r s p e c
● C h e f 実 践 入 門
2 2 6
G o t o l i s t o f u s e r s w h o l i k e d
2 3 1
c o m m e n t 0
G o t o l i s t o f c o m m e n t s
R e g i s t e r a s a n e w u s e r a n d u s e Q i i t a m o r e c o n v e n i e n t l y
(一) Y o u g e t a r t i c l e s t h a t m a t c h y o u r n e e d s
(二) Y o u c a n e f f i c i e n t l y r e a d b a c k u s e f u l i n f o r m a t i o n
(三) Y o u c a n u s e d a r k t h e m e
W h a t y o u c a n d o w i t h s i g n i n g u p
S i g n u p L o g i n
2 2 6
G o t o l i s t o f u s e r s w h o l i k e d
2 3 1
m o r e _ h o r i z
H o w d e v e l o p e r s c o d e i s h e r e .
G u i d e & H e l p
C o n t e n t s
S N S
O u r s e r v i c e
C o m p a n y