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

今こそはじめよう! 実践!サーバレスアーキテクチャ/serverless-sendai

今こそはじめよう! 実践!サーバレスアーキテクチャ/serverless-sendai

堀家隆宏

July 29, 2016
Tweet

More Decks by 堀家隆宏

Other Decks in Programming

Transcript

  1. ࠓͦ͜͸͡ΊΑ͏ʂ
    ࣮ફʂαʔόϨεΞʔΩςΫνϟ
    @Amimoto_Ami
    amimoto-ami.com

    View Slide

  2. ࣗݾ঺հ
    • ໊લɿງՈོ޺
    • ॴଐɿAMIMOTO TEAM
    • Githubɿhttps://github.com/horike37
    • Qiitaɿhttp://qiita.com/horike37
    • ಘҙͳ͜ͱɿAWS, JavaScript, WordPress

    View Slide

  3. ࠷ۙ։ൃͨ͠
    αʔόϨεͳ
    OSSϓϩμΫτ

    View Slide

  4. https://github.com/horike37/simple-api-gateway
    Simple API Gateway
    • API GatewayͷઃఆΛ؆୯ʹ͢Δͱ͍
    ͏ίϯηϓτ
    • ର࿩ίϚϯυʹΑΔઃఆͷखҾ
    • ϚοϐϯάςϯϓϨʔτ΍CORSͷઃ
    ఆΛҙࣝ͠ͳͯ͘ྑ͍

    View Slide

  5. https://github.com/horike37/serverless-command-line-event-args
    • Serverless FrameworkͷϓϥάΠϯ
    • Serverless FrameworkʹΑΔ։ൃͷޮ
    ཰Խ͕Մೳʹ
    • Lambdaʹ౉͢Ҿ਺ΛίϚϯυϥΠϯ
    Ͱ౉͢͜ͱ͕͖ͰΔ
    Serverless CommandLine Event Args

    View Slide

  6. ຊ୊

    View Slide

  7. αʔόϨε
    ΞʔΩςΫνϟ
    ͱ͸

    View Slide

  8. • Ϋϥ΢υͰఏڙ͞ΕΔαʔϏεར༻Λલఏʹߏங͢ΔαʔϏεٴͼΞϓϦέʔγϣϯ
    • Ծ૝ϚγϯΛ࢖ΘͣʹΞʔΩςΫνϟΛߏ੒
    EC2

    View Slide

  9. Կ͕خ͍͠ͷ͔

    View Slide

  10. ຊདྷ΍Γ͔ͨͬͨίʔυΛॻ͘͜ͱʹ
    ूதग़དྷΔ؀ڥΛ࡞Δ

    View Slide

  11. • webαʔϏεΛ։ൃӡ༻ͯ͠ϏδωεΛ੒ޭͤ͞Δ͜ͱ
    • ͦͷͨΊʹΞϓϦέʔγϣϯͷίʔυΛॻ͘͜ͱ
    ຊདྷ΍Γ͔ͨͬͨ͜ͱ
    ͔͠͠ݱ࣮ʹ͸ίʔυΛॻ͚ͩ͘Ͱ͸ແ͍

    View Slide

  12. • OS΍ωοτϫʔΫͷઃఆɾ؅ཧ
    • αʔόͷߏஙɾϥϯλΠϜ؀ڥͷηοτΞοϓ
    • ϛυϧ΢ΣΞ΍ΞϓϦέʔγϣϯͷηΩϡϦςΟΞοϓσʔτ
    • Πϯϑϥͷϝϯςφϯε
    • ΞΫηε਺΍Ϣʔβ਺ͷ৳ͼʹର͢Δαʔόߏ੒ͷมߋɾΩϟύγςΟ
    ؅ཧ
    • ݸਓ৘ใͷ؅ཧ
    αʔό͕ଘࡏ͢Δ৔߹ʹൃੜ͢ΔλεΫ

    View Slide

  13. αʔό͕ଘࡏ͢ΔwebαʔϏεͷ্ཱͪ͛౰ॳ
    ίʔυͷ࣮૷
    αʔόϝϯςφϯε
    αʔόͷߏங
    ΩϟύγςΟϓϥϯχϯά
    අ΍ͤΔ࣌ؒͷׂ߹
    • ଟ͘ͷ࣌ؒΛίʔυͷ࣮૷ʹඅ΍ͤΔ

    View Slide

  14. αʔό͕ଘࡏ͢ΔwebαʔϏε͕੒௕͢Δͱ
    αʔόͷ؂ࢹ
    αʔόϝϯςφϯε
    ίʔυͷ࣮૷
    ΩϟύγςΟ
    ϓϥϯχϯά
    අ΍ͤΔ࣌ؒͷׂ߹
    • ૿͑ߦ͘ΞΫηε΍Ϣʔβ਺ʹର͢Δ
    αʔόͷߏ੒มߋɾΩϟύγςΟϓϥ
    ϯχϯά
    • ϞϊϦγοΫͳγεςϜʹର͢Δϝϯ
    ςφϯείετ
    • γϏΞͳݸਓ৘ใͷ؅ཧ
    • αʔόͷ؂ࢹ΍ͦΕʹର͢Δ24/365ͷ
    ରԠͷඞཁੑ
    ηΩϡϦςΟΞλοΫ
    ΁ͷରԠ

    View Slide

  15. ͍ͭͷؒʹ͔ଟ͘ͷ࣌ؒΛ෇ՃՁ஋ͷੜ·ͳ͍
    ॏ࿑ಇʹඅ΍͍ͯ͠Δ

    View Slide

  16. Ͳ͏ղܾ͢Δͷ͔

    View Slide

  17. αʔό͕ଘࡏ͢ΔwebαʔϏεͷ੒௕ظ
    αʔόͷ؂ࢹ
    αʔόϝϯςφϯε
    ίʔυͷ࣮૷
    ΩϟύγςΟ
    ϓϥϯχϯά
    අ΍ͤΔ࣌ؒͷׂ߹
    • ૿͑ߦ͘ΞΫηε΍Ϣʔβ਺ʹର͢Δ
    αʔόͷߏ੒มߋɾΩϟύγςΟϓϥ
    ϯχϯά
    • ϞϊϦγοΫͳγεςϜʹର͢Δϝϯ
    ςφϯείετ
    • γϏΞͳݸਓ৘ใͷ؅ཧ
    • αʔόͷ؂ࢹ΍ͦΕʹର͢Δ24/365ͷ
    ରԠ໺ඞཁੑ
    %%PT߈ܸͷରԠ
    ͢΂ͯΛΫϥ΢υαʔϏε΁
    Ξ΢τιʔε

    View Slide

  18. ݁Ռ΋ͨΒ͞ΕΔϝϦοτ
    Ϗδωε΁ͷ෇ՃՁ஋Λ͚ͭΔίʔυͷ࣮૷ʹ
    ଟ͘ͷ࣌ؒΛඅ΍ͤΔΑ͏ʹͳΔ

    View Slide

  19. ࣮ફฤ

    View Slide

  20. Ұൠతͳϒϥ΢βΞϓϦέʔγϣϯΛαʔόϨεΞʔΩςΫνϟͰ
    ࣮૷ͨ͠৔߹ͷߏ੒Λݟ͍͖ͯ·͠ΐ͏

    View Slide

  21. ϒϥ΢βΞϓϦέʔγϣϯͷߏ੒ਤ

    View Slide

  22. ϒϥ΢βΞϓϦέʔγϣϯͷߏ੒ਤ
    CognitoʹΑΔ
    ೝূɾೝՄ

    View Slide

  23. ϒϥ΢βΞϓϦέʔγϣϯͷߏ੒ਤ
    ಈతॲཧ͸API Gateway
    Λ௨ͯ͠LambdaͰॲཧ

    View Slide

  24. ϒϥ΢βΞϓϦέʔγϣϯͷߏ੒ਤ
    HTML,CSSͳͲ
    ੩తϦιʔε͸S3ʹઃஔ

    View Slide

  25. Cognito 

    User Pools
    ೝূɾೝՄ

    View Slide

  26. Cognito User Pools
    • ಠࣗͷϢʔβσΟϨΫτϦΛ࡞੒Ͱ͖ΔϑϧϚωʔδυαʔ
    Ϗε
    • ਺ԯϢʔβ·Ͱεέʔϧ
    • ೝূɾೝՄγεςϜΛεέʔϧͤ͞ɺηΩϡΞʹ͢Δͱ͍͏
    ॏ࿑ಇΛ͢΂ͯ΍ͬͯ͘ΕΔαʔϏε

    View Slide

  27. Cognito User Pools
    • جຊతʹ͸1ͭͷΞϓϦέʔγϣϯʹ͖ͭ1ͭͷUser Pool
    Λ࡞Δ
    • αΠϯΞοϓͷࡍͷύεϫʔυͷϙϦγʔ΍ೋஈ֊ೝূͳ
    ͲηΩϡϦςΟʹؔ͢ΔઃఆΛ֤User Poolຖʹઃఆ͢Δ
    • αΠϯΞοϓࡁΈͷϢʔβͷҰཡ͸Ϛωδϝϯτίϯιʔ
    ϧ͔Β֬ೝͰ͖Δ

    View Slide

  28. Amazon Cognito Identity SDK for JavaScript
    https://github.com/aws/amazon-cognito-identity-js
    • User PoolͱwebαΠτͱͷ࿈ܞΛߦ͏ϥΠϒϥϦ
    • αΠϯΠϯɺαΠϯΞοϓɺύεϫʔυϦϚΠϯμʔ
    ͳͲɺϢʔβ؅ཧΛߦ͏্Ͱඞཁͳϝιου͕શ
    ͯ༻ҙ͞Ε͍ͯΔ
    • JavaScriptͰϝιουΛهड़͢Δ͚ͩͰྑ͍ɻෳ
    ࡶͳϏδωεϩδοΫΛ࣮૷͢Δඞཁ͸ͳ͍

    View Slide

  29. Customer Authorizer
    API 

    Gateway
    Cognito
    User Pools
    • API GatewayʹೝূೝՄͷ࢓૊ΈΛUser
    PoolsΛ࢖࣮ͬͯݱͰ͖Δ
    • ϩάΠϯࡁΈͰ͋Ε͹APIͷॲཧΛಈ࡞͞
    ͤͯɺະϩάΠϯঢ়ଶͰ͋Ε͹ɺAPIͷॲ
    ཧΛ࣮ࢪͤ͞ͳ͍ͱ͍ͬͨ͜ͱ͕Մೳ

    View Slide

  30. ຊ೔ϕʔλ͕औΕͯਖ਼ࣜϦϦʔε

    View Slide

  31. DynamoDB
    ಈతॲཧ
    Lambda
    API 

    Gateway

    View Slide

  32. API Gateway
    • ΞϓϦέʔγϣϯͷݰؔͱͯ͠ৼΔ෣͏ APIΛ࡞੒͢Δ͜ͱ
    ͕Ͱ͖ΔϚωʔδυαʔϏε
    • APIόοΫΤϯυγεςϜʹLambdaΛઃఆͯ͠֎෦͔Βͷೖ
    ྗσʔλΛॲཧͤ͞Δ
    • ͲͷΑ͏ͳεέʔϧͰ͋ͬͯ΋ɺ؆୯ʹ API ͷ࡞੒ɺ഑෍ɺ
    อकɺ؂ࢹɺอޢ͕ߦ͑Δ

    View Slide

  33. Lambda
    • ΞϓϦέʔγϣϯίʔυΛ࣮ߦͰ͖ΔίϯϐϡʔταʔϏε
    • Ϣʔβ͸ΞϓϦέʔγϣϯίʔυͷΈΛAWSʹΞοϓϩʔ
    υ͢Ε͹ྑ͍ɻϢʔβ͕੹೚Λෛ͏ͷ͸ίʔυͷΈ
    • αʔόɺOSɺΩϟύγςΟʔͷϓϩϏδϣχϯά͓Αͼࣗ
    ಈεέʔϦϯάɺίʔυͷϞχλϦϯά͓Αͼϩάه࿥͸
    AWS͕؅ཧٴͼ࣮ࢪ͢Δ

    View Slide

  34. DynamoDB
    • ϑϧϚωʔδυͳNo SQLσʔλϕʔεαʔϏε
    • SPOF͕ଘࡏ͠ͳ͍ɻߴՄ༻ੑ 3 x ϨϓϦέʔγϣϯ
    • ετϨʔδ༰ྔ੍ݶͳ͠
    • ਫฏεέʔϦϯάʹΑΔෛՙ෼ࢄ

    View Slide

  35. • ͜ͷ3ͭͷαʔϏεΛ૊Έ߹ΘͤΔ͜ͱͰɺΞϓϦέʔγϣ
    ϯʹඞཁͳσʔλͷೖग़ྗɺॲཧɺӬଓԽ͕ՄೳʹͳΔ
    αʔόϨεΞʔΩςΫνϟࡾछͷਆث

    View Slide

  36. αʔόϨεΞʔΩςΫνϟͰͷ։ൃΛΑΓޮ཰తʹ

    View Slide

  37. ։ൃπʔϧ΍ϑϨʔϜϫʔΫ
    Serverless
    Framework
    API GatewayٴͼLambdaɺͦͷଞAWSϦιʔεΛ࢖ͬͨ
    ΞϓϦέʔγϣϯΛߏங͢ΔͨΊͷϑϨʔϜϫʔΫ
    APEX
    LambdaϑΝϯΫγϣϯΛϏϧυɺσϓϩΠɺ؅ཧ͢ΔͨΊ
    ͷπʔϧ
    chalice Serverless FrameworkʹࣅͨϑϨʔϜϫʔΫ
    Lamvery
    LambdaͷσϓϩΠ΍Functionͦͷ΋ͷΛؚΊͨपลػೳͷ
    ઃఆɾ؅ཧΛࢧԉ͢Δπʔϧ
    Simple API
    Gateway
    API GatewayͷઃఆٴͼσϓϩΠΛ؆୯ʹ͢Δπʔϧ

    View Slide

  38. ੩తϦιʔε
    S3 Bucket

    View Slide

  39. Simple Strage Service
    • Πϯλʔωοτ༻ͷετϨʔδαʔϏε
    • εέʔϥϒϧͰ৴པੑ͕ߴ͘ɺ͔ͭߴ଎Ͱ҆Ձͳσʔλετ
    ϨʔδΠϯϑϥετϥΫνϟΛར༻Ͱ͖Δ

    • ϑϩϯτ༻ͷHTML͸S3όέοτʹ഑ஔ͢Δ͜ͱͰແݶͷε
    έʔϥϏϦςΟΛ࣮ݱ͢Δ

    View Slide

  40. ϑϩϯτͷϒϥ΢βͱAPIΛޮ཰Α͘઀ଓͯ͘͠ΕΔ΋ͷ͕ඞཁ

    View Slide

  41. ϑϩϯτͷϒϥ΢βͱAPIΛޮ཰Α͘઀ଓͯ͘͠ΕΔ΋ͷ͕ඞཁ
    Single Page ApplicationʹΑΔ
    ϒϥ΢βΞϓϦέʔγϣϯͷ։ൃ

    View Slide

  42. • ୯ҰϖʔδʹΑΔWebΞϓϦέʔγϣϯ
    • ϖʔδ͸ϋογϡͷมߋ΍ DOM ͷૢ࡞ʹΑͬͯ੾
    ΓସΘΔ
    • αʔόͱͷ௨৴͸ Ajax ΍ WebSocket ͳͲͰߦ͏
    Single Page Applicationͱ͸

    View Slide

  43. • APIͱϖʔδ͕׬શʹ෼཭͍ͯ͠ΔͨΊɺAPI
    ϑΝʔετͷߟ͑ํͰࣗવʹΞϓϦέʔγϣϯ͕૊
    ΊΔ
    • ΫϥΠΞϯτͱAPIͦΕͧΕʹ։ൃϦιʔεΛ෼཭
    ׂͯ͠Γ౰ͯΔ͜ͱ͕༰қ
    Single Page ApplicationͷϝϦοτ

    View Slide

  44. ϓϦίϯύΠϧʹΑΔΫϥΠΞϯταΠυϨϯμϦϯά
    API Gateway͔Βͷσʔλऔಘ
    ίϯύΠϧͯ͠HTMLͷੜ੒
    ϒϥ΢βͰͷඳը

    View Slide

  45. ·ͱΊ
    • ͜͜·Ͱʹ঺հͨ͠αʔϏε΍πʔϧΛ࢖͏͜ͱͰैདྷͷϒ
    ϥ΢βΞϓϦέʔγϣϯΛαʔόϨεΞʔΩςΫνϟͰ։ൃɺ
    ӡ༻͢Δ͜ͱ͕ՄೳʹͳΔ

    View Slide

  46. ·ͱΊ
    http://qiita.com/horike37
    ࠓ೔঺հͨ͠ΞʔΩςΫνϟͷৄࡉ͸QiitaͷํʹιʔείʔυؚΊͯॻ͍͍ͯ·͢
    ڵຯ͋Δํ͸ੋඇͷ͍ͧͯΈ͍ͯͩ͘͞

    View Slide

  47. αʔόϨεΞʔΩςΫνϟͰ࠷΋େࣄͳ͜ͱ
    ࠷ޙʹ

    View Slide

  48. αʔόϨεΞʔΩςΫνϟͰ΍͍ͬͯ͘ؾ࣋ͪʂ

    View Slide

  49. ࣗ෼ͨͪͰ։୓͠ɺࣄྫΛ࡞͍ͬͯ͘ؾ࣋ͪʂ

    View Slide

  50. ͦΜͳ೤͍ؾ࣋ͪΛ͞Βʹ੝Γ্͛ͯ͘ΕΔΠϕϯτ͕͋Γ·͢ʂ

    View Slide

  51. Serverless Conf Tokyo͕։࠵͞Ε·͢ʂ
    http://tokyo.serverlessconf.io/

    View Slide

  52. @Amimoto_Ami
    amimoto-ami.com
    THANK YOU!
    ࠓͦ͜͸͡ΊΑ͏ʂ
    ࣮ફʂαʔόϨεΞʔΩςΫνϟ

    View Slide