Slide 1

Slide 1 text

SERVERLESS PRACTICES + α MASASHI TERUI @ WE WANNA TECH AOMORI

Slide 2

Slide 2 text

SERVERWORKS CO.,LTD. + FREELANCER • Serverless Oji-san • Serverlessconf Tokyo 2016,2017,2018 speaker • Remote worker (in Sapporo) • @marcy_terui • https://willy.works MASASHI TERUI ARCHITECT / DEVELOPER

Slide 3

Slide 3 text

AGENDA SERVERLESS ͬͯͳΜ͚ͩͬʁ 1 6 2 7 3 8 4 9 5 10 SERVERLESS ͷ࣮ମΛଊ͑Δ SERVERLESS ͷઃܭ SERVERLESS ͷ࣮૷ SERVERLESS ͷσϓϩΠ SERVERLESS ͷӡ༻ SERVERLESS ͷݱ࣮ SERVERLESS ͷະདྷ SERVERLESS ͷ͓·͚ SERVERLESS ͷςετ

Slide 4

Slide 4 text

SERVERLESSͬͯͳΜ͚ͩͬʁ WHAT IS

Slide 5

Slide 5 text

CNCF SERVERLESS WHITEPAPER V1.0 • Serverless computing refers to the concept of building and running applications that do not require server management • A platform may provide one or both of the following: • Functions-as-a-Service (FaaS) • Backend-as-a-Service (BaaS) • Products or platforms deliver the following benefits to developers: • Zero Server Ops • No Compute Cost When Idle 
 https://github.com/cncf/wg-serverless/tree/master/whitepaper

Slide 6

Slide 6 text

FaaS + Functional SaaS (BaaS) = Serverless https://www.slideshare.net/acloudguru/ant-stanley-being-serverless

Slide 7

Slide 7 text

SERVERLESS USE CASES (FROM CNCF WP) • Asynchronous, concurrent, easy to parallelize into independent units of work • Infrequent or has sporadic demand, with large, unpredictable variance in scaling requirements • Stateless, ephemeral, without a major need for instantaneous cold start time • Highly dynamic in terms of changing business requirements that drive a need for accelerated developer velocity • Non-HTTP-centric and non-elastic scale workloads that weren’t good fits for an IaaS, PaaS, or CaaS solution (Event Driven workloads)

Slide 8

Slide 8 text

SERVERLESSͷ࣮ମΛଊ͑Δ

Slide 9

Slide 9 text

FaaSͬͯͲΜͳ΋ͷʁ

Slide 10

Slide 10 text

SERVERLESS PROCESSING MODEL https://github.com/cncf/wg-serverless/tree/master/whitepaper#detail-view-serverless-processing-model ॲཧͷશମ૾Λ௫Ή Πϕϯτιʔε͔ΒͷΠϕϯτॲཧཁٻΛ ଟ਺ͷΠϯελϯε্ͷFunction͕෼ࢄॲཧ

Slide 11

Slide 11 text

THE INTERNAL FLOW OF PROCESSING https://github.com/apache/incubator-openwhisk/blob/master/docs/about.md#the-internal-flow-of-processing Πϕϯτ͕ॲཧ͞ΕΔྲྀΕΛ௫Ή ετϦʔϜ΍ΩϡʔΛڬΜͰ෼ࢄॲཧ͢Δͷ͕جຊ ಉظͷ৔߹͸௚઀TCPͰ௨৴͢ΔΒ͍͠(Lambda͸)

Slide 12

Slide 12 text

FaaS ≒ ίϯςφͰִ཭͞Εͨؔ਺

Slide 13

Slide 13 text

BaaSͬͯͲΜͳ΋ͷʁ

Slide 14

Slide 14 text

FROM OWNERSHIP TO USE SERVICES Ϋϥ΢υʹΑͬͯαʔό͕ॴ༗͔Βར༻΁ ͞Βʹϛυϧ΢ΣΞ΍ϥΠϒϥϦ΋ར༻΁ BaaSΛ࢖͏ͷ͸ͦ͏͍͏ࣗવͳྲྀΕ

Slide 15

Slide 15 text

BaaS ≒ ϑϧϚωʔδυ͔ͭந৅Խ͞ΕͨMW

Slide 16

Slide 16 text

SERVERLESS͸ؔ਺ͱMWͰͰ͖ͯΔ ߴ౓ʹந৅Խ͞ΕͯΔ͚ͩ

Slide 17

Slide 17 text

΍Δ΂͖͜ͱΛͪΌΜͱ΍Δ SERVERLESS͔ͩΒͬͯࣼʹߏ͑ͣʹ

Slide 18

Slide 18 text

SERVERLESSͷઃܭ

Slide 19

Slide 19 text

• ϝοηʔδϯά • ಉظ/ඇಉظ • Interactive/PubSub • σʔλετΞ • εέʔϦϯά • σʔλΞΫηε • ࣮ߦํ๏ • ฒྻ/௚ྻ • ܾఆత/ඇܾఆత ໨తΛՌͨͨ͢Ίͷ࠷దղ͸ҟͳΔ

Slide 20

Slide 20 text

BE EVENT DRIVEN

Slide 21

Slide 21 text

͢΂ͯ͸EVENTͱHANDLERͷ૊Έ߹Θͤ

Slide 22

Slide 22 text

• ಉظ • API Gateway • ඇಉظ • ௚ྻ • Kinesis Streams • ฒྻ • SNS • SQS • ͦͷଞ • Step Functions EVENTΛͲͷΑ͏ʹॲཧ͢΂͖͔ʁ

Slide 23

Slide 23 text

ඇಉظɾ෼ࢄΛϕʔεʹߟ͑Δ Կ΋ͤͣʹ଴ͬͯΔͳΒࣗ෼(MONOLITH)Ͱ΍Ε͹ྑ͍ͷͰ͸ʁ

Slide 24

Slide 24 text

• ͭ·ΔॴΤϥʔϋϯυϦϯά • ϦτϥΠՄೳͳΤϥʔ͸ϦτϥΠ͢Δ • ಉظͰ΍Ε͹ΫϥΠΞϯτ͕ϦτϥΠͯ͘͠ΕΔͱ͍͏ͷ͸ݬ૝ • ϦτϥΠͰ͖ͳ͍Τϥʔ΋ҰͭͷΠϕϯτͰ͋Δ • ผͷܦ࿏ͰવΔ΂͖ॴʹ఻͑Δͱ͍͏͜ͱΛߟ͑Δ • ͦͯ͠ϞχλϦϯάɾτϨʔγϯά • ඞཁͳ৘ใ͸ू໿͢Δ • ৄ͘͠͸͋ͱͰ ඇಉظɾ෼ࢄʹ͓͚Δෆ҆

Slide 25

Slide 25 text

Event Source + Handler = Microservice ʓʓʹରͯ͠☓☓͢Δɺશͯ͸ͦͷ૊Έ߹Θͤ

Slide 26

Slide 26 text

• ࣮ࡍʹEvent SourceͱHandlerຖʹ؅ཧ୯ҐΛ෼͚Δ͔͸։ൃઓུґଘ • গਓ਺Ͱશ෦࡞ͬͯΔͷʹσϓϩΠύΠϓϥΠϯ΍GitϦϙδτϦΛ
 ෼͚Δͷ͸ΦʔόʔϔουͰ͔͠ͳ͍ • Event SourceͱHandlerͷ૊Έ߹ΘͤͰॲཧ಺༰͕ࣗ໌͔ͭ؅ཧՄೳͳ
 ঢ়ଶΛอ͍ͬͯΕ͹ޙͰ෼͚Δͷ͸ۤ͡Όͳ͍ • ೚ҙͷίϯςΩετͰEvent SourceΛ઀ଓ఺ʹ্ख͘੾Γग़ͤΔ • େࣄͳͷ͸Function͕૿͑Δ͜ͱΛԀΘͣઃܭͷෳࡶԽΛݏ͏͜ͱ Practices

Slide 27

Slide 27 text

• ґଘؔ܎ͷ޲͖Λἧ͑Δ • ඇಉظΛॏࢹ • Event SourceΛू໿఺ɾ෼ذ఺ͱ͢Δ • ෳࡶԽͷݪҼ͸େ఍σʔλΞΫηεʹ͋Δ • ॻ͖ࠐΈͱࢀরؔ܎ͷෳࡶԽ • σʔλͷॴ༗ؔ܎ • CQRS, Materialized View ෳࡶԽͤ͞ͳ͍ͨΊʹ

Slide 28

Slide 28 text

• ॻ͖ࠐΈͱಡΈࠐΈͰಉ͡σʔλΛѻ͏ඞཁ͸ͳ͍ • ॻ͖ࠐΈͷݪ୯ҐΛߟ͑ɺΞΠςϜʹ·ͱΊΔ͜ͱͰ੔߹ੑΛकΔ • ಡΈࠐΈ͸݁Ռ੔߹Λड͚ೖΕͯޮ཰ͷྑ͍σʔλΛੜ੒͍ͯ͘͠ • Ͱ͖ΔݶΓҰͭͷHandler͕ѻ͏΂͖σʔλΛҰͭͱ͢Δ • Write͸ൺֱత؆୯ • Read͸CQRS, Materialized ViewΛ্ख͘࢖͏ Data Modeling

Slide 29

Slide 29 text

۩ମతʹ͸ “DynamoDB ދͷר” [ݕࡧ] http://marcy.hatenablog.com/entry/2018/07/31/213705

Slide 30

Slide 30 text

SERVERLESSͷ࣮૷

Slide 31

Slide 31 text

• EventΛҾ਺ʹ݁ՌΛฦ͢ • ͨͩͦΕ͚ͩͳͷͰผʹී௨ʹҰൠతʹྑ͍ͱ͞ΕΔίʔυॻ͚͹͓̺ • ͋Δͱ͢Ε͹ • FaaSͷੑ্࣭ύϑΥʔϚϯεʹؔΘΔTips • EventॲཧͷϙΠϯτ ݴ͏ͯͨͩͷؔ਺

Slide 32

Slide 32 text

• Cold Start/Warn StartΛҙࣝ͢Δ • ίʔυ͕ಉ͡Ͱ͋Ε͹Ұ౓ىಈͨ͠ίϯςφ͸͋Δఔ౓࢒Δʢ਺ेඵ) • ಉ͡ίϯςφ͕࠶ར༻͞ΕΔ -> Warm Start • ৽͍͠ίϯςφ্ཱ͕͕ͪΔ -> Cold Start (Φʔόʔϔου͕͋Δ) • ෆཁͳΦϒδΣΫτΛ޿͍ScopeͰੜ੒͠ͳ͍ • Warm Start࣌ʹ͸Global Scope΍StaticͳΦϒδΣΫτ͸࢒Δ • ࢖͍ճͤΔΦϒδΣΫτ͸࢖͍ճ͢(Lazy Loading, Singleton) • ಛʹTCPίωΫγϣϯ࣋ͬͯΔΦϒδΣΫτͱ͔͸Φʔόϔου͕σΧΠ͔Βେࣄ FaaSͷੑ্࣭ύϑΥʔϚϯεʹؔΘΔTips

Slide 33

Slide 33 text

• Event Sourceͷछผຖʹॲཧํ๏ΛܾΊͯ౷Ұ͢Δ • ϝοηʔδͷड͚౉͠ํ • JSON/ProtocolBuffers, Plain/GZip etc… • Trace ID(ޙड़)ͳͲͷMetadataͷ࢓ࠐΈํ • ྫ֎ॲཧ • ແࢹʢϩάʹ࢒͢ʣͯ͠ྑ͍΋ͷ • ൃੜͨ࣌͠఺Ͱผϧʔτʹྲྀ͢΂͖΋ͷ • Failͤͯ͞ϦτϥΠػߏʹ৐ͤΔ΋ͷ • PythonͩͱDecoratorΛ࢖͏ͱศར EventॲཧͷϙΠϯτ

Slide 34

Slide 34 text

DECORATOR Trace IDΛϔομͰ΍ΓऔΓ EventͱResult͸ඞͣϩάʹ࢒͢ ͱ͍͏࠷௿ݶͳαϯϓϧ

Slide 35

Slide 35 text

SERVERLESSͷςετ

Slide 36

Slide 36 text

UNIT TESTΛॻ͘ •ී௨ʹؔ਺ͩΑʁ •↓ඞݟ • https://speakerdeck.com/twada/ test-driven-architecture-aws-dev- day-tokyo-2018

Slide 37

Slide 37 text

• جຊతʹ࣮ࡍͷAWS αʔϏεΛ࢖ͬͯ΍Δ • ౷߹؅ཧͰ͖ΔFWΛબͿ(AWS SAM, Serverless etc…) • ͦͷ··ಉ͡؀ڥ͕σϓϩΠͰ͖Δ • ςετ͍ͨ͠ൣғΛܾΊɺऴ୺ͷEvent SourceͱHandlerΛஔ͖׵͑Δ • ؀ڥม਺ͰEvent SourceΛ੾Γସ͑ • VerifyՄೳͳܗͰOutputͤ͞Δ Integration Test

Slide 38

Slide 38 text

PRODUCTION SSM Parameter Store΍CFn Expot/Import ValueͰ֎෦ࢀরՄೳͱ͓ͯ͘͠ ؀ڥม਺͔ΒEndpointΛ஫ೖ͢ΔΑ͏ʹ࣮૷

Slide 39

Slide 39 text

INTEGRATION TEST ͨͩདྷͨEventΛPut͢Δ͚ͩˠͦΕΛVerify͢Δ ʢTrace IDͷ࢓૊Έ͕͋Δͱঘྑʣ

Slide 40

Slide 40 text

SERVERLESSͷσϓϩΠ

Slide 41

Slide 41 text

• ࢖͏αʔϏε͕౷߹؅ཧͰ͖ΔFWΛબͿ(AWS SAM, Serverless etc…) • ઌड़ͷIntegration Testͷ࢓૊Έ͸CFnͷػೳʹڧ͘ґଘ͢ΔͷͰ
 CFnϕʔεͷFW͡Όͳ͍ͱ࢖͑ͳ͍ςΫχοΫ • ൣғ͕ݶఆతͳ΋ͷ͸ͦͷൣғͰऩ·Δ৔߹ʹͷΈ(Chalice, Apex etc…) • ͦͷൣғͰऩ·ΔͳΒศརͳͷͰੵۃతʹ࢖ͬͯྑ͍ Framework͸Կ࢖͏ʁ

Slide 42

Slide 42 text

• ౷߹؅ཧͰ͖͍ͯΕ͹جຊతʹίϚϯυୟ͚ͩ͘ͰσϓϩΠͰ͖Δ͸ͣ • ී௨ʹύΠϓϥΠϯ૊ΊΔ • ػີ৘ใ΍σϓϩΠ࣌ʹల։͍ͨ͠৘ใ͸؀ڥม਺͔Β஫ೖ • FWͷεςʔδػೳ΍CFnͷ࢓૊ΈΛར༻ͯ͠؀ڥຖʹϦιʔε͕෼͚Δ • ໋໊نଇେࣄ • CFnͷࣗಈ໋໊ʹ೚ͤͯ࿦ཧతͳࢀর͚ͩΛ࢖༻͢Δͱָ(SAMͷ৔߹) • !Ref, !GetAtt, !Import/ExportValue CI/CD

Slide 43

Slide 43 text

SERVERLESSͷӡ༻

Slide 44

Slide 44 text

• ແ͍ͷ͸ʮαʔόͷӡ༻ʯ • EC2తͳαʔό • αʔόʔϓϩηεతͳαʔό • γεςϜࣗମͷӡ༻͸΋ͪΖΜ͋Δ • ΑΓຊ࣭తͳӡ༻ʹϑΥʔΧεͰ͖Δͷ͸͔֬ ӡ༻͕ແ͍ͷ͕Sereverless??

Slide 45

Slide 45 text

• ࣮ࡍʹ໰୊͕ى͖ͨ͜ͱΛ؂ࢹ͢Δ • Τϥʔͷൃੜ΍஗ԆΛ؂ࢹ͢Δ • API Gateway: Latency, 5XX Response • Lambda: Duration, Errors, Throttling, DeadLetterErrors • DynamoDB: Consumed Capacity, Throttling, Latency, Errors
 •Ұ൪େ੾ͳͷ͸ΞϓϦέʔγϣϯͷϩά ؂ࢹ

Slide 46

Slide 46 text

• DeadLetterErrors • ͿͬͪΌ͚LambdaͷىಈError͸ى͖Δ࣌͸ͪΐ͍ͪΐ͍ى͖Δ • ࠶࣮ߦͰ্ख͘ݴͬͯΔέʔε͕΄ͱΜͲ • ࠶࣮ߦ΋ࣦഊͯ͠औΓ͜΅ͨ͠Error͸͜ΕΛݟͳ͍ͱ෼͔Βͳ͍(ཁઃఆ) • Throttling • SDK͸Throttlingͯ͠΋಺෦Ͱউखʹ࠶࣮ߦ͢Δ • Τϥʔ͕ى͖ͯͳ͍͔ΒThrottling͕ى͖ͯͳ͍ͱ͸ݶΒͳ͍ • ͜ΕΛݟΔͱൃੜঢ়گ͕෼͔ΔˠCapacity௥Ճ ཁ஫ҙͳ؂ࢹ߲໨

Slide 47

Slide 47 text

• ෼ࢄͨ͠FaaS؀ڥͰ͸͍͔ʹू໿ͯ͠ޮ཰Α͘ݟΒΕΔΑ͏ʹ͢Δ͔͕େࣄ • ·ͣू໿͢Δͷ͸େલఏ • CloudWatch Logs͸ͨͩͷόοΫΞοϓ • Datadog LogsΦεεϝ • https://github.com/marcy-terui/ddlogs • Trace IDͷड͚౉͠ํΛܾΊͯԣ۲ͰݕࡧͰ͖ΔΑ͏ʹ͢Δ ϩά

Slide 48

Slide 48 text

LOGS WITH TRACE ID Datadog Logsͷ࣮ࡍͷը໘Ͱ͢

Slide 49

Slide 49 text

SERVERLESSͷݱ࣮

Slide 50

Slide 50 text

• REST API + SPA/MobileAppͳΞϓϦέʔγϣϯ • ผʹѱ͘͸ͳ͍ • αʔόӡ༻͠ͳͯ͘ྑ͍Ҏ্ͷϝϦοτ͕ͳ͍ • ͦΕɺCaaS or PaaSͰΑ͘Ͷʁʁ • ී௨ʹRDB࢖͑ΔΑʁʁ • όοΫΤϯυॲཧΛ্ख͘෼ղͰ͖ͳ͍ͳΒແཧʹServerlessԽ͢Δඞཁ͸ͳ͍ • ࣮ࡍɺطଘWebΞϓϦͷServerlessԽ͸࡞Γ௚͢ؾ͕֓ͳ͚Ε͹
 ͍͍ͩͨίϯςφԽ, PaaSԽʹ଩੾Γ͢Δ͜ͱ͕΄ͱΜͲ WebΞϓϦέʔγϣϯʹผʹ޲͍ͯͳ͍

Slide 51

Slide 51 text

SERVERLESSͷະདྷ

Slide 52

Slide 52 text

• ͜͜Ͱݴ͏BaaS͸AppSync, FirebaseͷΑ͏ͳچདྷ͔ΒBaaSͱݺ͹Ε͍ͯͨ΋ͷ • Frontend͕΍ΓऔΓ͢Δͷ͸͋͘·ͰBaaS͚ͩ • όοΫΤϯυͰBaaSʹର͢ΔEvent DrivenͰ༷ʑͳॲཧ͕ߦΘΕΔ •ࣦ৬͢Δʘ(^o^)ʗśƂŦ • ͔΋͠Εͳ͍ʢΘΓͱߴ֬཰Ͱͦ͏ͳΔͱࢥͬͯΔʣ BaaSΛத৺ʹServerless͕ิ׬͢Δ

Slide 53

Slide 53 text

SERVERLESSͷ͓·͚

Slide 54

Slide 54 text

“CloudͰେن໛γεςϜ͸ͪΐͬͱɾɾɾ” THANKS!! “ServerlessͰେن໛γεςϜ͸ͪΐͬͱɾɾɾ” “݁ہશ෦Ͱ͖ΔΑ͏ʹͳͬͯΔ”