職人任せにしないインフラ構築/運用 ~ DevOps時代を生きぬくために ~

3e77f9dbec6a87756d1dbdddab283aee?s=47 Nulab Inc.
February 05, 2014

職人任せにしないインフラ構築/運用 ~ DevOps時代を生きぬくために ~

3e77f9dbec6a87756d1dbdddab283aee?s=128

Nulab Inc.

February 05, 2014
Tweet

Transcript

  1. /6$0/5PNPOBSJ/",".63" ৬ਓ೚ͤʹ͠ͳ͍Πϯϑϥߏஙӡ༻ d%FW0QT࣌୅Λੜ͖͵ͨ͘Ίʹd IUUQXXXqJDLSDPNQIPUPTTUBUVFMJCSUZOQT

  2. ࣗݾ঺հ wதଜ஌੒ !JLJLLP  w೔ຊ+FOLJOTϢʔβձ ! wҰ൪޷͖ͳυϥΫΤɿυϥΫΤ wϑϩʔϥΑΓϏΞϯΧ೿

  3. JOψʔϥϘ ! wΞϓϦدΓͷ։ൃऀ wΠϯϑϥํ໘΋ؔΘΓग़͢ ! w+FOLJOT΍Ϗϧυ؀ڥͷ੔උ

  4. ΞδΣϯμ wഎܠ wΠϯϑϥߏஙӡ༻࣌ͷํ਑ wΠϯϑϥͷߏ੒ཁૉ w·ͱΊ

  5. ψʔϥϘͷྺ࢙

  6. ͪΐͬͱલ·ͰͷΠϯϑϥମ੍ IUUQXXXqJDLSDPNQIPUPTTUVBSU@TQJWBDL

  7. ͪΐͬͱલ·ͰͷΠϯϑϥମ੍

  8. wΠϯϑϥ୲౰͸গਓ਺ wπʔϧ΍ϓϥοτϑΥʔϜͷෆ଍ ͪΐͬͱલ·ͰͷΠϯϑϥମ੍ ϊ΢ϋ΢͕ڞ༗͞Εͯͳ͔ͬͨ

  9. IUUQXXXqJDLSDPNQIPUPT[BONBO ࠓͷΠϯϑϥମ੍

  10. ࠓͷΠϯϑϥମ੍

  11. wΞϓϦ։ൃऀ΋Πϯϑϥʹλον wࠓ·ͰͷΠϯϑϥ୲౰͸ɺશମվળ΍ ۓٸ࣌ͷো֐ରԠ wπʔϧ܈͕ঃʑʹॆ࣮ ࠓͷΠϯϑϥମ੍ ϊ΢ϋ΢Λڞ༗Ͱ͖ΔΑ͏ʹ

  12. υϥΫΤͰྫ͑Δͱ

  13. ύʔςΟʔߏ੒

  14. ͪΐͬͱલ·ͰͷΠϯϑϥମ੍

  15. εΩϧస׵

  16. ࠓͷΠϯϑϥମ੍

  17. IUUQXXXqJDLSDPNQIPUPT!/ ϗΠϛΛ࢖͑Δਓ͕૿͑Δͱ ๯ݥ͕ਐΊ΍͘͢ͳΓ·͢

  18. ΞϓϦΠϯϑϥ૒ํ͔Β ໰୊ʹରॲ͠΍͘͢ͳΓ·͢ IUUQXXXqJDLSDPNQIPUPTNIYCIE

  19. wഎܠ wΠϯϑϥߏஙӡ༻࣌ͷํ਑ wΠϯϑϥͷߏ੒ཁૉ w·ͱΊ ΞδΣϯμ

  20. ϊ΢ϋ΢Λڞ༗͠΍͘͢ IUUQXXXqJDLSDPNQIPUPTBMMIBOETWPMVOUFFST

  21. wಈ͘࢓༷ॻ͕ཧ૝త w࡞ۀखॱΛ࢒͓ͯ͘͠ w࢖͑Δ৔໘Ͱ͸πʔϧΛੵۃతʹ ϊ΢ϋ΢Λڞ༗͠΍͘͢

  22. ߏஙӡ༻࡞ۀΛݮΒ͢ IUUQXXXqJDLSDPNQIPUPT!/

  23. w1BT4Λ׆༻ w"84ͳΒ3%4΍&MBTUJ$BDIFͳͲ wඅ༻΍ॊೈੑʹ͚ܽΔ৔߹΋ ߏஙӡ༻࡞ۀΛݮΒ͢

  24. wഎܠ wΠϯϑϥߏஙӡ༻࣌ͷํ਑ wΠϯϑϥͷߏ੒ཁૉ w·ͱΊ ΞδΣϯμ

  25. Πϯϑϥߏங࣌

  26. Πϯϑϥӡ༻࣌

  27. ֩ͱͳΔπʔϧ IUUQXXXqJDLSDPNQIPUPTEFYYVT

  28. "OTJCMF w1ZUIPO੡ͷαʔόߏ੒؅ཧπʔϧ wႈ౳ੑԿ౓࣮ߦͯ͠΋݁Ռ͸ಉ͡ wαʔόଆ͸1ZUIPOͱTTIE͚ͩ -­‐  name:  install  requirement  system  packages

         action:  yum  name={{  item  }}      with_items:          -­‐  make          -­‐  gcc          -­‐  curl
  29. 'BCSJD w1ZUIPO੡ͷσϓϩΠπʔϧ wγΣϧίϚϯυΛྻڍ͍ͯ͘͠ɺ γϯϓϧͳهड़ @task   def  start_tomcat():    

     sudo('rm  -­‐f  /usr/java/tomcat/temp/*.{index,data}')      sudo('service  tomcat  start’)      print  green("Tomcat  started!!!")
  30. ิॿతͳπʔϧ IUUQXXXqJDLSDPNQIPUPT!/

  31. 1BDLFS wΠϝʔδ ".*  ࡞੒πʔϧ w"OTJCMFΛىಈ࣌ ʹ࣮ߦՄೳ wఆظ࣮ߦͯ͠".* Λఆظతʹ࠷৽ʹ {

         "builders":  [{          "type":  "amazon-­‐ebs",          "region":  "us-­‐west-­‐2",          "source_ami":  "ami-­‐ccf297fc",          "instance_type":  "m1.small",          "ssh_username":  "ec2-­‐user",          "ami_name":  "base  {{isotime}}"      }],      "provisioners":  [          {              "type":  "ansible-­‐local",              "playbook_file":  "ansible/ami.yml",              "role_paths":  [                      "ansible/roles/base"              ]          }      ]   }
  32. TFSWFSTQFD w34QFD෩ͷαʔ όߏ੒؅ཧς ετπʔϧ wՔಇதͷαʔ όʹ͔͚ͯɺ ઃఆΛςετ describe  "#{ENV['TARGET_HOST']}.spec"  do

      !    describe  service('tomcat')  do          it  {  should  be_running      }          it  {  should_not  be_enabled  }      end   !    describe  port(8080)  do          it  {  should  be_listening  }      end   ! ...
  33. 5ZQFUBML w+FOLJOT΍"OTJCMFͷ࣮ߦ݁ՌΛ௨஌ ! ! ! w+FOLJOT1MVHJOɿࡢ೔ϕʔλϦϦʔεʂ w"OTJCMF.PEVMFɿ1VMM3FRVFTUத

  34. IUUQXXXqJDLSDPNQIPUPT!/

  35. ઀ଓઌϗετͷ؅ཧΛ౷Ұ $  tree   .   ├──  ansible   │

         └──  ansible.cfg   ├──  fabfile   │      └──  __init__.py   ├──  serverspec   │      └──  spec   │                └──  spec_helper.rb   └──  ssh.config RSpec.configure  do  |c|    options  =          Net::SSH::Config.for(c.host,  files=[‘../ssh.config'])   ... env.use_ssh_config  =  True   env.ssh_config_path  =  'ssh.config' [ssh_connection]   ssh_args  =  -­‐F  ../ssh.config wTTIDPOpH͸ಉҰͷ΋ͷΛྲྀ༻
  36. ӡ༻࣌ͷ*'ΛҰݩԽ @task   def  hosts_update():          """

             શϗετͷ  /etc/hosts  Λߋ৽͢Δ          """          with  lcd('ansible'):                  local("ansible-­‐playbook  -­‐i  all.yml  -­‐-­‐tags=hosts_setup") -­‐  name:  copy  hosts  file      copy:  src=etc/hosts  dest=/etc/hosts      tags:  hosts_setup wӡ༻खॱ͸ۃྗ'BCSJDʹدͤΔ
  37. wഎܠ wΠϯϑϥߏஙӡ༻࣌ͷํ਑ wΠϯϑϥͷߏ੒ཁૉ w·ͱΊ ΞδΣϯμ

  38. ·ͱΊ wΞϓϦͷਓ΋Πϯϑϥ෼͔ΔΑ͏ ʹͳΔͱɺ෯͕޿͕ΔΑ wΠϯϑϥͷਓ͸ɺΑΓߴ౓ͳ࡞ۀ ʹ஫ྗͰ͖ΔΑ͏ʹͳΔΑ

  39. wࣗಈϢχοτςετ wΦʔτεέʔϧ w*NNVUBCMF*OGSBTUSVDUVSF ࠓޙऔΓ૊Έ͍ͨ͜ͱ

  40. ͝ਗ਼ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ