$30 off During Our Annual Pro Sale. View Details »

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

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

株式会社ヌーラボ
PRO

February 05, 2014
Tweet

More Decks by 株式会社ヌーラボ

Other Decks in Technology

Transcript

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

    View Slide

  2. ࣗݾ঺հ
    wதଜ஌੒ !JLJLLP

    w೔ຊ+FOLJOTϢʔβձ
    !
    wҰ൪޷͖ͳυϥΫΤɿυϥΫΤ
    wϑϩʔϥΑΓϏΞϯΧ೿

    View Slide

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

    View Slide

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

    View Slide

  5. ψʔϥϘͷྺ࢙

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  10. ࠓͷΠϯϑϥମ੍

    View Slide

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

    View Slide

  12. υϥΫΤͰྫ͑Δͱ

    View Slide

  13. ύʔςΟʔߏ੒

    View Slide

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

    View Slide

  15. εΩϧస׵

    View Slide

  16. ࠓͷΠϯϑϥମ੍

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  25. Πϯϑϥߏங࣌

    View Slide

  26. Πϯϑϥӡ༻࣌

    View Slide

  27. ֩ͱͳΔπʔϧ
    IUUQXXXqJDLSDPNQIPUPTEFYYVT

    View Slide

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

    View Slide

  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!!!")

    View Slide

  30. ิॿతͳπʔϧ
    IUUQXXXqJDLSDPNQIPUPT!/

    View Slide

  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"  
               ]  
           }  
       ]  
    }

    View Slide

  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  
    !
    ...

    View Slide

  33. 5ZQFUBML
    w+FOLJOT΍"OTJCMFͷ࣮ߦ݁ՌΛ௨஌
    !
    !
    !
    w+FOLJOT1MVHJOɿࡢ೔ϕʔλϦϦʔεʂ
    w"OTJCMF.PEVMFɿ1VMM3FRVFTUத

    View Slide

  34. IUUQXXXqJDLSDPNQIPUPT!/

    View Slide

  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͸ಉҰͷ΋ͷΛྲྀ༻

    View Slide

  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ʹدͤΔ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide