Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
infra-auto-2014-10-07
Search
rrreeeyyy
October 07, 2014
Technology
1.3k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
infra-auto-2014-10-07
ITインフラ 業務自動化現状確認会
rrreeeyyy
October 07, 2014
More Decks by rrreeeyyy
See All by rrreeeyyy
もう一度考える SRE チームの作り方・育て方 / Rethinking SRE #1: Building and Growing SRE Teams
rrreeeyyy
6
1.3k
Reliability in the Age of AI: Engineering for AI Velocity
rrreeeyyy
0
230
Rethinking Incident Response: Context-Aware AI in Practice - Incident Buddy Edition -
rrreeeyyy
0
290
Rethinking Incident Response: Context-Aware AI in Practice
rrreeeyyy
3
2.6k
Incident Response Practices: Waroom's Features and Future Challenges
rrreeeyyy
0
340
An Efficient Incident Response Training with AI / SRE NEXT 2024 Sponsor Session
rrreeeyyy
1
6.3k
カンファレンスから見る SRE トレンド 2024 / SRE Trends from Conferences in 2024 #SRE_Findy
rrreeeyyy
4
2.7k
信頼性の育て方 / mackerel-meetup-15
rrreeeyyy
10
3.1k
SRE の歩き方・進め方 / sre-walk-through-procedure
rrreeeyyy
0
9.1k
Other Decks in Technology
See All in Technology
Futexes the good, the bad, the ugly
ennael
PRO
0
130
不可逆な意思決定を避けながら10億超の顧客データを AI Ready にするデータ基盤設計
baseballyama
1
150
AgentCoreで実践するハーネスエンジニアリング
yakumo
1
290
[2026-09-30]ロックンロールは鳴り止まないっ - 信頼性かまってちゃん - 「データ駆動を投げ捨ててまで。」追いかける信頼性改善に向けた取り組みの話
tosite
0
210
3つのアプローチで目指す チームを強くするAI駆動開発
thkt
0
120
雪かき部 #7 もう怖くない!SELECT文!
foursue
0
280
全人類(ほぼ)AWS Organizations の上でAWSを利用している、その世界を知る話
htan
0
120
IoTデバイスを繋げるプロトコルMatterをAndroidで使用する方法
harutiro
0
120
購入ドメインでの課題と取り組み
ykagano
0
150
プロダクト価値を、 チームが使える判断軸に変える
vivion
0
130
ハードウェアコンペでもAI駆動開発が進んでいる話
iotengineer22
0
340
予測不能な実行エージェントを安全にサクッと試せるサンドボックス環境の話
sansantech
PRO
0
130
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.1k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Automating Front-end Workflow
addyosmani
1369
210k
Mobile First: as difficult as doing things right
swwweet
225
10k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.5k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
530
Building the Perfect Custom Keyboard
takai
2
890
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
250
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
860
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