Slide 1

Slide 1 text

ςЄϝϹφίЄκϓμώϰ ΅ͮΗ΄Ӟ䴿 JAWS-UGՂ᮷ ̿SERVERLESSᐦ ӗςЄϝϹφͽίϤϷΨ֢͹ͼΕΞ͜ӗ̀ 2017/04/22 Ӿઊ ଛလ 1

Slide 2

Slide 2 text

ᛔ૩奧Օ • Ӿઊ ଛလ • μ϶φϮϊϐϖ AWSԪ䮣᮱ ϊϷϲЄτϴ ЀίЄκϓμϕ • AWSΨڥአͭ͵αЀϢ϶΄戔懯/䯤塈/π ЀςϸϓΰЀν • GitHub: knakayama • 奺䵉 • ηЀϤϹςЄϝ΄晁አ3ଙ • AWS 1ଙ 2

Slide 3

Slide 3 text

ίυδЀύ 1. Serverless͢扖氂΁΀Ρᙧว 2. Serverless;΅֜͡ 3. Serverless΄ڥᅩ 4. ServerlessΨඪ͞ΡϑЄϸ 5. ᐒտ΅ኚͥ΀͚ 6. Δ;Η 7. ݇ᘍϷЀμ 3

Slide 4

Slide 4 text

ဳ఺ᅩ • ๜φ϶αϖ΅匍䦒ᅩ΄ఘ䁭Ψڹ൉΁ͭͼ͚Δͯ • Serverlessኴᵈ΄ίϐϤϔЄϕ΅෱͚΄ͽڥአͯΡ檭΅๋ෛ΄ ఘ䁭Ψ݇ᆙͯΡͩ; • AWSզक़΄扖(GCP;͡Azure;͡OpenWhisk;͡)΅Ꭳ憎͢΀͚ ΄ͽۆ䙄 4

Slide 5

Slide 5 text

1. Serverless͢扖氂΁΀Ρᙧว 5

Slide 6

Slide 6 text

τЀϤϸ΀Web DBίЄκϓμώϰ Ψᘍ͞ͼΕΡ 6

Slide 7

Slide 7 text

7

Slide 8

Slide 8 text

τЀϤϸ΀䯤౮ • ELBͽϝϐμεЀϖ΄EC2΁ϕ϶Ϣΰϐ μၞͯ • EC2ͽRDSίμψφ • RDS΁ϔЄόכਂ 8

Slide 9

Slide 9 text

EC2Ψڥአͭ͵䁰ݳ΄抓氂 • ෭̸΄晁አ • 哶憙 • ϊϢϕγδί΄ίϐϤϔЄϕ • ᚈ୧௔䌏䖕 9

Slide 10

Slide 10 text

OSզӤ΄Ϲαϱ΅ڥአᘏ㯎ͽᓕቘ ͯΡ஠ᥝ͘͢Ρ 10

Slide 11

Slide 11 text

ͽͣΡ΀ΟΚΠ͵ͥ΀͚ 11

Slide 12

Slide 12 text

΀Ͳ晁አ͢஠ᥝ΁΀Ρ΄͡ • ϳЄσ΁㭅㮔Ψ੺ͧΡ͵Η΁ςЄϠφΨ֢Ρ • ςЄϠφΨ֢Ρ͵Η΁πЄϖΨ䨗ͥ • πЄϖΨ㵕ͯ͡͵Η΁ςЄϝ͢஠ᥝ΁΀Ρ • ςЄϝ͢ྋଉ΁㵕֢ͭ姆ͧΡ͵Η΁晁አ͢஠ᥝ΁΀Ρ 12

Slide 13

Slide 13 text

Θ͹;ςЄϠφ(πЄϖ)΁ ᵞӾͭ͵͚ 13

Slide 14

Slide 14 text

ͩͩΔͽ΄Δ;Η • 晁አ΅ͽͣΡ΀ΟΚΠ͵ͥ΀͚ • ๜๶΄ፓጱ΅ςЄϠφΨ֢͹ͼϳЄσ΁㭅㮔Ψ൉׀ͯΡͩ; • ͳ΄͵Η΁ςЄϠφ(πЄϖ)΄Ε΁ᵞӾͭ͵͚ • Serverless͢ጭ䁰ͯΡᙧว΁΅͚ͩ͜͹͵Ԫఘ͘͢Ρ 14

Slide 15

Slide 15 text

2. Serverless;΅֜͡ 15

Slide 16

Slide 16 text

Serverless;΅֜͡ • Ӟᛱጱ΁΅Function as a Service(FaaS)ΨӾஞ;ͭ͵ίЄκϓμώϰ • AWSͽ΅Lambda • ͵Ͷ̵ͭLambdaͯΟֵΥ΀͚ίЄκϓμώϰΨͩ͜޷Ό䁰ݳΘ͘Ρ (Lambdaless) • ͩ΄旽΅ۆ;䨀ซ • αϦЀϕϖϷϣЀ;͚͜ᇙ䖀͘͢Ρ • ֜Ο͡΄αϦЀϕΨॶ䱛;ͭͼϡόρ϶φαϐώጱ΁ݱ圵㳌ቘ͢䋚ᤈͫ΢Ρ 16

Slide 17

Slide 17 text

Lambda • πЄϖΨ䋚ᤈͽͣΡπЀϡϲЄϓΰЀνςЄϠφ • ςЄϝΚϤϺψφΨ樄咲ᘏ㯎ͽᓕቘͯΡ஠ᥝ͢΀͚ • Ϸμεφϕ/䋚ᤈ䦒樌΁䖕ͮ͵䕪ᰁ抓ᰂګ • ਞ͚ • 僻ාڥአ䩵Θ꧌䋚 • EC2΄䁰ݳ๋֗1䦒樌㶨֖ͽ抓ᰂ • 匍䦒ᅩͽلୗςϪЄϕͭͼ͚Ρ᥺承΅Node.js/Python/Java/C# • ͵Ͷͭ㳨΄᥺承Θ䋚ᤈݢᚆ 17

Slide 18

Slide 18 text

αϦЀϕϖϷϣЀҘ 18

Slide 19

Slide 19 text

S3 Event Notification • S3΁咲ኞͭ͵αϦЀϕ(Put/Delete΀Ϳ) Ψॶ䱛΁ݱ圵㳌ቘΨ䋚ᤈͽͣΡ՛奲Ε 1. ᓕቘᘏ͢ίϐϤϺЄϖአϝξϐϕ΁ኮ ؟ΨPut 2. S3 Event NotificationͽLambda᩸㵕 3. Lambdaͽኮ؟Ψےૡ̵ͭᤒᐏአϝξϐ ϕ΁Put 4. ϳЄσ΅CloudFront奺ኧͽኮ؟Ψᤒᐏ 19

Slide 20

Slide 20 text

SNS Notification • SNSϕϡϐμ奺ኧͽLambda᩸㵕ݢᚆ 1. ͚ͭͣ㮔Ψ᩻晃ͭ͵΄ͽCloudWatch Alarm咲ᅉ 2. CloudWatch Alarm΄ίμτϴЀͽSNS ϕϡϐμ΁᭗Ꭳ 3. ϕϡϐμΨςϣφμ϶αϣͭͼ͚Ρ LambdaΨ䋚ᤈ 4. Lambda͡ΟSlack΁᭗Ꭳ 20

Slide 21

Slide 21 text

Kinesis Firehose • Kinesis Firehose΄φϕϷЄϭॶ䱛ͽ Lambda᩸㵕ݢᚆ 1. ϤϺϔϲЄς͡ΟKinesis Firehose΁φ ϕϷЄϭϔЄόಭف 2. φϕϷЄϭϔЄό͢ಭفͫ΢Ρ; Lambda᩸͢㵕ͫ΢ͼETL㳌ቘ䋚ෞ 3. ๋奰ጱ΁ےૡͫ΢͵ϔЄόΨS3΁Put 21

Slide 22

Slide 22 text

3. Serverless΄ڥᅩ 22

Slide 23

Slide 23 text

ضᑕ΄㾩ΨServerless΀ఽͮ΁ ᗝͣ䟵͞ͼΕΡ 23

Slide 24

Slide 24 text

24

Slide 25

Slide 25 text

Serverless΀ίЄκϓμώϰ • CloudFrontͽϞφϦЄφϸЄϓΰЀν • Ϟφ΁䖕ͮͼS3͡API Gateway΁ϕ϶ Ϣΰϐμၞͯ • S3΄WebϨφϓΰЀνͽUIᤒᐏ • API Gateway΄IntegrationͽLambda᩸㵕 • Lambda͡ΟDynamoDB΁put_item/ get_item • ϔЄόφϕί;ͭͼDynamoDB • Lambda on VPC + RDSͽΘOK 25

Slide 26

Slide 26 text

Serverless΄ڥᅩ • ϫϚЄυϖςЄϠφΨӾஞ;ͭ͵ίЄκϓμώϰ΀΄ͽ晁አᶎΨAWS΁͠Δ͡ͱͽ ͣΡ • ςЄϠφ(πЄϖ)΄樄咲΁ϷϊЄφΨᵞӾͽͣΡ • ᛔᆐ;听奾ݳ(ϫαμϺςЄϠφ)΀ίЄκϓμώϰ΁΀Ρ • 1ͺ΄Lambdaͽقͼ΄㳌ቘΨ䋚ෞͯΡ΄΅匍䋚ጱͮΙ΀͚΄ͽ̵ᛔᆐ;晒ڔ΀ᔉ ଶͽړ櫝ͭͼ͚ͥ • Ӟᛱጱ΁EC2ΨӾஞ;ͭ͵ίЄκϓμώϰΞΠΘπφϕΨಪ͞Ο΢Ρ • Lambda͢ϷμεφϕϦЄφ΄抓ᰂ֛ᔮ΀΄͢य़͚ͣ 26

Slide 27

Slide 27 text

4. ServerlessΨඪ͞ΡϑЄϸ 27

Slide 28

Slide 28 text

ServerlessίЄκϓμώϰ΄抓氂 • LambdaΨ㵕֢ͫͱΡ΄΅఺क़;ᶎׯ͚ͥͫ • ϫϚυϮЀϕπЀϊЄϸͽፗളπЄϖ䨗ͥ • ϺЄθϸͽπЄϖ䨗ͥ → Zip΁ࢴΗΡ → ίϐϤϺЄϖͯΡ • LambdaӞ㮆Ͷͧͽਠ奾ͯΡΞ͜΀䯤౮΅ΑΒ΀͚ • 愢හ΄AWSϷϊЄφΨڥአͯΡ΄͢୮͵Πڹ • ϓφϕΨͭ͵͚ • ϳϘϐϕϓφϕ • ϺЄθϸ厏हͽ΄ϓφϕ • ͩ΄旽ΨӤಋͥΚ͹ͼͥ΢Ρ՛奲Ε͢Α͚ͭ 28

Slide 29

Slide 29 text

ϢϹЄϭϼЄμ 29

Slide 30

Slide 30 text

ϢϹЄϭϼЄμ • ϔϤϺαϮЀϕϞϐξЄυ֢౮ϤϺψφ΄墋ᔰ۸ • ServerlessίЄκϓμώϰق֛΄πЄϖ۸ • CloudFormation • Terraform • πЄϖ۸΁ΞΡڥᅩ • ٚ匍௔ • Git/GitHub/PR洑㵕樄咲 • CI/CDΨڥአͭ͵ϔϤϺαϞαϤ϶αЀ۸ 30

Slide 31

Slide 31 text

դᤒጱ΀ϢϹЄϭϼЄμ Serverless Framework AWS Serverless Application Model(AWS SAM) Apex 䋚ᤰ Node.js ᎣΟΩ(Java?) Go ϫϸώμ϶γϖ Yes No No OSS Yes No Yes AWSϷϊЄφ΄֢౮ොဩ CloudFormation(Ӟ᮱ᶋ䌏䖕) CloudFormation Terraform CLI΄ํ僻 Yes(sls) No(AWS CLI?) Yes(apex) ͳ΄՜ Ϥ϶ναЀ΁ΞΡ䝭䔴 ϺЄθϸ䋚ᤈ΄ςϪЄϕ ग़䱛ᚆ ڥአᘏग़͚Ҙ AWS挘愚 Swagger & ChangeSetςϪЄϕ 㷗ੂ΁᥺͜;ϢϹЄϭϼЄμ ͽ΅΀ͥϯϔϸ HookςϪЄϕ Go᥺承΄ςϪЄϕܹ͚Ҙ Dry-runςϪЄϕ τЀϤϸ 31

Slide 32

Slide 32 text

ϓφϕϑЄϸ 32

Slide 33

Slide 33 text

ϳϘϐϕϓφϕ • Lambda΅क़᮱͡ΟჁͫ΢͵ϔЄόΨ㳌ቘͯΡ樛හ;഍͞Ρͩ;ΘͽͣΡ • AWS΄䁰ݳLambda΁Ⴡͫ΢ΡϔЄό΅㶨΀ΡJSON • ෬ਂϓφϕϯυϲЄϸΨֵ͹͵ϳϘϐϕϓφϕ͢ݢᚆ • ᇙਧ΄JSONΨჁͯ → 奾ຎ͢๗இͭ͵Θ΄͡嘦扯 • Node.js΄chai;͡ΞֵͥΥ΢ͼΡ͹Γ͚ • http://qiita.com/horike37/items/15bf675f973d30bb1f5c • PythonͶ͹͵Οpytest • https://librabuch.jp/blog/2016/07/aws-lambda-environment/ 33

Slide 34

Slide 34 text

ϺЄθϸ厏हͽ΄ϓφϕ • ϓφϕΨͯΡ΄΁AWS厏हΨ͚ͷ͚ͷአ఺ͯΡ΄΅ᶎׯ • ϺЄθϸͽAWS;ݶᒵ΄䱛ᚆΨͯΡΘ΄Κ̵ϯϐμᔮ΄ϑЄϸΨڥአͯΡ ϑЄϸ ༷ᥝ Serverless Framework lambda-local Lambda΄فڊێΨϺЄθϸͽٚ匍ݢᚆ DynamoDB Local DynamoDB;ݶᒵ΄䱛ᚆΨϺЄθϸͽٚ匍ݢᚆ AWS挘愚 mhart/kinesalite Kinesis΄فڊێΨϺЄθϸͽٚ匍ݢᚆ spulec/moto AWSςЄϠφ΄فڊێΨϺЄθϸͽٚ匍ݢᚆ atlassian/localstack 愢හ΄ϺЄθϸ䋚ᤈᔮςЄϠφΨΔ;Η͵ϢϸφόϐμϑЄϸ 34

Slide 35

Slide 35 text

5. ᐒտ΅ኚͥ΀͚ 35

Slide 36

Slide 36 text

ᐒտ΅ኚͥ΀͚ • Lambda΁΅ͳ΢΀Π΁ګ夹͘͢Ρ • ๋य़䋚ᤈ䦒樌5ړ • ๋य़φϕϹЄυ512MB(/tmp) • ෬ਂ΄ದ悬;ϫϐώͭ΀͚䁰ݳΘ͘Ρ • Ruby on Rails;͡ • قͼ΄EC2Ψᗝͣ䟵͞ΡΘ΄ͽ΅΀͚ • 䁰ݳ΁Ξ͹ͼπЀϓϗ(ECS)ςЄϠφΘ䭥懵ͯΡ • 晒๭晒ಅͽڥአͯΡͩ; 36

Slide 37

Slide 37 text

Serverless͢ϜϫΠΚ͚ͯϳЄφξЄφ • ϷίϸόαϭϢήαϸ㳌ቘ • S3΄Event NotificationͽLambda᩸㵕 → ኮ؟㳌ቘ • ϷίϸόαϭφϕϷЄϭ㳌ቘ • Kinesis → LambdaͽETL → S3ΚDynamoDB • APIϝϐμεЀϖ • API Gateway;΄Integration → Lambda → ϔЄόφϕί • SNSϕϡϐμ;΄昧൭ • AWSςЄϠφ樌΄Ϝϣ;΀ΡSNSϕϡϐμ → Lambda᩸㵕 → ձ఺΄㳌ቘ https://www.slideshare.net/keisuke69/aws-lambda-amazon-api-gateway-deep-dive 37

Slide 38

Slide 38 text

6. Δ;Η 38

Slide 39

Slide 39 text

Δ;Η • AWSΨڥአͯΡ΀ΟServerlessίЄκϓμώϰΨֵ͹ͼΕΞ͜ • 僻ቘ΁ίЄκϓμώϰق֛ΨServerless۸ͭͯͤ΀͚ • ᥝկጱ΁櫞ͭͳ͜ͽ͘΢Άᔰፗ΁EC2/ECSΨ䭥懵ͯΡ • ΔͰ΅φϯЄϸφόЄϕ͡ΟতΗΡ 39

Slide 40

Slide 40 text

͠ΥΠ 40

Slide 41

Slide 41 text

7. ݇ᘍϷЀμ 41

Slide 42

Slide 42 text

Serverless;΅֜͡ • https://rebuild.fm/160/ • https://martinfowler.com/articles/serverless.html • http://dev.classmethod.jp/cloud/aws/serverless- meetup-20160802/ 42

Slide 43

Slide 43 text

Serverless΀ίЄκϓμώϰ • https://speakerdeck.com/ikait/serverless-architecture-supports- nikkeis-paper-viewer 43

Slide 44

Slide 44 text

ServerlessΨඪ͞ΡϑЄϸ • https://github.com/serverless/serverless • https://github.com/awslabs/serverless-application-model • https://github.com/apex/apex • https://speakerdeck.com/horike37/serverless-framework- workshop • https://medium.com/vandium-software/unit-testing-aws- lambda-functions-in-node-js-7ad6c8f5000 44

Slide 45

Slide 45 text

ᐒտ΅ኚͥ΀͚ • http://docs.aws.amazon.com/lambda/latest/dg/limits.html • https://www.slideshare.net/keisuke69/aws-lambda-amazon-api- gateway-deep-dive 45