Save 37% off PRO during our Black Friday Sale! »

ServerlessのおさらいとIronFunctionsについて

C9cacb1d0e96ab27dcb045177068820c?s=47 youyo
December 03, 2016

 ServerlessのおさらいとIronFunctionsについて

C9cacb1d0e96ab27dcb045177068820c?s=128

youyo

December 03, 2016
Tweet

Transcript

  1. Serverlessͷ͓͞Β͍ͱ IronFunctionsʹ͍ͭͯ

  2. ໨࣍ • ࣗݾ঺հ • Serverless͓͞Β͍ • IronFunctionsʹ͍ͭͯ

  3. ࣗݾ঺հ • ੴᖒ௚ਓ(youyo_) • ΠϯϑϥΤϯδχΞ • ੨৿ݝग़਎ઋ୆ࡏॅ • JAWS-UG੨৿ίΞϝϯόʔ •

    גࣜձࣾϔϓλΰϯ • http://blog.youyo.info/ • ࠷ۙϋϚ͍ͬͯΔ΋ͷ • golang • GAE • ਏ͍͜ͱ • re:InventͰαʔϏε૿͑͗͢…
  4. ձࣾ঺հ • Πϯϑϥશൠͷӡ༻/؂ࢹ/อकۀ຿ • γεςϜઃܭ΍ίετ࡟ݮ͢Δʹ͸Ͳ͏ͨ͠Β͍͍ ͔తͳ૬ஊ΋ͲΜͱ͍͜ • AWSʹݶΒͣͲΜͳΫϥ΢υͰ΋΍Γ·͢ • AzureҊ݅͸͋Δ͚ͲGCPҊ݅·ͩͳ͍ͷͰ୭͔…

    • ຊࣾ͸੨৿ݝࡾ୔ࢢ • ઋ୆ࢢʹ΋ࣄ຿ॴ͋Γ • ࣾһ3ਓ+Πϯλʔϯ1ਓ
  5. Serverless͓͞Β͍

  6. Serverless͓͞Β͍ • ๻ͷͨͲ͖ͬͯͨಓͷΓΛৼΓฦΓͳ͕ΒɺվΊͯ Serverlessͱ͸ͳΜͩͬͨͷ͔͓͞Β͍͍ͯ͜͠͏ͱࢥ͍ ·͢ɻ

  7. Serverless͓͞Β͍ͷલʹొ৔ਓ෺঺հ • AWS Lambda • ίʔυΛAWS LambdaʹσϓϩΠ͢ΔͱɺԿ͔͠ΒͷΠϕϯτ ΛτϦΨʔʹͯͦ͠ͷίʔυΛ࣮ߦͯ͘͠ΕΔίϯϐϡʔςΟ ϯάαʔϏε •

    ࣮ߦʹ͔͔ͬͨCPU࣌ؒ୯ҐͰͷैྔ՝ۚ • node.js/Java/python/C#Λαϙʔτ • AWSͷFaaS୲౰ • Amazon API-Gatewayͱ૊Έ߹Θͤͯ࢖͏έʔε͕ଟ͍
  8. ServerlessͱݴΘΕͯ࠷ॳʹࢥͬͨ͜ͱ • αʔόʔϨεͬͯ͜ͱ͸αʔόʔͳ͍ͷʁ

  9. ServerlessͱݴΘΕͯ࠷ॳʹࢥͬͨ͜ͱ • αʔόʔϨεͬͯ͜ͱ͸αʔόʔͳ͍ͷʁ • ͍΍ɺLambdaͩͬͯawsͷ؅ཧ͢Δαʔόʔ্Ͱಈ͍ͯΔΑͶʁ • AWS Lambda࢖͑͹αʔόʔϨεͳ࢓૊Έ࡞ΕΔΑͬͯݴΘΕͯ ΋αʔόʔ͋ΔΑͶʁ •

    ͦΕαʔόʔϨεͬͯݴ͍͍ͬͯͷʁ
 ·͊ͬͪ͜Ͱӡ༻؅ཧ͢Δαʔό͸͔֬ʹͳ͍͚Ͳɻ • (ΠϯϑϥΤϯδχΞ໨ઢ)
  10. Ͳ͏΍ΒੈؒͷαʔόʔϨε͸ҧ͏Β͍͠

  11. ServerlessͳΜ͔ͩΒαʔόʔͳ͍Αʁ • AWS Lambda࢖ͬͯFunction୯ҐͰ࣮ߦͰ͖ΔΑ͏ʹͳΔΜͩΑʁ • ࣗ෼ͰΞϓϦέʔγϣϯαʔόʔͷ؅ཧ͠ͳͯ͘Α͘ͳΔ͡ΌΜʁ • αʔόʔϨε͡ΌΜʁ

  12. ΞϓϦέʔγϣϯΤϯδχΞͷ
 ໨ઢ͸͜͏ͩͬͨͷ͔ʂ

  13. ΞϓϦέʔγϣϯαʔό͸͔֬ʹͳ͍ • αʔόʔϨεͷαʔόʔ͕ࢦ͢΋ͷ͸ΞϓϦέʔγϣϯαʔόʔ ͩͬͨ • ͔֬ʹͦͷํ͕ࣗવͩ͠ೲಘ͍ͬͨ • αʔόʔϨεͱ͸ΞϓϦέʔγϣϯ࣮ߦ؀ڥͷ͜ͱͩͬͨͷ͔ • ී௨ͦ͏Ͱ͠ΐʁͱࢥ͔ͬͨ΋͠Εͳ͍͚Ͳɺ͖ͬͱ๻ͱಉ͡Α

    ͏ʹײͨ͡ΠϯϑϥΤϯδχΞͷਓ΋গͳ͔Β͍ͣΔ͸ͣ
  14. αʔόʔϨεΞʔΩςΫνϟͱ͸ • Function୯ҐͰίʔυΛ࣮ߦͰ͖ΔϑϧϚωʔδυαʔϏε ʹ৐͔ͬΔ͜ͱͰɺΞϓϦέʔγϣϯαʔόͷ؅ཧΛෆཁʹ ͨ͠ΞϓϦέʔγϣϯ࣮ߦ؀ڥ

  15. Ͱ΋αʔόʔϨεʹ͸ผͷଆ໘΋͋ΔΑͶʁ • ΞϓϦέʔγϣϯ࣮ߦ؀ڥͱͯ͠ͷଆ໘͸
 Amazon API Gateway + AWS Lambda ͷ૊Έ߹ΘͤͰ࣮ݱ͞

    ΕΔεςʔτϨεͳΞϓϦέʔγϣϯαʔόͱͯ͠ɻ • Ͱ΋AWS Lambda࣮ߦͷτϦΨʔͱͳΔͷ͸HTTPϦΫΤε τ͚ͩ͡Όͳ͍ • S3΁ͷΦϒδΣΫτ഑ஔɺDynamodb΁ͷΠϯαʔτͳͲ ͷΠϕϯτΛτϦΨʔͱ࣮ͯ͠ߦ͢Δ͜ͱ͕Ͱ͖Δ • API-Gatewayܦ༝ͷHTTPϦΫΤετ΋ҰͭͷΠϕϯτͱߟ ͑ΒΕΔ
  16. ΠϕϯτυϦϒϯΞʔΩςΫνϟ

  17. ΠϕϯτυϦϒϯΞʔΩςΫνϟ • Ϋϥ΢υαʔϏε͔Βൃߦ͞ΕͨΠϕϯτΛτϦΨʔͱͯ͠ ࣍ͷॲཧΛ࣮ߦ͢Δ • ϐλΰϥεΠονతͳ • Πϕϯτ͕ൃੜ͢Δ·Ͱ࣍ͷॲཧ͸࣮ߦ͞Εͳ͍ • ࣮ߦॲཧ࣌ؒ୯ҐͰ՝ۚ͞ΕΔAWS

    Lambdaͱ૬ੑ͍͍ • ͍ͭى͜Δ͔Θ͔Βͳ͍Πϕϯτʹରͯ͠ΠϯελϯεΛ ىಈ͠ଓ͚͍ͯͨ৔߹ʹൺ΂ͨΒɺѹ౗తʹίετ࡟ݮͰ ͖Δέʔε΋Πϕϯτ͕ൃੜ͢Δ·Ͱ࣍ͷॲཧ͸࣮ߦ͞Ε ͳ͍ • AWS LambdaͷΑ͏ͳFaaSΛɺαʔϏεಉ࢜Λͭͳ͙΋ͷͱ ͯ͠࢖͏
  18. αʔόʔϨεΞʔΩςΫνϟͱ͸ • Function୯ҐͰίʔυΛ࣮ߦͰ͖ΔϑϧϚωʔδυαʔϏε ʹ৐͔ͬΔ͜ͱͰɺΞϓϦέʔγϣϯαʔόͷ؅ཧΛෆཁʹ ͨ͠ΞϓϦέʔγϣϯ࣮ߦ؀ڥ • ΠϕϯτυϦϒϯʹϑϧϚωʔδυαʔϏεΛͭͳ͙͜ͱ ͰɺͦΕΒΛͭͳ͙໾ׂΛ͍ͯͨ͠؅ཧαʔόΛͳͨ͘͠ (FaaSʹஔ͖׵͑ͨ)γεςϜΞʔΩςΫνϟ

  19. ͳΜͱͳ͘Θ͔͖ͬͯͨ

  20. ΍ͬͯΈͨࣄྫ όονॲཧΛεέʔϥϒϧ/ΠϕϯτυϦϒϯͳײ͡Ͱॲཧ

  21. ΍ͬͯΈͨࣄྫ2 EC2ͱ͔RDSͷϝϯςφϯεΠϕϯτΛαʔόʔϨεͳײ͡Ͱ௨஌͍ͨ͠

  22. ΍ͬͯΈͨࣄྫ3 ϋοΧιϯͰΰϦΰϦͳΠϕϯτυϦϒϯΞʔΩςΫνϟ࠾༻ͯ͠࡞ͬͯΈͨ

  23. αʔόʔϨεΞʔΩςΫνϟ΍ͬͯΈͯࢥͬͨ • ָ͍͠ʂ • ϐλΰϥεΠον͕޷͖ͳ͚͔ͩ΋ • αʔόͷ؅ཧ͔Βղ͖์ͨΕͨײɺ࠷ߴ • ͳΜͨͬͯ͋ͷAmazon͞Μ͕؅ཧͯ͘͠ΕͯΔ҆৺ײ •

    ͓ۚ΋͔͔Βͳ͍͠ • ແྉ࿮ʹ༨༟Ͱऩ·Δ
  24. Ͱ΋ͦΕ͚ͩ͡Όͳ͘͜͏΋ײͨ͡ • AWS LambdaͷσϓϩΠͳΜ͔ΊΜͲ͍͘͞ • εςʔτϨεͳ΋ͷ͸͍͍͚Ͳεςʔτϑϧͳ΋ͷΛѻ͏ͷ ͸େมͦ͏ͩͳ͊ɻ͍ͯ͏͔ී௨ʹΞϓϦέʔγϣϯ࡞ͬͨ ΄͏ָ͕ͳ৔໘΋ଟ͍Μ͡Όͳ͍ʁ • ͜Εςετͱ͔Ͳ͏͢Μͷʁ

    ίʔυॻ͍ͯ΋ϩʔΧϧͰ࣮ߦ Ͱ͖ͳ͘ͳ͍ʁ • AWS Lambdaʹো֐͋ͬͨΒ…
  25. σϓϩΠΊΜͲ͍͘͞໰୊ • πʔϧ͕ॆ࣮͖ͯͨ͠ • Serverless framework • Apex • Lamvery

    • ͢ͰʹΊΜͲ͘͘͞ͳ͘ͳ͍ͬͯͨɻٕज़ͷਐา͸ૣ͍ɻ • ݸਓతʹ͸API-Gatewayͱͷ࿈ܞ·Ͱ͸ͦΕ΄Ͳඞཁͱͯ͠ ͳ͍ͷͰLamvery࢖ͬͯΔɻศརʂ
  26. εςʔτϑϧͳΞϓϦ͸େม͡Όͳ͍ʁ ޲͍ͯͳ͍Μ͡Όͳ͍ʁ໰୊ • ѻ͑ͳ͍͜ͱ͸ͳ͍͚Ͳ޲͍ͯͳ͍ͱࢥͬͯΔ • ϑϧϚωʔδυͳσʔλϕʔεʹͰ΋σʔλೖΕΕ͹Ͳ͏ʹ Ͱ΋ͳΔ͠ • Ͱ΋railsͱ͔࢖ͬͯͨ΄͏ָ͕ͳ͜ͱ΋͋ΔΜ͡Όͳ͍ʁ •

    αʔόʔϨεʹͩ͜Θͬͯແཧͯ͠࢖͏ඞཁ͸ͳ͍Μ͡Όͳ͍ʁ
  27. ͦ΋ͦ΋Function୯ҐͰࡉ੾Εʹ͞Ε ͨΞϓϦέʔγϣϯΛ࡞Ε·͔͢ʁ

  28. ͦ΋ͦ΋Function୯ҐͰࡉ੾Εʹ͞Ε ͨΞϓϦέʔγϣϯΛ࡞Ε·͔͢ʁ • αʔόʔϨεͷগ͠લʹMicro Services͕ྲྀߦΓ·ͨ͠ΑͶʁ • ϞϊγϦοΫͳαʔϏε͡Όͳͯ͘ɺ΋ͬͱࡉ͔͍ػೳ୯ ҐͰαʔϏεΛ෼͚ͯɺαʔϏεؒ͸REST APIͰૄ݁߹ʹ ͯ͠ʙ

    • ͦͷྲྀΕʹ৐࣮ͬͯફͨ͠ਓ͕ͲΕ΄Ͳ͍Δͷ͔ • ΋ͪΖΜͦͷޙͷγεςϜઃܭࢥ૝ʹ͸େ͍ʹӨڹΛ༩͑ ͨͩΖ͏ • ͕ͩ෼ׂ͢Δ΄Ͳେ͖ͳγεςϜ͡Όͳ͔ͬͨΓɺ؅ཧ͢ ΂͖γεςϜ͕૿͑Δ͜ͱʹΑΔίετ૿Λݒ೦ͯ͠΍Β ͳ͍ͱ͍͏൑அ΋͋ͬͨ͸ͣ
  29. ͦ΋ͦ΋Function୯ҐͰࡉ੾Εʹ͞Ε ͨΞϓϦέʔγϣϯΛ࡞Ε·͔͢ʁ • ҰͭͷαʔϏεΛෳ਺ͷαʔϏεʹ෼͚Δ͜ͱ͢Β೉͍͜͠ͱ΋ ͋Δ • ·ͯ͠΍ͦͷαʔϏεΛϑΝϯΫγϣϯ୯ҐͰ෼͚ͯγεςϜ࡞ ΕΔͷ͔ʁ • MicroServicesͷͱ͖͸؅ཧ͢΂͖γεςϜ͕૿͑ͯਏ͘ͳͬͨ

    έʔε΋͋ΔͷͰ͸ʁ • ࠓ౓͸ϑΝϯΫγϣϯ୯ҐͰͷ؅ཧ͕ٻΊΒΕΔΑ͏ʹͳΓɺ ΑΓਏ͘ͳΔέʔε΋͋ΔͷͰ͸ʁ • ϑϨʔϜϫʔΫʹ৐͔͓͍ͬͬͯͨํ͕͍͍͜ͱ΋͋ΔͩΖ͏
  30. αʔόʔϨεΞʔΩςΫνϟ͸ MicroServicesΛ࣮ݱ͢ΔͨΊͷ Ұͭͷखஈʹ͗͢ͳ͍

  31. αʔόʔϨεΞʔΩςΫνϟ͸MicroServices Λ࣮ݱ͢ΔͨΊͷҰͭͷखஈʹ͗͢ͳ͍ • ཻ౓͕ҧ͏͚ͩ • MicroServices͸ΑΓখ͞ͳαʔϏεΛ૊Έ߹ΘͤͯҰͭͷ αʔϏεΛߏ੒ • αʔόʔϨεΞʔΩςΫνϟ͸ϑΝϯΫγϣϯ୯Ґͷίϯϙʔ ωϯτΛ૊Έ߹ΘͤͯαʔϏεΛߏ੒

    • αʔόʔϨεΞʔΩςΫνϟͰߏ੒͞ΕͨαʔϏεಉ࢜ΛREST APIͰૄ݁߹ʹͭͳ͍ͩMicroServicesͳαʔϏεɺΈ͍ͨͳ΋ͷ Λߟ͑Δͱ෼͔Γ΍͍͔͢΋
  32. αʔόʔϨεΞʔΩςΫνϟ͸MicroServices Λ࣮ݱ͢ΔͨΊͷҰͭͷखஈʹ͗͢ͳ͍ • ΋͠ҎલʹαʔϏεͷMicroServicesԽΛݕ౼ͯ͠அ೦͍ͯ͠Δͱ ͨ͠ΒɺαʔόʔϨεΞʔΩςΫνϟ΋ϋϚΒͳ͍Մೳੑ͕͋Δ • ٕज़Ϩϕϧͷ໰୊Ͱ͸ͳ͘Ϛον͢ΔγεςϜ͔Ͳ͏͔ • εέʔϥϏϦςΟ͕ཉ͍͚ͩ͠Ͱ͋Ε͹ɺطଘͷΞϓϦέʔγϣ ϯΛίϯςφԽͯ͠ίϯςφΫϥελϦϯάܥͷαʔϏεʹ৐

    ͤΔ͚ͩͰे෼ͳԸܙΛड͚ΕΔ৔߹΋͋ΔͩΖ͏ͦ͠Ε͕ϕ ετͩͬͯ͜ͱ΋ߟ͑ΒΕΔ
  33. αʔόʔϨε·ͱΊ

  34. αʔόʔϨεΞʔΩςΫνϟ·ͱΊ • αʔόʔϨεʹ͸2ͭͷଆ໘͕͋Δ • Function୯ҐͰίʔυΛ࣮ߦʹ͢Δ͜ͱͰɺΞϓϦέʔγϣϯ αʔόͷ؅ཧΛෆཁʹͨ͠ϑϧϚωʔδυͷΞϓϦέʔγϣϯ ࣮ߦ؀ڥ • ΠϕϯτυϦϒϯʹϑϧϚωʔδυαʔϏεΛͭͳ͙͜ͱͰɺ ͦΕΒΛͭͳ͙໾ׂΛ͍ͯͨ͠؅ཧαʔόΛͳͨ͘͠(FaaSʹ

    ஔ͖׵͑ͨ)γεςϜΞʔΩςΫνϟ • αʔόʔϨεΞʔΩςΫνϟʹͩ͜ΘΓ͗͢ͳ͍ • ޲͖ෆ޲͖͸Ͳ͏ͯ͠΋͋Δ • େ੾ͳͷ͸҆ఆͨ͠αʔϏεΛఏڙ͠ଓ͚Δ͜ͱ • ͦͷͨΊʹϕετͳγεςϜΞʔΩςΫνϟબ୒Λ
  35. ࢒ͬͯͨ໰୊΋ͪΌΜͱݟ͍ͯ͘ • AWS LambdaͷσϓϩΠͳΜ͔ΊΜͲ͍͘͞ • εςʔτϨεͳ΋ͷ͸͍͍͚Ͳεςʔτϑϧͳ΋ͷΛѻ͏ͷ ͸େมͦ͏ͩͳ͊ɻ͍ͯ͏͔ී௨ʹΞϓϦέʔγϣϯ࡞ͬͨ ΄͏ָ͕ͳ৔໘΋ଟ͍Μ͡Όͳ͍ʁ • ͜Εςετͱ͔Ͳ͏͢Μͷʁ

    ίʔυॻ͍ͯ΋ϩʔΧϧͰ࣮ߦ Ͱ͖ͳ͘ͳ͍ʁ • AWS Lambdaʹো֐͋ͬͨΒ…
  36. ࢒ͬͯͨ໰୊΋ͪΌΜͱݟ͍ͯ͘ • ͜Εςετͱ͔Ͳ͏͢Μͷʁ ίʔυॻ͍ͯ΋ϩʔΧϧͰ࣮ߦͰ͖ ͳ͘ͳ͍ʁ • ςετ؀ڥʹσϓϩΠ࣮ͯ͠ߦͯ͠ΈΕ͹͍͍͚ͩͰ͸͋ΔΜ ͚ͩͲɺखݩͰνϟνϟͬͱग़དྷͨํ͕خ͍͠ • AWS

    Lambdaʹো֐͋ͬͨΒ… • ผͷΫϥ΢υαʔϏε(CloudFunctions/AzureFunctions)࢖͏ʁ • ࠓͷίʔυޓ׵ੑ͋Δʁ େৎ෉ʁ
  37. None
  38. IronFunctionsͱ͸ʁ • http://open.iron.io/ • αʔόʔϨεΞʔΩςΫνϟΛಛఆͷΫϥ΢υϕϯμʔʹͱΒ ΘΕͣʹ࣮ߦ͢ΔͨΊͷɺΦʔϓϯιʔεͷϓϥοτϑΥʔϜ • Ͳ͜Ͱ΋ಈ͔ͤΔ • ͲΜͳݴޠͰ΋࣮૷Ͱ͖Δ

    • AWS LambdaͷϑΥʔϚοτ΋αϙʔτͯ͠Δ(!)
  39. IronFunctions͕՝୊ղܾͯ͘͠Εͦ͏

  40. IronFunctions͕΋ͨΒ͢΋ͷ • ͜Εςετͱ͔Ͳ͏͢Μͷʁ ίʔυॻ͍ͯ΋ϩʔΧϧͰ࣮ߦͰ͖ ͳ͘ͳ͍ʁ • खݩʹIronFunctionsͷ؀ڥΛDockerͰ্ཱ࣮ͪ͛ͯߦ͢Ε͹ ͍͍ • AWS

    Lambdaʹো֐͋ͬͨΒ… • AWS Lambdaͷίʔυ͕ͦͷ··ಈ͘Μ͔ͩΒผͷΫϥ΢υ؀ ڥʹͰ΋IronFunctions؀ڥ্ཱͪ͛ͯσϓϩΠ͢Ε͹͍͍
 ˞ ͨͩ͠ΠϕϯτυϦϒϯͳγεςϜ͸Ͳ͏͠Α͏΋ͳ͍ͷͰ Ұ୴๨ΕΔ
  41. IronFunctions͕՝୊ղܾͯ͘͠Εͦ͏

  42. IronFunctions͸ຊ౰ʹಈ͘ͷ͔ʁ • ΍ͬͯΈͨΒͪΌΜͱಈ͍ͨ • FaasΛ࡞ΕΔOSS, IronFunctions৮ͬͯΈͨ
 http://qiita.com/youyo_/items/0b227438dcf775665e6c

  43. IronFunctions·ͱΊ • ͍ΖΜͳݴޠ͕࢖͑Δͷ͸ັྗత • AWS LambdaϑΥʔϚοτ͕Ͳ͜Ͱ΋ಈ͔ͤΔͱ͍͏ͷ΋ັྗత • AzureFunctions΍CloudFunctionsͱͷޓ׵ੑʹ΋ظ଴͍ͨ͠ͱ͜Ζ • Triggerͱͯ͠࢖͑ΔΠϕϯτ͸Ͳ͏ͳΜͩΖ͏ʁ

    Openstackͷ Ceilometerʹ͸ରԠ͍ͯ͠ΔΈ͍ͨ • ServerlessΞʔΩςΫνϟʔͷಛ௃ͷҰͭͱͯ͠ɺΠϕϯτυϦϒϯͳ ΋ͷΛ࡞ΕΔ͔ͱ͍͏ͷ΋ॏཁͳ΢ΣΠτΛ઎ΊΔͱࢥ͏ͷͰɺ͜ͷ ลΓʹ΋ظ଴͍ͨ͠ (Πϕϯτൃߦଆ͸Կऀʁͱ͍͏ͷ͸ஔ͍ͱ͍ͯ) • ஫ҙ఺ͱͯ͠ࠓ͸·ͩα൛ͳͷͰϓϩμΫγϣϯಋೖ͸ආ͚ͨ΄͏͕Α ͦ͞͏ɻ࣮ࡍ৮ͬͯͯόά͋ͬͨ͠
  44. ·ͱΊ • αʔόʔϨε͸༻๏ɾ༻ྔΛक͍͍ͬͯײ͡ʹ͓࢖͍͍ͩ͘͞