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

레거시 위에서 재현 가능한 환경 구축하기

레거시 위에서 재현 가능한 환경 구축하기

레거시 위에서 재현 가능한 환경 구축하기

mingrammer

June 09, 2019
Tweet

More Decks by mingrammer

Other Decks in Programming

Transcript

  1. ۨѢद ਤীࢲ ੤അ оמೠ ജ҃ ҳ୷ೞӝ
    MinJae Kwon (@mingrammer)
    2018.07.28
    HashiCorp Korea User Group
    (Build reproducible infrastructures on legacy)

    View Slide

  2. Name
    ӂ޹੤ (MinJae Kwon)
    Nickname
    @mingrammer
    Email
    [email protected]
    Who
    Game Server Engineer @ SundayToz
    Blog
    https://mingrammer.com
    Facebook
    https://facebook.com/mingrammer
    Github
    https://github.com/mingrammer
    Eng Blog
    https://medium.com/@mingrammer

    View Slide

  3. Table of Contents
    2. 찾아온 문제들 :(
    3. HashiCorp와의 만남 - Vagrant
    1. 기존의 개발환경
    5. 마무리
    4. HashiCorp와의 만남 - Terraform

    View Slide

  4. 기존의 개발환경
    Dev
    Server
    Stable
    Server
    Stage
    Server
    Local Code
    Live
    Live
    Live
    Server

    View Slide

  5. 기존의 개발환경
    Live
    Live
    rsync
    rsync rsync
    Local Code
    Dev
    Server
    Stable
    Server
    Stage
    Server
    Live
    Server

    View Slide

  6. 기존의 개발환경
    Live
    Live
    Deploy
    Server
    rsync
    rsync rsync rsync
    ssh
    Local Code
    Dev
    Server
    Stable
    Server
    Stage
    Server
    Live
    Server

    View Slide

  7. 기존의 개발환경
    Live
    Live
    Deploy
    Server
    ssh
    ssh ssh ssh
    ssh
    Local Code
    Dev
    Server
    Stable
    Server
    Stage
    Server
    Live
    Server
    rsync
    rsync rsync rsync

    View Slide

  8. 기존의 개발환경
    Live
    Live
    Deploy
    Server
    ssh ssh ssh
    ssh
    Local Code
    Dev
    Server
    Stable
    Server
    Stage
    Server
    Live
    Server
    file,script,…
    file,script,… file,script,… file,script,…

    View Slide

  9. 기존의 개발환경
    Live
    Live
    Deploy
    Server
    Local Code
    Dev
    Server
    Stable
    Server
    Stage
    Server
    Live
    Server
    Becoming black boxes..

    View Slide

  10. 찾아온 문제들 :(
    ۽ஸ ٣ߡӦ੄ য۰਑
    ׮઺ పझ౟ ࢲߡ੄ ೙ਃࢿ
    AWS۽੄ ੋ೐ۄ ੉੹
    ߡӒ ߊࢤद ജ҃ ੤അ੄ য۰਑

    View Slide

  11. 찾아온 문제들 :(
    ۽ஸ ٣ߡӦ੄ য۰਑
    Local Code
    Dev
    Server
    Stable
    Server
    Stage
    Server
    Local
    Server?
    remote dev
    port forwarding?

    View Slide

  12. 찾아온 문제들 :(
    ۽ஸ ٣ߡӦ੄ য۰਑
    Local Code
    Dev
    Server
    Stable
    Server
    Stage
    Server
    Local
    Server?
    only deploy
    dev, test ..
    ۽ஸ ࢲߡ ೙ਃ

    View Slide

  13. 찾아온 문제들 :(
    ۽ஸ ٣ߡӦ੄ য۰਑
    Local Code
    Dev
    Server
    Stable
    Server
    Stage
    Server
    Local
    Server?
    ৈక?
    Vagrant
    Box
    ޛۿ ੓঻਺

    View Slide

  14. 찾아온 문제들 :(
    ۽ஸ ٣ߡӦ੄ য۰਑
    Local Code
    Dev
    Server
    Stable
    Server
    Stage
    Server
    Local
    Server?
    উجইх
    Vagrant
    Box
    ੄ޙ੄ ߅झ

    View Slide

  15. 찾아온 문제들 :(
    ۽ஸ ٣ߡӦ੄ য۰਑
    Local Code
    Dev
    Server
    Stable
    Server
    Stage
    Server
    Local
    Server?
    Vagrant
    Box
    زੌೠ ജ҃਷ ݏա?

    View Slide

  16. 찾아온 문제들 :(
    ۽ஸ ٣ߡӦ੄ য۰਑
    Local Code
    Dev
    Server
    Stable
    Server
    Stage
    Server
    remote dev
    log driven …
    ৈక ٣ߡӦਸ ۽Ӓ ӝ߈ਵ۽ ..

    View Slide

  17. 찾아온 문제들 :(
    ۽ஸ ٣ߡӦ੄ য۰਑
    Local Code
    Dev
    Server
    Stable
    Server
    Stage
    Server
    Local
    Server?
    ࢲߡ ജ҃ ੿੄ܳ ௏٘۽ թѹঠೡ ೙ਃࢿਸ ו՝

    View Slide

  18. 찾아온 문제들 :(
    ׮઺ పझ౟ ࢲߡ੄ ೙ਃࢿ
    Dev
    Server
    Stable
    Server
    Stage
    Server
    QA
    పझ౟઺

    View Slide

  19. 찾아온 문제들 :(
    ׮઺ పझ౟ ࢲߡ੄ ೙ਃࢿ
    Dev
    Server
    Stable
    Server
    Stage
    Server
    QA
    పझ౟઺
    Stage
    Server
    ژ ׮ܲ పझ౟ ೙ਃ

    View Slide

  20. 찾아온 문제들 :(
    ׮઺ పझ౟ ࢲߡ੄ ೙ਃࢿ
    Dev
    Server
    Stable
    Server
    Stage
    Server
    QA
    झਤட ೞݶࢲ زद పझ౟ पࣻ ਬߊ ↑

    View Slide

  21. 찾아온 문제들 :(
    ׮઺ పझ౟ ࢲߡ੄ ೙ਃࢿ
    Dev
    Server
    Stable
    Server
    Stage
    Server
    QA
    ೙ਃী ٮۄ ନযյ ࣻ ੓ח ജ҃ ೙ਃ
    Stage
    Server

    View Slide

  22. 찾아온 문제들 :(
    ߡӒ ߊࢤद ജ҃ ੤അ੄ য۰਑
    Live
    Live
    Live
    Server
    Liveীࢲ ҟ৉ਵ۽ ߊࢤೞח ߡӒ ߊࢤ

    View Slide

  23. 찾아온 문제들 :(
    ߡӒ ߊࢤद ജ҃ ੤അ੄ য۰਑
    Live
    Live
    Live
    Server
    әೞѱ ٣ߡӦਊ Live ࢲߡ ೞա ࠢৈঠೞח ࢚ട
    (۽Ӓ۽ ঌ ࣻ হח ߡӒ)
    Live
    Server

    View Slide

  24. 찾아온 문제들 :(
    ߡӒ ߊࢤद ജ҃ ੤അ੄ য۰਑
    Live
    Live
    Live
    Server
    Live ࢲߡ ജ҃ਸ ੤അೡ ߑߨ੉ হয դх
    Live
    Server
    ??

    View Slide

  25. 찾아온 문제들 :(
    ߡӒ ߊࢤद ജ҃ ੤അ੄ য۰਑
    Live
    Live
    Live
    Server
    әೠ؀۽ Live ࢲߡ੄ ܖ౟ ౵ੌ दझమ ؒ೐ (ଫଫ)
    Live
    Server
    ??
    dump
    (tar pack/unpack ..)

    View Slide

  26. 찾아온 문제들 :(
    ߡӒ ߊࢤद ജ҃ ੤അ੄ য۰਑
    Live
    Live
    Live
    Server
    Live
    Server
    Live
    Server
    Image
    ੉޷૑۽ ࢲߡ ೐۽࠺੷׬੉ оמೠ ജ҃ ೙ਃ

    View Slide

  27. 찾아온 문제들 :(
    AWS۽੄ ੋ೐ۄ ੉੹
    Dev
    Server
    Live
    Live
    Live
    Server
    Dev
    Server
    Live
    Live
    Live
    Server

    View Slide

  28. 찾아온 문제들 :(
    AWS۽੄ ੋ೐ۄ ੉੹
    Dev
    Server
    Live
    Live
    Live
    Server
    Dev
    Server
    Live
    Live
    Live
    Server
    Identical
    Identical

    View Slide

  29. 찾아온 문제들 :(
    AWS۽੄ ੋ೐ۄ ੉੹
    Dev
    Server
    Stable
    Server Live
    Live
    Live
    Server
    Image Config
    Infra
    Def
    Image Config
    Infra
    Def
    Image Config
    Infra
    Def
    Image Config
    Infra
    Def
    Live
    Live
    Stage
    Server
    Need to build Reproducible & Automatic env
    Create / Update / Delete Create / Update / Delete

    View Slide

  30. HashiCorp와의 만남 :)
    ࣛܖ࣌ਸ ࢤпೞ؍઺ য٣ࢲ ݆੉ ٜযࠄ Ѫٜ੉ ࢤпթ
    Vagrant, Ansible, Packer, Terraform …

    View Slide

  31. HashiCorp와의 만남 :)
    ਃҳࢎ೦
    1. ݽٚ ݠनীࢲ زੌೠ ۽ஸ ࢲߡ ೐۽࠺੷׬
    2. ݺࣁ ߂ ߡ੹ ҙܻ оמೠ ੋ೐ۄ ೐۽࠺੷׬

    View Slide

  32. HashiCorp와의 만남 :)
    ਃҳࢎ೦
    1. ݽٚ ݠनীࢲ زੌೠ ۽ஸ ࢲߡ ೐۽࠺੷׬
    2. ݺࣁ ߂ ߡ੹ ҙܻ оמೠ ੋ೐ۄ ೐۽࠺੷׬

    View Slide

  33. HashiCorp와의 만남 :)
    ਃҳࢎ೦
    1. ݽٚ ݠनীࢲ زੌೠ ۽ஸ ࢲߡ ೐۽࠺੷׬
    2. ݺࣁ ߂ ߡ੹ ҙܻ оמೠ ੋ೐ۄ ೐۽࠺੷׬

    View Slide

  34. HashiCorp와의 만남 :)
    Vagrant۽ ۽ஸ ࢲߡ ҳࢿ
    Development Environments Made Easy

    View Slide

  35. HashiCorp와의 만남 :)
    Vagrant۽ ۽ஸ ࢲߡ ҳࢿ
    1. ೐۽࠺੷׬ ݺࣁ ౵ੌੋ Vagrantfile ੘ࢿ
    2. Run vagrant up (or vagrant up --provision)
    3. Run vagrant provision
    4. Access via vagrant ssh

    View Slide

  36. HashiCorp와의 만남 :)
    Vagrant۽ ۽ஸ ࢲߡ ҳࢿ
    Game 1
    Php7
    Game 2
    Php5 Php7
    Github Github

    View Slide

  37. HashiCorp와의 만남 :)
    Vagrant۽ ۽ஸ ࢲߡ ҳࢿ
    Base image
    Port forwarding
    Provider
    Upload file
    Run script
    (ױੌ ݠन Vagrantfile)

    View Slide

  38. HashiCorp와의 만남 :)
    Vagrant۽ ۽ஸ ࢲߡ ҳࢿ
    Game 1
    Php7
    Github
    SSH forwarding
    Set env vars
    Using host ssh key

    View Slide

  39. HashiCorp와의 만남 :)
    Vagrant۽ ۽ஸ ࢲߡ ҳࢿ
    Define box
    (׮઺ ݠन Vagrantfile)
    Define box

    View Slide

  40. HashiCorp와의 만남 :)
    Vagrant۽ ۽ஸ ࢲߡ ҳࢿ
    Define box
    (׮઺ ݠन Vagrantfile)
    Define box
    Provision:1
    Provision:2
    Provision:3
    Provision:3

    View Slide

  41. HashiCorp와의 만남 :)
    Vagrant۽ ۽ஸ ࢲߡ ҳࢿ
    Game 2
    Php5 Php7
    Github
    Using host ssh key

    View Slide

  42. HashiCorp와의 만남 :)
    Vagrant۽ ۽ஸ ࢲߡ ҳࢿ
    Game 2
    Php5 Php7
    Github
    vagrant up php7
    vagrant up php5
    vagrant ssh php7
    vagrant ssh php5


    View Slide

  43. HashiCorp와의 만남 :)
    Vagrant۽ ۽ஸ ࢲߡ ҳࢿ

    View Slide

  44. HashiCorp와의 만남 :)
    Vagrant۽ ۽ஸ ࢲߡ ҳࢿ
    Game 1
    Php5
    Game 2
    Php5 Php7 New?
    IDE
    Easy remote debugging

    View Slide

  45. HashiCorp와의 만남 :)
    Vagrant۽ ۽ஸ ࢲߡ ҳࢿ
    Game 1
    Php5
    Game 2
    Php5 Php7 New?
    Github I know

    View Slide

  46. HashiCorp와의 만남 :)
    য۰ਛ؍੼
    1. ۨѢद ௏٘о ࢎਊೞח ಁః૑ ୶੸੉ য۰ਛ਺
    2. ӝઓ పझ౟ ࢲߡ৬ OS ജ҃੉ ׳ۄ 100% ੤അ੄ ࠛഛपࢿ (ޙઁ ߊࢤ)
    3. ࠛ೙ਃೠ ؘ੉ఠ ߂ ௏٘ Ѣܰӝ
    4. ۽ஸ ࢲߡ DB ੗୓ ҳࢿ

    View Slide

  47. HashiCorp와의 만남 :)
    աই૓੼
    2. ۽ஸ ٣ߡӦ੉ ࣻਘ೧૗
    3. ࢲߡ ҳࢿ੉ ݽف ௏٘۽ թই ୶੸੉ ਊ੉
    4. ׮ܲ ੉ग ѐߊद ࢜۽਍ ജ҃ ҳࢿೞӝо ࣻਘ೧૗
    1. ࢲߡо ௿ܽ೧૗

    View Slide

  48. HashiCorp와의 만남 :)
    ਃҳࢎ೦
    1. ݽٚ ݠनীࢲ زੌೠ ۽ஸ ࢲߡ ೐۽࠺੷׬
    2. ݺࣁ ߂ ߡ੹ ҙܻ оמೠ ੋ೐ۄ ೐۽࠺੷׬

    View Slide

  49. HashiCorp와의 만남 :)
    Terraformਵ۽ ੋ೐ۄ ੗زച (పझ౟ ࢲߡ ജ҃)
    పझ౟ ࢲߡ ജ҃਷ যڌѱ ҙܻ?

    View Slide

  50. HashiCorp와의 만남 :)
    Terraformਵ۽ ੋ೐ۄ ੗زച (పझ౟ ࢲߡ ജ҃)
    AWS ੋ೐ۄ ੉੹ ҅ദਵ۽ AWS ӝ߈ਵ۽ పझ౟ ࢲߡ ੋ೐ۄ ੤ҳ୷

    View Slide

  51. HashiCorp와의 만남 :)
    Terraformਵ۽ ੋ೐ۄ ੗زച
    Write, Plan, and Create Infrastructure as Code

    View Slide

  52. HashiCorp와의 만남 :)
    Terraformਵ۽ ੋ೐ۄ ੗زച
    1. .tf, .tfvars١ ੋ೐ۄ ੿੄ ౵ੌ ੘ࢿ
    2. ੸ਊद ߸ೡ ੋ೐ۄ ࢚క ഛੋਸ ਤೠ terraform plan प೯
    3. पઁ ੸ਊਸ ਤೠ terraform apply प೯
    4. ੋ೐ۄ ୹۱ч ഛੋ

    View Slide

  53. HashiCorp와의 만남 :)
    Terraformਵ۽ ੋ೐ۄ ੗زച
    Resource Name
    Definition/Config
    dev.tf

    View Slide

  54. HashiCorp와의 만남 :)
    Terraformਵ۽ ੋ೐ۄ ੗زച ܻࣗझр ؘ੉ఠ ଵઑ оמ
    Subnet਷ VPC ID ଵઑ
    Instanceח Subnet ID ଵઑ

    View Slide

  55. HashiCorp와의 만남 :)
    Terraformਵ۽ ੋ೐ۄ ੗زച
    ֎౟ਕ௼, ੋझఢझ١੄ ੋ೐ۄ ੿੄ܳ ׸਷ ੿੄ ౵ੌٜਸ ജ҃߹۽ ੘ࢿ

    View Slide

  56. HashiCorp와의 만남 :)
    Terraformਵ۽ ੋ೐ۄ ੗زച

    + Security Groups, Elastic IP, Key Pair …

    View Slide

  57. HashiCorp와의 만남 :)
    Terraformਵ۽ ੋ೐ۄ ੗زച
    Terraform moduleਸ ഝਊೠ ݽٕച

    View Slide

  58. HashiCorp와의 만남 :)
    Terraformਵ۽ ੋ೐ۄ ੗زച
    dev.tf
    network.tf (module)

    View Slide

  59. HashiCorp와의 만남 :)
    Terraformਵ۽ ੋ೐ۄ ੗زച
    dev.tf
    network.tf (module)
    Terraform module਷ ੌઙ੄ ೣࣻ

    View Slide

  60. HashiCorp와의 만남 :)
    Terraformਵ۽ ੋ೐ۄ ੗زച
    ݽٕച ױਤ
    Network Compute

    View Slide

  61. HashiCorp와의 만남 :)
    Terraformਵ۽ ੋ೐ۄ ੗زച
    Dev
    Stable
    Stage
    Network
    Compute
    vars/config
    vars/config
    vars/config
    Dev
    Stable
    Stage

    View Slide

  62. HashiCorp와의 만남 :)
    Terraformਵ۽ ੋ೐ۄ ੗زച

    View Slide

  63. HashiCorp와의 만남 :)
    Terraformਵ۽ ੋ೐ۄ ੗زച
    Ӓؘ۠ AMIח য٣ࢲ?
    ੋ೐ۄ ੿੄۽ࠗఠ ੋझఢझܳ ࢤࢿೞӝ ਤ೧ࢶ AMIо ೙ਃ

    View Slide

  64. HashiCorp와의 만남 :)
    ݠन ੉޷૑ ࢤࢿ ੗زച
    Build Automated Machine Images

    View Slide

  65. HashiCorp와의 만남 :)
    packer build
    web.yml
    ੋझఢझ ࢤࢿ ೐۽࠺੷׬
    झշࢫ
    AMI ࢤࢿ
    AMI ID ୹۱
    ݠन ੉޷૑ ࢤࢿ ੗زച

    View Slide

  66. HashiCorp와의 만남 :)
    1. Amazon EBS ఋੑਵ۽
    2. Ubuntu 16.04ܳ ߬੉झ۽
    3. base.shܳ ೐۽࠺੷׬ ೠ ٍ
    4. manifest.jsonী ୹۱ ੷੢
    ݠन ੉޷૑ ࢤࢿ ੗زച

    View Slide

  67. HashiCorp와의 만남 :)
    ݠन ੉޷૑ ࢤࢿ ੗زച
    ৈӝࢲ base.shח ۽ஸ ࢲߡ ҳ୷द ࢎਊೠ झ௼݀౟৬ زੌ

    View Slide

  68. HashiCorp와의 만남 :)
    ݠन ੉޷૑ ࢤࢿ ੗زച
    manifest.json

    View Slide

  69. HashiCorp와의 만남 :)
    ݠन ੉޷૑ ࢤࢿ ੗زച
    manifest.jsonীࢲ ami ই੉٣ܳ оઉ৬ terraformী ߸ࣻ۽ ֈӣ

    View Slide

  70. HashiCorp와의 만남 :)
    Terraformਵ۽ ੋ೐ۄ ੗زച
    terraform apply -vars ../../vars/staging_ami.tfvars
    terraform plan -vars ../../vars/staging_ami.tfvars

    View Slide

  71. HashiCorp와의 만남 :)
    Terraformਵ۽ ੋ೐ۄ ੗زച
    Live
    Live
    Server
    Image
    .tf
    Developer
    Scripts
    Files Scripts

    View Slide

  72. HashiCorp와의 만남 :)
    Terraformਵ۽ ੋ೐ۄ ੗زച
    Live
    Live
    Server
    Image
    .tf
    Developer
    Scripts
    Files Scripts
    ੉޷૑ח Terraform੉ ইפযب ױੌ Live ࢲߡ ೐۽࠺੷׬द ࢎਊ оמ

    View Slide

  73. Dev
    Server
    Stable
    Server
    Image Config
    Infra
    Def
    Image Config
    Infra
    Def
    Image Config
    Infra
    Def
    Live
    Live
    Stage
    Server
    HashiCorp와의 만남 :)
    Terraformਵ۽ ੋ೐ۄ ੗زച

    View Slide

  74. HashiCorp와의 만남 :)
    য۰ਛ؍੼
    1. ೟ण ࠺ਊ
    2. Terraform ߡӒ
    3. ੉ ߑधਸ Ѩૐ೧઴ ࢎۈ੉ হ਺

    View Slide

  75. HashiCorp와의 만남 :)
    աই૓੼
    2. ੋ೐ۄ ೐۽࠺੷׬੉ ই઱ ಞܻ೧૗
    3. ੋ೐ۄ ҳࢿ੉ ݽف ௏٘۽ թই ୶੸੉ ਊ੉
    1. ࢲߡо ௿ܽ೧૗
    4. ੋझఢझ ղܽ ٍীب ੿ഛ൤ زੌೠ ജ҃ ҳࢿ оמ

    View Slide

  76. HashiCorp와의 만남 :)
    թই ੓ח ޙઁ
    1. ই૒ ۽ஸ ࢲߡ੄ ജ҃ ҳࢿ ߸҃ਸ ૊द ޅٮۄх
    2. tfstate, tf ؘ੉ఠ ҙܻ
    3. ೐۽؋࣌ ࢲߡীח ই૒ ੸ਊਸ ޅ೧ࠆ (௏٘ ੉੹ ੉ग)
    4. DevOps, IaC ޙച
    5. ࢲߡ ೐۽࠺੷׬җ ௏٘ ߓನ ೐۽ࣁझ੄ ѐࢶ ৈ૑о ݆਺

    View Slide

  77. 마무리
    ੤അ оמೠ ജ҃਷ ҳࢿ೮ਵա ѐࢶ ৈ૑ח ৈ੹൤ ݆਺
    ୭ઙ੸ਵ۽ ೐۽؋࣌ীࢲ ࢎਊೡ ࣻ ੓ਸ૑ח ޷૑ࣻ૑݅ PoCח ૓೯ ৘੿
    IaCח ై੗ೡ݅ೠ о஖о ੓ח Ѫ э਺. ױ, ೟ण ࠺ਊҗ ҳ୷(?) ࠺ਊ਷ хউ೧ঠ
    بҳب بҳ૑݅ ੿੄ա ݺࣁ ౵ੌٜ੄ ߡ੹ҙܻо ೨बੋ Ѫ э਺

    View Slide

  78. 마무리
    감사합니다

    View Slide