Slide 1

Slide 1 text

ݸਓ։ൃऀͷͨΊͷ aws-serverless-express HANATANI Takuma(@potato4d) 2018.03.23 #kyotojs

Slide 2

Slide 2 text

Ξ • ࣗݾ঺հ • ݸਓ։ൃʹ͓͚ΔΠϯϑϥෛ୲ͷਏ͞ • PaaSʹΑΔղܾ • aws-serverless-expressͷྑ͞ • ݸਓ։ൃऀʹͱͬͯͷNode.jsͷΠϯϑϥͷͭΒ͞ • aws-serverless-expressͷ͸͡Ί͔ͨ

Slide 3

Slide 3 text

ࣗݾ঺հ

Slide 4

Slide 4 text

Ί͙ΈΜ ੠ - ಺ాਅྱ / ߴڮཥґ ߚຐ଒ͷগঁɻ13ࡀˠ14ࡀ ʢWEB൛Ͱ͸17ࡀલޙʣɻεϐϯΦϑʮ͜ͷૉ੖Β͍͠ ੈքʹരԍΛʂ ʯͷओਓެɻ ࠇ൅ʹߚ͍໨ɻࠇϚϯτ ʹࠇϩʔϒɺτϯΨϦ๧ࢠΛඃΓɺࠨ໨ʹ؟ଳʢผʹ໨ ͕ѱ͍Θ͚Ͱ͸ͳ͘ɺͨͩͷϑΝογϣϯʣΛ͚͍ͭͯ ΔɻΧζϚͱΞΫΞͷग़ͨ͠ύʔςΟʔϝϯόʔืूͷ ுΓࢴΛݟͯ஥ؒʹՃΘΔɻମ֨͸খฑͰࡉ਎ɺ਎௕͸ গͳ͘ͱ΋ΧζϚ(165cm)ΑΓ௿͍ɻ԰ෑͰ͸੺ͷύ IUUQTCJUMZ;#'.;P

Slide 5

Slide 5 text

@potato4d • ౦ژͰϑϦʔϥϯε΍ͬͯΔ • ͍͍ͩͨϑϩϯτΤϯυ • ࠷ۙ͸ຆͲNuxtͷ։ൃͱ͔ϑϩϯτٕज़૬ஊ • Vue.js JP / VueFes Staff / Vue.js translator • ͜ͷؒٱʑʹNode.jsΛੜͰॻ͍ͨΒdeep copyͷͨ Ίʹobject-rest-spreadΛ࢖ͬͯCIΛམͱͨ͠ਓ

Slide 6

Slide 6 text

ຊ୊

Slide 7

Slide 7 text

͍͖ͳΓͰ͕͢օ͞Μʂ

Slide 8

Slide 8 text

ݸਓ։ൃͯ͠·͔͢ʁ

Slide 9

Slide 9 text

WebApp։ൃͯ͠·͔͢ʁ

Slide 10

Slide 10 text

ݸਓ։ൃͷʮΠϯϑϥʯ ͭΒ͘ͳ͍Ͱ͔͢ʁ

Slide 11

Slide 11 text

ʮϝϯςφϯεʯʹ ৽͍͜͠ͱΛ΍Δ࣌ؒΛ ୣΘΕ͍ͯ·ͤΜ͔ʁ

Slide 12

Slide 12 text

ຊ࣭తͰͳ͍࡞ۀͰ ϞνϕΛԼ͍͛ͯ·ͤΜ͔ʁ

Slide 13

Slide 13 text

ྫ͑͹ʮ͜Μͳ͜ͱʯ ىͬͯ͜ͳ͍Ͱ͔͢ʁ

Slide 14

Slide 14 text

ݸਓ։ൃͷΠϯϑϥϝϯςͷͭΒΈ • IaaSΛआΓ͍ͯΔͱηΩϡϦςΟΞοϓσʔτͳͲʹ ࣮֬ʹ௥ΘΕͯͲ͔͜ͰରԠ͢ΔϋϝʹͳΔ • Φʔτεέʔϧͷߏ੒ʹ͠ͳ͍ͱෛՙʹରॲͰ͖ͳ ͍͚ͲɺݸਓͰΦʔτεέʔϧ͸͓ࡒ෍͕ͭΒ͍ • Կނ͔Docker͕յΕͯରԠͰझຯ։ൃͷ༹͕͚࣌ؒ Δ • ͜ͷۤ͠Έ͕WebAppͷ਺͚ͩ૿͍͑ͯ͘

Slide 15

Slide 15 text

͋Γ͕ͪ

Slide 16

Slide 16 text

࡞Ε͹࡞Δ΄Ͳ৽͍͠΋ͷΛ ࡞Δ͕࣌ؒݮ͍ͬͯ͘

Slide 17

Slide 17 text

ϝϯςͨ͘͠ͳ͍

Slide 18

Slide 18 text

Ͳ͏ʹ͔ͯ͠ղܾ͍ͨ͠

Slide 19

Slide 19 text

ࠓ೔͸͜ΕΛղܾ͠Α͏

Slide 20

Slide 20 text

Α͋͘Δղܾ๏

Slide 21

Slide 21 text

PaaSΛ࢖͏

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

Heroku࢖͍͕ͪ • ݴޠΛಛʹ໰Θͣʹ࢖͑ΔͷͰศར • جຊແྉͩ͠༗ྉͰ24hىಈʹͯ͠΋͔͔ͨͩ ݄800ԁ͙Β͍ • Let’s Encrypt ͷࣗಈߋ৽΋Ͱ͖Δ͠Addon΋ ͋ͬͯࢮ͵΄Ͳศར • େମ͜ΕͰΑ͘ͳΔ

Slide 24

Slide 24 text

͚ͲͭΒ͍࣌΋͋Δ

Slide 25

Slide 25 text

HerokuͰͭΒ͍ͱ͖ • ϨΠςϯγ͕ΩπΠ • ݸਓ։ൃͰFastlyΛ࢖͑ΔΘ͚͕ͳ͍ΜͩΑͳ • Naked domainͷSSLʹରԠͯ͠ͳ͍ • ϧʔτυϝΠϯͰSSL͍ͨ͠ͳΒCloudFrontט·ͤΖ • େྔʹಈ͔ͩ͢͠ͱແྉ࿮͕2ඵͰރׇ͢Δ • εέʔϦϯάੑೳ͕ऴ͍ྃͯ͠Δ

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

GAE Standard࢖͍͕ͪ • Google͕޷͖ͳݴޠͩͱLambdaతͳ࣮ߦ࣌ؒ՝ۚͰ ΞϓϦέʔγϣϯΛಈ͔ͤΔͷͰ͍҆ • cronͱ͔΋͍ͭͯͯҙ֎ʹߴੑೳ • ೔ຊϦʔδϣϯ͕໪࿦͋ΔͷͰ͸΍ͯ͘࠷ߴͬΆ͍ • Naked domainͷSSLରԠ΋όονϦ • σϑΥͰΦʔτεέʔϧ͢Δ • େମ͜ΕͰΑ͘ͳΔ

Slide 28

Slide 28 text

͜Ε΋ͭΒ͍͕࣌͋Δ

Slide 29

Slide 29 text

GAE StandardͰͭΒ͍ͱ͖ • Google͕޷͖ͳݴޠҎ֎͸ߴ͍ϓϥϯ(Flexible)͔͠ ͳ͍ • ͦͷ޷͖ͳݴޠ͸Python/Go/Java͋ͨΓͰͭΒ͍ • Flexible͸DockerίϯςφΛಈ͔͚ͩ͢ͳͷͰී௨ʹ ֹ݄ͰGCEͷྉ͕͔͔ۚͬͯߴͯͭ͘Β͍ • Flexible͸ElasticBeanstalkΈ͍ͨͳ΋Μ

Slide 30

Slide 30 text

NodeͰͷ։ൃऀʹਓݖ͕ͳ͍

Slide 31

Slide 31 text

ͦ͜Ͱ

Slide 32

Slide 32 text

΋͏Ұͭͷղܾํ๏

Slide 33

Slide 33 text

FaaSʹࡌͤΔ

Slide 34

Slide 34 text

Lambdaͱ͔CloudFunctions

Slide 35

Slide 35 text

FaaS • Node.jsͰॻ͚Δ(Lambda͸Python/Java΋) • Lambda͸Πϕϯτͷ൚༻ੑΛɺCloudFunctions͸ Express LikeͳI/F͕ັྗͳܗͰఏڙ͞Ε͍ͯΔ • ϨΠςϯγ΋ॳճىಈ͕ඍົ͙Β͍ • ໪࿦࣮ߦ࣌ؒ՝ۚͰ͍҆ • ٯʹແݶʹϦΫΤετ͕͖ͨΒۚΛ͔͚ͯΦʔτεέʔ ϧແݶʹͯ͘͠Εͯศར

Slide 36

Slide 36 text

͚ͲͭΒ͞΋͋Δ

Slide 37

Slide 37 text

FaaSͷͭΒ͞ • ݁ہҰఆҎ্ಠࣗه๏ʹམͪண͘ • طଘͷNode.jsΞϓϦέʔγϣϯͷ࡞ΓํͰ࡞Δ͜ͱ ͕Ͱ͖ΔΘ͚Ͱ͸ͳ͍ • ٕज़తʹ൚༻ੑ͕ͳ͍ʢϩοΫΠϯʣ • ϩʔΧϧ࣮ߦ͕ͱʹ͔͘ΊΜͲ͍͘͞ • API Gateway͔Β౉ͬͯ͘Δ event ͷߏ଄͕…… • ׬੒඼͸Αͯ͘΋։ൃ్த͕ͭΒ͍

Slide 38

Slide 38 text

ͭΒ͍

Slide 39

Slide 39 text

FaaSͷಛ௃Λ࣋ͬͨ GAE/SE for Node.js͕͋Ε͹……

Slide 40

Slide 40 text

ͦΜͳ࣌ͷٹੈओ

Slide 41

Slide 41 text

aws-serverless-express

Slide 42

Slide 42 text

ͱ͜ΖͰ

Slide 43

Slide 43 text

aws-serverless-express Λ஌͍ͬͯΔਓʁ

Slide 44

Slide 44 text

aws-serverless-express ࢖ͬͨ͜ͱ͋Δਓʁ

Slide 45

Slide 45 text

aws-serverless-express • Amazon͕ϊϦͰ࡞ͬͪΌͬͨ
 “AWS LambdaͰExpress͕ಈ͘” ϥΠϒϥϦ • طଘͷExpressΞϓϦέʔγϣϯʹMiddlewareΛ௥Ճ ͢Δ͚ͩͰԿނ͔LambdaͰಈ͘ • αʔόʔϨεͷԸܙΛड͚ͳ͕Β׳Ε਌͠ΜͩExpress ه๏ͰΞϓϦέʔγϣϯΛهड़Ͱ͖Δͷ͕ັྗ

Slide 46

Slide 46 text

Source Code const serverlessExpress = require('aws-serverless-express/middleware') app.use(serverlessExpress.eventContext()) app.get('/', (req, res) => { res.json(req.apiGateway.event) })

Slide 47

Slide 47 text

࣮ࡍʹ࢖ͬͯΔWebApp https://connpassport.com

Slide 48

Slide 48 text

ྑ͞

Slide 49

Slide 49 text

Ͳ͕͜ྑ͍ͷ͔ • ී௨ʹNode.jsͰ։ൃ͍ͯ͠ΔͷʹԿނ͔ແݶʹε έʔϧ͢Δ • ී௨ʹNode.jsͰ։ൃ͍ͯ͠ΔͷʹԿނ͔࣮ߦ࣌՝ۚ • ී௨ʹNode.jsͰ։ൃ͍ͯ͠Δͷʹͳ͔ͥϝϯςφϯ εϑϦʔ • Naked domainͷSSLɺϦʔδϣϯʹΑΔϨΠςϯγɺ ϩοΫΠϯ……͖ͬ͞·Ͱͷશ෦ͷ՝୊͕ղফ

Slide 50

Slide 50 text

ཉ͔ͬͨ͠΋ͷશ෦ೖΓ

Slide 51

Slide 51 text

aws-serverless-express͸ શͯΛղܾͯ͘͠ΕΔ

Slide 52

Slide 52 text

ͭΒ͞ͷ͓͞Β͍ • ͦ΋ͦ΋IaaS͸ϝϯς͕ͭΒ͍ • Heroku͸ϨΠςϯγ͕ͭΒ͍ • GAE/SEʹ͸ͳ͍ • FaaS͸ϩοΫΠϯ͕ͭΒ͍

Slide 53

Slide 53 text

ղܾͰ͖͍ͯΔ͔ • ϨΠςϯγ͸ͳ͍͔
 ->ϥϯλΠϜͷॳճىಈͷ஗͚ͩ͞ • ϚωʔδυPaaS Likeʹ࢖͑Δ͔
 ->࢖͑ͯ࠷ߴ • ಠࣗه๏͸ͳ͍͔
 ->શͯExpressͦͷ··

Slide 54

Slide 54 text

ղܾͰ͖͍ͯΔ͔ • εέʔϦϯά • ΊͪΌΊͪΌ͢Δ͠ٯʹਓ͕͍ͳ͍࣌͸͓͕͔͔ۚ Βͳ͍ͷͰͲͬͪͷҙຯͰ΋࠷ߴ • ӡ༻ίετ • جຊతʹFaaSͳͷͰօແɺূ໌ॻ΋ACM • API GW + ACM + Route53ʹͳΔͷͰNaked OK

Slide 55

Slide 55 text

ૉఢʂ

Slide 56

Slide 56 text

࢖͍͍ͨʂ

Slide 57

Slide 57 text

͸͡Ί͔ͨ

Slide 58

Slide 58 text

awslabs/aws-serverless-express ʹΞΫηε

Slide 59

Slide 59 text

͓΋ΉΖʹexampleΛΫϦοΫ

Slide 60

Slide 60 text

Win/Mac/LinuxରԠͷςϯϓϨ

Slide 61

Slide 61 text

README͕ΊͬͪΌஸೡ

Slide 62

Slide 62 text

طଘϓϩδΣΫτͷҠߦ

Slide 63

Slide 63 text

yarn add aws-serverless-express

Slide 64

Slide 64 text

lambda.jsΛ࡞੒ const awsServerlessExpress = require('aws-serverless-express') const app = require('./app') const server = awsServerlessExpress.createServer(app) exports.handler = (event, context) => awsServerlessExpress.proxy(server, event, context)

Slide 65

Slide 65 text

Expressଆ(e.g. app.js)ʹ௥ه const serverlessExpress = require('aws-serverless-express/middleware') app.use(serverlessExpress.eventContext())

Slide 66

Slide 66 text

͜ͷ··LambdaʹσϓϩΠͰ OK

Slide 67

Slide 67 text

·ͱΊ

Slide 68

Slide 68 text

aws-serverless-express • LambdaͰExpressΛಈ͔͢ϥΠϒϥϦ • Expressϛυϧ΢ΣΞͱͯ͠։ൃ͞Ε͓ͯΓɺ طଘϓϩδΣΫτ΁ͷಋೖ΋Մೳ • Expressͷ͔͖৺஍ͰLambdaͷPros/ConsΛ Ҿ͖ܧ͙ΞϓϦέʔγϣϯΛ࡞Δ͜ͱ͕Մೳ

Slide 69

Slide 69 text

Α͞ • ݱঢ়ͷPaaSࣄ৘Ͱ͸ຬͨͤͳ͍ཁ݅ΛຬͨͤΔ • ௿ϨΠςϯγ • ࣮ߦ࣌ؒ՝͔ۚͭΦʔτεέʔϦϯά • Node.js؀ڥ͕ಈ͘ • Naked domainͷSSLରԠ • ͷશ෦ೖΓ؀ڥ

Slide 70

Slide 70 text

͸͡ΊΔʹ͸ • ެࣜϨϙδτϦͷexample͕ϘΠϥʔϓϨʔ τͳͷͰͦͷ··࢖͑Δ • طଘϓϩδΣΫτ΁ͷಋೖ΋READMEʹ͋Δ ͱ͓ΓʹmiddlewareΛ௥Ճ͢Δ͚ͩ

Slide 71

Slide 71 text

࢖͓͏

Slide 72

Slide 72 text

͓ΘΓʹ

Slide 73

Slide 73 text

No content

Slide 74

Slide 74 text

GAE/SE for Node དྷΔ΍Μ͚ʂ

Slide 75

Slide 75 text

એ఻

Slide 76

Slide 76 text

No content

Slide 77

Slide 77 text

No content

Slide 78

Slide 78 text

ご清聴ありがとうございま し . た    .