Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
infra-auto-2014-10-07
rrreeeyyy
October 07, 2014
Technology
1
670
infra-auto-2014-10-07
ITインフラ 業務自動化現状確認会
rrreeeyyy
October 07, 2014
Tweet
Share
More Decks by rrreeeyyy
See All by rrreeeyyy
rrreeeyyy
10
2.3k
rrreeeyyy
6
16k
rrreeeyyy
5
3.9k
rrreeeyyy
5
600
rrreeeyyy
13
2.4k
rrreeeyyy
3
1.4k
rrreeeyyy
12
6.5k
rrreeeyyy
1
800
rrreeeyyy
16
2.5k
Other Decks in Technology
See All in Technology
takem001
0
910
asaju7142501
0
320
clustervr
0
140
ocise
0
160
ama_ch
0
3.6k
_kensh
1
150
yosshi_
3
330
pinboro
0
2.2k
kenya888
1
130
yamasaki696
0
100
ganariya
0
150
clustervr
0
200
Featured
See All Featured
maggiecrowley
8
410
sstephenson
144
12k
mongodb
23
3.8k
brianwarren
83
4.7k
hursman
106
9.2k
morganepeng
92
14k
rocio
155
11k
eileencodes
113
25k
colly
66
3k
rasmusluckow
318
18k
moore
125
21k
destraynor
223
47k
Transcript
Itamae ͬͯΈͨ YOSHIKAWA Ryota (@rrreeeyyy) 1 ը૾ͷ͓ण࢘৽॓۠ͷ "Ეؙ" ͱ͍͏͓ళͷͰ͢ɻඒຯ͔ͬͨ͠ !
ITΠϯϑϥ ۀࣗಈԽݱঢ়֬ೝձ (2014/10/07) - YOSHIKAWA Ryota (@rrreeeyyy) 1
ࣗݾհ 4 ٢ ཽଠ (Twitter: @rrreeeyyy → ) 4 ϋʔτϏʔπ(ձ)ͱ͍͏ձࣾͷ৽ଔͰ͢
4 ͱݴ͍ͭͭۈଓ 4 ͙Β͍ʹͳΓ·͢2 4 ۀͷ @koemu ͞Μͱಉ͡෦ॺͰࣗಈԽΞϨίϨ 4 ͏ MSP ͷۀͰαʔόͷࢹɾཧ 2 ֶੜελοϑͱͯ͠ೖࣾͨ͠ͷ͕ 18 ࡀ (େֶ 1 ੜͷ 10 ݄) ͙Β͍Ͱɺࠓֶ෦Λଔۀ͠·ͨ͠ɻ ITΠϯϑϥ ۀࣗಈԽݱঢ়֬ೝձ (2014/10/07) - YOSHIKAWA Ryota (@rrreeeyyy) 2
OSC 2014 Tokyo Fall ͰΓ·͢ 3 3 ಥવͷએେมࣦྱக͠·ͨ͠ɻΑΖ͓͘͠ئ͍͠·͢ɻۓுͯ͠·͢ɻ ITΠϯϑϥ ۀࣗಈԽݱঢ়֬ೝձ
(2014/10/07) - YOSHIKAWA Ryota (@rrreeeyyy) 3
͓அΓͱँࡑ ITΠϯϑϥ "ۀ"ࣗಈԽݱঢ়֬ೝձͳͷʹ ۀͰ͍ͬͯΔπʔϧͷΛ͠·ͤΜ 4 ۀͷ @koemu ઌੜʹ͓ͤ͠·ͨ͠(దͰ͢ɻ͢Έ·ͤΜɻ) ITΠϯϑϥ ۀࣗಈԽݱঢ়֬ೝձ
(2014/10/07) - YOSHIKAWA Ryota (@rrreeeyyy) 4
Provisioning Tools ͷ ITΠϯϑϥ ۀࣗಈԽݱঢ়֬ೝձ (2014/10/07) - YOSHIKAWA Ryota (@rrreeeyyy)
5
Provisioning Tools ݴ͑Δ͔ͳ 4 Chef 4 Ansible 4 Salticid 4
Puppet 4 SaltStack 4 : ITΠϯϑϥ ۀࣗಈԽݱঢ়֬ೝձ (2014/10/07) - YOSHIKAWA Ryota (@rrreeeyyy) 6
Popular Chef Ansible ITΠϯϑϥ ۀࣗಈԽݱঢ়֬ೝձ (2014/10/07) - YOSHIKAWA Ryota (@rrreeeyyy)
7
I like... Ansible ITΠϯϑϥ ۀࣗಈԽݱঢ়֬ೝձ (2014/10/07) - YOSHIKAWA Ryota (@rrreeeyyy)
8
Why Ansible? - ΤʔδΣϯτϨεʂ - γϯϓϧʂ - ύϫϑϧʂ 5 ύϫϑϧ͋Μ·Γײͨ͜͡ͱແ͍Ͱ͕͢γϯϓϧͰΤʔδΣϯτϨεͳ࡞Γ͖Ͱ͢
ITΠϯϑϥ ۀࣗಈԽݱঢ়֬ೝձ (2014/10/07) - YOSHIKAWA Ryota (@rrreeeyyy) 9
and Testing tool is... ITΠϯϑϥ ۀࣗಈԽݱঢ়֬ೝձ (2014/10/07) - YOSHIKAWA Ryota
(@rrreeeyyy) 10
6 Yes, I like. (͓आΓͯ͠·͢ http://serverspec.org/images/logo.png ) ITΠϯϑϥ ۀࣗಈԽݱঢ়֬ೝձ (2014/10/07)
- YOSHIKAWA Ryota (@rrreeeyyy) 11
Կ͕ى͜Δ͔ 4 Provisioning Tool 4 Ansible (Python) 4 Testing Tool
4 Serverspec (Ruby) ITΠϯϑϥ ۀࣗಈԽݱঢ়֬ೝձ (2014/10/07) - YOSHIKAWA Ryota (@rrreeeyyy) 12
! 99 ݴޠ͕౷Ұ͞Ε͓ͯΒͣɺvirtualenv, bundler ͷπʔϧΛ֮͑ͨΓ ansible ίϚϯυ bundle exec rake
spec ͷίϚϯυΛ͍֮͑ͯΔ࣌ͷإ ITΠϯϑϥ ۀࣗಈԽݱঢ়֬ೝձ (2014/10/07) - YOSHIKAWA Ryota (@rrreeeyyy) 13
Itamae 7 ը૾ http://bokete.jp/odai/340329 ͔Β͓आΓ͓ͯ͠Γ·͕͢ ͋Γ·ͨ͠Β͝࿈བྷԼ͍͞ɻ ITΠϯϑϥ ۀࣗಈԽݱঢ়֬ೝձ (2014/10/07) -
YOSHIKAWA Ryota (@rrreeeyyy) 14
Itamae 4 https://github.com/ryotarai/itamae (@ryot_a_rai) 4 https://speakerdeck.com/ryotarai/itamae-infra-as- code-xian-zhuang-que-ren-hui 4 Infrataster ࡞ͬͯΒͬ͠ΌΔํ
4 ઌिͷ Infra as Code ݱঢ়֬ೝձͰϓϨθϯ͞Εͨ (ׂͱલ͔Β͋ͬͨͷͰউखʹͬͯͨ) ITΠϯϑϥ ۀࣗಈԽݱঢ়֬ೝձ (2014/10/07) - YOSHIKAWA Ryota (@rrreeeyyy) 15
Կ͕͍͍ͷ 4 ΤʔδΣϯτϨε 4 γϯϓϧ 4 Ruby DSL (not YAML!)
like a Chef 8 4 specinfra(serverspec ͷ core)ͷ্Ͱཱ 4 Ϩγϐ͕ gem ͰཧͰ͖Δ (Berkshelf ཁΒͣ) 8 Not compatible. ITΠϯϑϥ ۀࣗಈԽݱঢ়֬ೝձ (2014/10/07) - YOSHIKAWA Ryota (@rrreeeyyy) 16
Կ͕͍͍ͷ 4 ႈ 4 --dry-run 4 node attributes json
Ͱཧ 9 4 : 9 yaml Ͱཧ͍ͨ͠ؾ࣋ͪ͋Δ(ग़དྷΔͷ͔ͳʁ) ITΠϯϑϥ ۀࣗಈԽݱঢ়֬ೝձ (2014/10/07) - YOSHIKAWA Ryota (@rrreeeyyy) 17
ී௨ͷྫ package 'httpd' do action :install end template '/etc/httpd/httpd.conf' do
source 'httpd.conf.erb' variables(maxclients: 256) end itamae execute -j node.json -h 192.168.0.1 -p 22 -u yoshikawa -i ~/.ssh/id_rsa recipe.rb ITΠϯϑϥ ۀࣗಈԽݱঢ়֬ೝձ (2014/10/07) - YOSHIKAWA Ryota (@rrreeeyyy) 18
࣮ߦྫ ITΠϯϑϥ ۀࣗಈԽݱঢ়֬ೝձ (2014/10/07) - YOSHIKAWA Ryota (@rrreeeyyy) 19
خ͍͠ࣄ 4 Ruby DSL ͕ॻ͖͍͢10 4 ςετͱϓϩϏδϣχϯάͰݴޠ͕ἧ͏ 4 ྫ͑ Rake
λεΫͰ ɹϓϩϏδϣχϯάˠςετ͕Ұؾʹग़དྷΔ 10 ݸਓͷײͰ͢ɻͨ·ͨ· Ruby ͕͖ͳͷͰɻ ITΠϯϑϥ ۀࣗಈԽݱঢ়֬ೝձ (2014/10/07) - YOSHIKAWA Ryota (@rrreeeyyy) 20
࣮ࡍͷྫ(Properties) ITΠϯϑϥ ۀࣗಈԽݱঢ়֬ೝձ (2014/10/07) - YOSHIKAWA Ryota (@rrreeeyyy) 21
{ "db-01": { "roles": ["common", "db"], "private_key": "~/.ssh/yoshikawa-test_rsa", "ssh_port": 22,
"server_id": 1 }, "web-01": { "roles": ["web", "common"], "domain": "rrreeeyyy.com" } } ITΠϯϑϥ ۀࣗಈԽݱঢ়֬ೝձ (2014/10/07) - YOSHIKAWA Ryota (@rrreeeyyy) 22
࣮ࡍͷྫ(Rakefile) ITΠϯϑϥ ۀࣗಈԽݱঢ়֬ೝձ (2014/10/07) - YOSHIKAWA Ryota (@rrreeeyyy) 23
require 'rake' require 'json' require 'rspec/core/rake_task' properties_file = 'properties.json' properties
= JSON.parse(File.read(properties_file)) properties.keys.each do |key| desc "Run provision to #{key}" namespace :itamae do desc "Run itamae to #{key}" task key.split('.')[0] do command = "bundle exec itamae ssh" command << " -h #{key}" command << " -i #{properties[key]['private_key']}" command << " -p #{properties[key]['ssh_port']}" command << " -j #{properties_file}" properties[key]['roles'].each {|role| command << " provision/#{role}/#{role}.rb"} puts command system command end end namespace :serverspec do desc "Run serverspec to #{key}" RSpec::Core::RakeTask.new(key.split('.')[0].to_sym) do |t| ENV['TARGET_HOST'] = key t.pattern = 'spec/{' + properties[key]['roles'].join(',') + '}/*_spec.rb' end end end 11 https://gist.github.com/rrreeeyyy/84efc2907814c56a2b4a ITΠϯϑϥ ۀࣗಈԽݱঢ়֬ೝձ (2014/10/07) - YOSHIKAWA Ryota (@rrreeeyyy) 24
ݺͼग़͠ํ bundle exec rake itamae:db-01 ࣍ͷΑ͏ʹ͢ΔͱҰؾʹͰ͖Δ bundle exec rake itamae:db-01
serverspec:db-01 ※ ͪΖΜ Rakefile ͰҰؾʹΔλεΫΛఆٛͯ͠Α͍ ITΠϯϑϥ ۀࣗಈԽݱঢ়֬ೝձ (2014/10/07) - YOSHIKAWA Ryota (@rrreeeyyy) 25
࣮ࡍͷྫ(Directoryߏ) ITΠϯϑϥ ۀࣗಈԽݱঢ়֬ೝձ (2014/10/07) - YOSHIKAWA Ryota (@rrreeeyyy) 26
# ls Gemfile Rakefile provision vendor Gemfile.lock properties.json spec #
cd provision && tree ├── common │ ├── common.rb │ ├── recipes │ │ ├── dstat.rb │ │ └── ntp.rb │ └── templates │ └── ntp.conf.erb ├── db │ ├── db.rb │ ├── recipes │ │ └── mysql.rb │ └── templates │ └── my.cnf.erb : ITΠϯϑϥ ۀࣗಈԽݱঢ়֬ೝձ (2014/10/07) - YOSHIKAWA Ryota (@rrreeeyyy) 27
# db/db.rb include_recipe "recipes/mysql.rb" include_recipe "..." : # db/recipes/mysql.rb package
'mysql' do action :install end template '/etc/my.cnf' do action :create source '../templates/my.cnf.erb' variables(host: ENV['TARGET_HOST'], server_id: node[ENV['TARGET_HOST']]['server_id']) end ITΠϯϑϥ ۀࣗಈԽݱঢ়֬ೝձ (2014/10/07) - YOSHIKAWA Ryota (@rrreeeyyy) 28
͕࣌ؒ͋ΕσϞ ITΠϯϑϥ ۀࣗಈԽݱঢ়֬ೝձ (2014/10/07) - YOSHIKAWA Ryota (@rrreeeyyy) 29
·ͱΊ 4 Itamae ͬͯΈͯͨ 4 RubyDSLɾAgentlessɾSimpleɾlight... Ͱྑ͍πʔϧ 4 Itamae ͱ
Serverspec ΛҰؾʹ࣮ߦ͢ΔΓํ 4 Itamae ͷσΟϨΫτϦߏྫΛհ ITΠϯϑϥ ۀࣗಈԽݱঢ়֬ೝձ (2014/10/07) - YOSHIKAWA Ryota (@rrreeeyyy) 30